Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Need help to finish my Hud script

What it is

I have been developing a more origional, easier to see, and more detailed Hud system for my MMORPG. I am changing to 2k graphics, instead of the home-made ones I tried, and so I thought a more professional Hud would be best.

Basically, at the moment it has:

-Window showing details of the character (I need to finish this, don't worry I can do this bit)
-Window showing characters' portrait (I can finish this myself too)
-Window showing items the player has got equipped (Finished, near enough)
-Currently disfunctional window for skills

What it needs:

For the skills window, at the right positions, the skills which the player has set to the hotkeys 1 to 5, will have their icons shown here. Skills are set to hotkeys using Near's ABS 4.0. I have posted the script in this post just incase it is needed.

Also, a HP and MP bar need to be shown on there in the right positions, see screenie, they also need to have the amount of HP and MP the player currently has left. This needs to self-update whenever the player is healed or hit for damage.

What it should be like

http://img.photobucket.com/albums/v108/ ... ness-1.png[/IMG]

Near's ABS

I need this editted so that only keys 1 to 5 can be used as hotkeys, instead of the 1 to 10 that is currently used.

Code:
#==============================================================================
# â–  Action Battle System
#==============================================================================
# By Near Fantastica
# Version 4
# 29.11.05
#==============================================================================
# â–  ABS Key Commands
#==============================================================================
#   A    ● Dash
#   S    ● Sneak
#   D    ● Attack
#   1    ● Skill Key 1
#   2    ● Skill Key 2
#   3    ● Skill Key 3
#   4    ● Skill Key 4
#   5    ● Skill Key 5
#   6    ● Skill Key 6
#   7    ● Skill Key 7
#   8    ● Skill Key 8
#   9    ● Skill Key 9
#   0    ● Skill Key 0
#==============================================================================
# â–  ABS Enemy Ai List
#==============================================================================
#   Name
#   Name Of the Enemy in The Data Base
#---------------------------------------------------------------------------
#   Behavior
#   Passive = 0 ● The Event (Enemy) will only attack when attacked
#   Aggressive = 1 ● The Event will attack when one of its Detection level are set true
#   Linking = 2 ● Event will only attack when another Event is attacked with in its Detection level
#   Aggressive Linking = 3 ● Event will attack when either Aggressive or Linking is true
#---------------------------------------------------------------------------
#   Detection
#   Sound = range ● The range of sound the enemy can hear inactive if set to zero
#   Sight = range ● The range of sightthe enemy can see inactive if set to zero
#---------------------------------------------------------------------------
#   Aggressiveness
#   Aggressiveness = Level ● The high number the less Aggressive the Event
#---------------------------------------------------------------------------
#   Movement
#   Speed = Level ● The movment Speed of the event when engaged
#   Frequency = Level  ● The movment Frequency of the event when engaged 
#---------------------------------------------------------------------------
#   Trigger
#   Erased = 0  ● The event will be erased on death
#   Switch = 1  ● The event will be trigger Switch[ID] on death
#   Varible = 2  ● The event will be set the Varible[ID] = VALUE on death
#   Local Switch = 3 ● The event will trigger Local_Switch[ID] on death
#==============================================================================
# â–  ABS Range Constant
#==============================================================================
#   RANGE_WEAPONS[Weapon Id] = 
#   ["Character Set Name", Ammo Speed, Anmiation Id, Ammo Item Id, Range]
#   RANGE_SKILLS[Skill Id] = 
#   [Range, Ammo Speed, "Character Set Name"]
#==============================================================================

#--------------------------------------------------------------------------
# * SDK Log Script
#--------------------------------------------------------------------------
SDK.log("ABS", "Near Fantastica", 4, "29.11.05")

if SDK.state("Input") == nil or SDK.state("Input") == false
p "Input Addition Not Found"
SDK.disable("ABS")
end

#--------------------------------------------------------------------------
# * Begin SDK Enable Test
#--------------------------------------------------------------------------
if SDK.state("ABS") == true

class ABS
  #--------------------------------------------------------------------------
  RANGE_WEAPONS = {}
  RANGE_WEAPONS[17] = ["Arrow", 5, 4, 35, 10]
  RANGE_WEAPONS[18] = ["Arrow", 5, 4, 35, 10]
  RANGE_WEAPONS[19] = ["Arrow", 5, 4, 35, 10]
  RANGE_WEAPONS[20] = ["Arrow", 5, 4, 35, 10]
  #--------------------------------------------------------------------------
  RANGE_SKILLS = {}
  RANGE_SKILLS[7] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[8] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[10] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[11] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[13] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[14] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[16] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[17] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[19] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[20] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[22] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[23] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[25] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[26] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[28] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[29] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[31] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[33] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[35] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[37] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[39] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[41] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[43] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[45] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[47] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[49] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[51] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[57] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[58] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[59] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[60] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[61] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[62] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[63] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[64] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[65] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[66] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[67] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[68] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[69] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[70] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[71] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[72] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[73] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[74] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[75] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[76] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[77] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[78] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[79] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[80] = [1, 5, "Magic Balls"]
  #--------------------------------------------------------------------------
  DASH_KEY = Input::Letters["A"]
  SNEAK_KEY = Input::Letters["S"]
  ATTACK_KEY = Input::Letters["D"]
  SKILL_KEYS = Input::Numberkeys
  #--------------------------------------------------------------------------
  attr_accessor :enemies
  attr_accessor :range
  attr_accessor :skills
  attr_accessor :dash_level
  attr_accessor :sneak_level
  attr_accessor :p_animations
  attr_accessor :e_animations
  #--------------------------------------------------------------------------
  def initialize
    # Enemies
    @enemies = {}
    # Range
    @range = []
    # Skills
    @skills = []
    # Dashing
    @dashing = false
    @dash_restore = false
    @dash_reduce= false
    @dash_timer = 0
    @dash_level = 5
    @dash_sec = 0
    # Sneaking
    @sneaking = false
    @sneak_restore = false
    @sneak_reduce= false
    @sneak_timer = 0
    @sneak_level = 5
    @sneak_sec = 0
    # Button Mashing
    @mash_bar = 0
    #Animation
    @p_animations = false 
    @e_animations = false
  end
  #--------------------------------------------------------------------------
  def ATTACK_KEY
    return ATTACK_KEY
  end
  #--------------------------------------------------------------------------
  def SKILL_KEYS
    return SKILL_KEYS
  end
  #--------------------------------------------------------------------------
  def RANGE_WEAPONS
    return RANGE_WEAPONS
  end
  #--------------------------------------------------------------------------
  def RANGE_SKILLS
    return RANGE_SKILLS
  end
  #--------------------------------------------------------------------------
  # * ABS Animation Engine Functions
  #--------------------------------------------------------------------------
  # Handles animating map sprites for a wide variety of uses
  #--------------------------------------------------------------------------
  def animate(object, animation_name, position, wait = 8, frames = 0, repeat = 0)
    if object != nil
      object.animate(animation_name, position, frames, wait, repeat)
    end
  end
  #--------------------------------------------------------------------------
  def refresh(event, list, character_name)
    @enemies.delete(event.id)
    return if character_name == ""
    return if list == nil
    parameters = SDK.event_comment_input(event, 9, "ABS Event Command List")
    return if parameters.nil?
    name = parameters[0].split
    for x in 1...$data_enemies.size
      enemy = $data_enemies[x]
      if name[1].upcase == enemy.name.upcase
        @enemies[event.id] = Game_ABS_Enemy.new(enemy.id)
        @enemies[event.id].event_id = event.id
        default_setup(event.id)
        level = parameters[1].split
        @enemies[event.id].level = level[1].to_i
        behavior = parameters[2].split
        @enemies[event.id].behavior = behavior[1].to_i
        sound = parameters[3].split
        @enemies[event.id].detection_sound = sound[1].to_i
        sight = parameters[4].split
        @enemies[event.id].detection_sight = sight[1].to_i
        aggressiveness = parameters[5].split
        @enemies[event.id].aggressiveness = aggressiveness[1].to_i
        speed = parameters[6].split
        @enemies[event.id].speed = speed[1].to_i
        frequency = parameters[7].split
        @enemies[event.id].frequency = frequency[1].to_i
        trigger = parameters[8].split
        @enemies[event.id].trigger= [trigger[1].to_i, trigger[2].to_i, trigger[3].to_i]
      end
    end
  end
  #--------------------------------------------------------------------------
  def default_setup(id)
    @enemies[id].level = 1
    @enemies[id].behavior = 1
    @enemies[id].detection_sight = 1
    @enemies[id].detection_sound = 4
    @enemies[id].aggressiveness = 2
    @enemies[id].engaged = false
    @enemies[id].speed = 4
    @enemies[id].frequency = 5
  end
  #--------------------------------------------------------------------------
  def update
    update_dash if @sneaking == false 
    update_sneak if @dashing == false
    update_enemies if @enemies != {}
    update_player
    update_range
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  def update_range
    for range in @range
      range.update
    end
  end
  #--------------------------------------------------------------------------
  def update_player
    actor = $game_party.actors[0]
    @mash_bar = 100 if @mash_bar >= 100
    @mash_bar += 10
  end
  #--------------------------------------------------------------------------
  def update_dash
    if Input.pressed?(DASH_KEY)
      if $game_player.moving?
        @dashing = true
        $game_player.move_speed = 5
        @dash_restore = false
        if @dash_reduce == false
          @dash_timer = 50 # Initial time off set
          @dash_reduce = true
        else
          @dash_timer-= 1
        end
        @dash_sec = (@dash_timer / Graphics.frame_rate)%60
        if @dash_sec == 0
          if @dash_level != 0
            @dash_level -= 1
            @dash_timer = 50 # Timer Count
          end
        end
        if @dash_level == 0
          @dashing = false
          $game_player.move_speed = 4
        end
      end
    else
      @dashing = false
      $game_player.move_speed = 4
      @dash_reduce = false
      if @dash_restore == false
        @dash_timer = 80 # Initial time off set
        @dash_restore = true
      else
        @dash_timer-= 1
      end
      @dash_sec = (@dash_timer / Graphics.frame_rate)%60
      if @dash_sec == 0
        if @dash_level != 5
          @dash_level+= 1
          @dash_timer = 60
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def update_sneak
    if Input.pressed?(SNEAK_KEY)
      if $game_player.moving?
        @sneaking = true
        $game_player.move_speed = 3
        @sneak_restore = false
        if @sneak_reduce == false
          @sneak_timer = 50 # Initial time off set
          @sneak_reduce = true
        else
          @sneak_timer-= 1
        end
        @sneak_sec = (@sneak_timer / Graphics.frame_rate)%60
        if @sneak_sec == 0
          if @sneak_level != 0
            @sneak_level -= 1
            @sneak_timer = 100 # Timer Count
          end
        end
        if @sneak_level == 0
          @sneaking = false
          $game_player.move_speed = 4
        end
      end
    else
      @sneaking = false
      $game_player.move_speed = 4
      @sneak_reduce = false
      if @sneak_restore == false
        @sneak_timer = 80 # Initial time off set
        @sneak_restore = true
      else
        @sneak_timer-= 1
      end
      @sneak_sec = (@sneak_timer / Graphics.frame_rate)%60
      if @sneak_sec == 0
        if @sneak_level != 5
          @sneak_level+= 1
          @sneak_timer = 60 # Timer Count
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def update_enemies
    for enemy in @enemies.values
      case enemy.behavior
      when 0
        if enemy.engaged == true
          next if engaged_enemy_detection_sight?(enemy) == true
          next if engaged_enemy_detection_sound?(enemy) == true
        end
      when 1
        if enemy.engaged == true
          next if engaged_enemy_detection_sight?(enemy) == true
          next if engaged_enemy_detection_sound?(enemy) == true
        else
          next if enemy_detection_sight?(enemy) == true
          next if enemy_detection_sound?(enemy) == true
        end
      when 2
        if enemy.engaged == true
          next if engaged_enemy_linking_sight?(enemy) == true
          next if engaged_enemy_linking_sound?(enemy) == true
        else
          next if enemy_linking?(enemy) == true
        end
      when 3
        if enemy.engaged == true
          next if engaged_enemy_linking_sight?(enemy) == true
          next if engaged_enemy_linking_sound?(enemy) == true
        else
          next if enemy_detection_sight?(enemy) == true
          next if enemy_detection_sound?(enemy) == true
          next if enemy_linking?(enemy) == true
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def set_event_movement(enemy)
    event = $game_map.events[enemy.event_id]
    enemy.move_type = event.move_type
    enemy.move_frequency = event.move_frequency
    enemy.move_speed = event.move_speed
    enemy.engaged = true
    event.move_type = 2
    event.move_frequency = enemy.frequency 
    event.move_speed = enemy.speed
  end
  #--------------------------------------------------------------------------
  def return_event_movement(enemy)
    enemy.engaged = false
    event = $game_map.events[enemy.event_id]
    return if event == nil
    event.move_type = enemy.move_type
    event.move_frequency = enemy.move_frequency
    event.move_speed = enemy.move_speed
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_linking_sight?(enemy)
    if enemy.detection_sight != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sight)
        enemy.linking = false
        enemy_attack(enemy)
        return true
      else
        if enemy.linking == false
          return_event_movement(enemy)
          return false
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_linking_sound?(enemy)
    if enemy.detection_sound != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sound)
        enemy.linking = false
        enemy_attack(enemy)
        return true
      else
        if enemy.linking == false
          return_event_movement(enemy)
          return false
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def enemy_linking?(enemy)
    for key in @enemies.keys
      if in_range?($game_map.events[enemy.event_id], $game_map.events[key], enemy.detection_sight)
        if enemy.engaged == true
          enemy.linking = true
          set_event_movement(enemy)
          return true
        end
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_detection_sound?(enemy)
    if enemy.detection_sound != 0
      return false if enemy.level < $game_party.actors[0].level
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sound)
        if @sneaking == true
          return false
        end
        set_event_movement(enemy)
        return true
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_detection_sight?(enemy)
    if enemy.detection_sight != 0
      return false if enemy.level < $game_party.actors[0].level
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sight)
        if facing?($game_map.events[enemy.event_id], $game_player)
          set_event_movement(enemy)
          return true
        end
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_detection_sight?(enemy)
    if enemy.detection_sight != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sight)
        enemy_attack(enemy)
        return true
      else
        return_event_movement(enemy)
        return false
      end
    end
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_detection_sound?(enemy)
    if enemy.detection_sound != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sound)
        enemy_attack(enemy)
        return true
      else
        return_event_movement(enemy)
        return false
      end
    end
  end
  #--------------------------------------------------------------------------
  def in_range?(element, object, range)
    return if element == nil or object == nil or range == nil
    x = (element.x - object.x) * (element.x - object.x)
    y = (element.y - object.y) * (element.y - object.y)
    r = x + y
    return true  if r <= (range * range)
    return false
  end
  #--------------------------------------------------------------------------
  def in_range(element, range)
    return if element == nil or range == nil
    objects = []
    x = (element.x - $game_player.x) * (element.x - $game_player.x)
    y = (element.y - $game_player.y) * (element.y - $game_player.y)
    r = x + y
    objects.push($game_party.actors[0]) if r <= (range * range)
    return objects
  end
  #--------------------------------------------------------------------------
  def facing?(element, object)
     return if element == nil or object == nil
    if element.direction == 2
      return true if object.y >= element.y
    end
    if element.direction == 4
      return true if object.x <= element.x
    end
    if element.direction == 6
      return true if object.x  >= element.x
    end
    if element.direction == 8
      return true if object.y <= element.y
    end
    return false
  end
  #--------------------------------------------------------------------------
  def in_line?(element, object)
    return if element == nil or object == nil
    if element.direction == 2
      return true if object.x == element.x
    end
    if element.direction == 4
      return true if object.y == element.y
    end
    if element.direction == 6
      return true if object.y == element.y
    end
    if element.direction == 8
      return true if object.x == element.x
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_pre_attack(enemy, actions)
    return true if enemy.hp * 100.0 / enemy.maxhp > actions.condition_hp
    return true if $game_party.max_level < actions.condition_level
    switch_id = actions.condition_switch_id
    if actions.condition_switch_id > 0 and $game_switches[switch_id] == false
      return true
    end
    n = rand(11) 
    return true if actions.rating < n
    return false
  end
  #--------------------------------------------------------------------------
  def hit_player(enemy)
    animate($game_player, $game_player.character_name + '-hit',
    $game_player.direction/2, 4, 3) if @p_animations
    $game_player.jump(0, 0)
    $game_player.animation_id = enemy.animation2_id
  end
  #--------------------------------------------------------------------------
  def actor_non_dead?(actor, enemy)
    if actor.dead?
      if not enemy.is_a?(Game_Actor)
        return_event_movement(enemy)
        enemy.engaged = false
      end
      $game_temp.gameover = true
      return false
    end
    return true
  end
  #--------------------------------------------------------------------------
  def enemy_attack(enemy)
    for actions in enemy.actions
      next if enemy_pre_attack(enemy, actions) == true
      case actions.kind
      when 0 #Basic
        if Graphics.frame_count % (enemy.aggressiveness * 30) == 0          
          case actions.basic
          when 0 #Attack
            if in_range?($game_map.events[enemy.event_id], $game_player, 1) and 
            facing?($game_map.events[enemy.event_id], $game_player)
              actor = $game_party.actors[0]
              actor.attack_effect(enemy)
              event = $game_map.events[enemy.event_id]
              animate(event, event.page.graphic.character_name + '-atk',
              event.direction/2, 4, 3, 0) if @e_animations and actor.damage != "Miss" and actor.damage != 0
              if $game_party.actors[0].damage != "Miss" and $game_party.actors[0].damage != 0
                hit_player(enemy)
              end
              actor_non_dead?(actor, enemy)
              return
            end
          when 1..3 #Nothing
            return
          end
        end
      when 1..2#Skill
        skill = $data_skills[actions.skill_id]
        case skill.scope
        when 1 # One Enemy
          if Graphics.frame_count % (enemy.aggressiveness * 30) == 0
            if in_line?($game_map.events[enemy.event_id], $game_player)
              next if enemy.can_use_skill?(skill) == false
              event = $game_map.events[enemy.event_id]
              animate(event, event.page.graphic.character_name + '-cast',
              event.direction/2, 4, 3, 0) if @e_animations
              @range.push(Game_Ranged_Skill.new($game_map.events[enemy.event_id], enemy, skill))
              enemy.sp -= skill.sp_cost
            end
          end
        when 3..4, 7 # User          
          if Graphics.frame_count % (enemy.aggressiveness * 100) == 0
            if enemy.hp < skill.power.abs
              enemy.effect_skill(enemy, skill)
              event = $game_map.events[enemy.event_id]
              animate(event, event.page.graphic.character_name + '-cast',
              event.direction/2, 4, 3, 0) if @e_animations
              enemy.sp -= skill.sp_cost
              $game_map.events[enemy.event_id].animation_id = skill.animation2_id
            end
            return
          end
        end
        return
      end
    end
  else
    return
  end
  #--------------------------------------------------------------------------
  def hit_event(event, animation)
    animate(event, event.page.graphic.character_name + '-hit',
    event.direction/2, 4, 3, 0) if @e_animations
    event.jump(0, 0)
    return if animation == 0
    event.animation_id = animation
  end
  #--------------------------------------------------------------------------
  def event_non_dead?(enemy, actor = 0)
    if enemy.dead?
      treasure(enemy) if actor = 0
      id = enemy.event_id
      @enemies.delete(id)
      event = $game_map.events[enemy.event_id]
      event.character_name = ""
      case enemy.trigger[0]
      when 0
        event.erase
      when 1
        print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if enemy.trigger[1] == 0
        $game_switches[enemy.trigger[1]] = true
        $game_map.need_refresh = true
      when 2
        print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if enemy.trigger[1] == 0
         if enemy.trigger[2] == 0
           $game_variables[enemy.trigger[1]] += 1
          $game_map.need_refresh = true
        else
          $game_variables[enemy.trigger[1]] = enemy.trigger[2]
          $game_map.need_refresh = true
        end
      when 3
        value = "A" if enemy.trigger[1] == 1
        value = "B" if enemy.trigger[1] == 2
        value = "C" if enemy.trigger[1] == 3
        value = "D" if enemy.trigger[1] == 4
        print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if value == 0
        key = [$game_map.map_id, event.id, value]
        $game_self_switches[key] = true
        $game_map.need_refresh = true
      end
      return false
    end
    return true
  end
  #--------------------------------------------------------------------------
  def treasure(enemy)
    exp = 0
    gold = 0
    treasures = []
    unless enemy.hidden
      exp += enemy.exp
      gold += enemy.gold
      if rand(100) < enemy.treasure_prob
        if enemy.item_id > 0
          treasures.push($data_items[enemy.item_id])
        end
        if enemy.weapon_id > 0
          treasures.push($data_weapons[enemy.weapon_id])
        end
        if enemy.armor_id > 0
          treasures.push($data_armors[enemy.armor_id])
        end
      end
    end
    treasures = treasures[0..5]
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      if actor.cant_get_exp? == false
        last_level = actor.level
        actor.exp += exp
        if actor.level > last_level
          actor.hp = actor.maxhp
          actor.sp = actor.maxsp
        end
      end
    end
    $game_party.gain_gold(gold)
    for item in treasures
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
        $game_party.gain_armor(item.id, 1)
      end
    end
  end
  #--------------------------------------------------------------------------
  def player_attack
    actor = $game_party.actors[0]
    if RANGE_WEAPONS.has_key?(actor.weapon_id) 
      # Range Attack
      range_weapon = RANGE_WEAPONS[actor.weapon_id]
      return if $game_party.item_number(range_weapon[3]) == 0
      $game_party.lose_item(range_weapon[3], 1)
      @range.push(Game_Ranged_Weapon.new($game_player, actor, actor.weapon_id))
      animate($game_player, $game_player.character_name + '-ranged',
      $game_player.direction/2, 4, 3) if @p_animations
    else
      # Test Button Mash
      hit = rand(30) + 10
      if hit > @mash_bar
        @mash_bar = 0
        return
      end
      @mash_bar = 0
      # Melee Attack
      for enemy in @enemies.values
        event = $game_map.events[enemy.event_id]
        if facing?($game_player, event) and in_range?($game_player, event, 1)
          actor = $game_party.actors[0]
          enemy.attack_effect(actor)
          animate($game_player, $game_player.character_name + '-atk',
          $game_player.direction/2, 4, 3) if @p_animations
          hit_event(event, $data_weapons[actor.weapon_id].animation2_id) if enemy.damage != "Miss" and enemy.damage != 0
          if event_non_dead?(enemy)
            if enemy.engaged == false
              enemy.engaged = true
              set_event_movement(enemy)
            end
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def player_skill(key)
    return if @skills[key] == nil
    skill = $data_skills[@skills[key]]
    return if skill == nil
    actor = $game_party.actors[0]
    return if not actor.skills.include?(skill.id)
    return if actor.can_use_skill?(skill) == false
    case skill.scope
    when 1 # One Enemy
      @range.push(Game_Ranged_Skill.new($game_player, actor, skill))
      actor.sp -= skill.sp_cost
        animate($game_player, $game_player.character_name + '-cast',
        $game_player.direction/2, 4, 3) if @p_animations
    when 2 # All Emenies
      $game_player.animation_id = skill.animation2_id
      actor.sp -= skill.sp_cost
      for enemy in @enemies.values
        next if enemy == nil
        enemy.effect_skill(actor, skill)
        animate($game_player, $game_player.character_name + '-cast',
        $game_player.direction/2, 4, 3) if @p_animations

        if enemy.damage != "Miss" and enemy.damage != 0
          event = $game_map.events[enemy.event_id]
          hit_event(event, 0)
        end
        if event_non_dead?(enemy)
          if enemy.engaged == false
            enemy.behavior = 3
            enemy.linking = true
            enemy.engaged = true
            set_event_movement(enemy)
          end
        end
      end
      return
    when 3..4, 7 # User
      return if actor.can_use_skill?(skill) == false
      actor.effect_skill(actor, skill)
      actor.sp -= skill.sp_cost
        animate($game_player, $game_player.character_name + '-cast',
        $game_player.direction/2, 4, 3) if @p_animations
      $game_player.animation_id = skill.animation2_id
      return
    end
  end
end

#============================================================================
# â–  Game ABS Enemy
#============================================================================

class Game_ABS_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  attr_accessor :event_id
  attr_accessor :level
  attr_accessor :behavior
  attr_accessor :detection_sight
  attr_accessor :detection_sound
  attr_accessor :aggressiveness
  attr_accessor :trigger
  attr_accessor :speed
  attr_accessor :frequency
  attr_accessor :engaged
  attr_accessor :linking
  attr_accessor :move_type
  attr_accessor :move_frequency
  attr_accessor :move_speed
  attr_accessor :ranged
  #--------------------------------------------------------------------------
  def initialize(enemy_id)
    super()
    @event_id= 0
    @level = 0
    @behavior = 0
    @detection_sight = 0
    @detection_sound = 0
    @aggressiveness = 1
    @trigger = []
    @enemy_id = enemy_id
    @engaged = false
    @linking = false
    @speed = 0
    @frequency = 0
    @move_type = 0
    @move_frequency = 0
    @move_speed = 0
    @hp = maxhp
    @sp = maxsp
  end
  #--------------------------------------------------------------------------
  def id
    return @enemy_id
  end
  #--------------------------------------------------------------------------
  def index
    return @member_index
  end
  #--------------------------------------------------------------------------
  def name
    return $data_enemies[@enemy_id].name
  end
  #--------------------------------------------------------------------------
  def base_maxhp
    return $data_enemies[@enemy_id].maxhp
  end
  #--------------------------------------------------------------------------
  def base_maxsp
    return $data_enemies[@enemy_id].maxsp
  end
  #--------------------------------------------------------------------------
  def base_str
    return $data_enemies[@enemy_id].str
  end
  #--------------------------------------------------------------------------
  def base_dex
    return $data_enemies[@enemy_id].dex
  end
  #--------------------------------------------------------------------------
  def base_agi
    return $data_enemies[@enemy_id].agi
  end
  #--------------------------------------------------------------------------
  def base_int
    return $data_enemies[@enemy_id].int
  end
  #--------------------------------------------------------------------------
  def base_atk
    return $data_enemies[@enemy_id].atk
  end
  #--------------------------------------------------------------------------
  def base_pdef
    return $data_enemies[@enemy_id].pdef
  end
  #--------------------------------------------------------------------------
  def base_mdef
    return $data_enemies[@enemy_id].mdef
  end
  #--------------------------------------------------------------------------
  def base_eva
    return $data_enemies[@enemy_id].eva
  end
  #--------------------------------------------------------------------------
  def animation1_id
    return $data_enemies[@enemy_id].animation1_id
  end
  #--------------------------------------------------------------------------
  def animation2_id
    return $data_enemies[@enemy_id].animation2_id
  end
  #--------------------------------------------------------------------------
  def element_rate(element_id)
    table = [0,200,150,100,50,0,-100]
    result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
    for i in @states
      if $data_states[i].guard_element_set.include?(element_id)
        result /= 2
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  def state_ranks
    return $data_enemies[@enemy_id].state_ranks
  end
  #--------------------------------------------------------------------------
  def state_guard?(state_id)
    return false
  end
  #--------------------------------------------------------------------------
  def element_set
    return []
  end
  #--------------------------------------------------------------------------
  def plus_state_set
    return []
  end
  #--------------------------------------------------------------------------
  def minus_state_set
    return []
  end
  #--------------------------------------------------------------------------
  def actions
    return $data_enemies[@enemy_id].actions
  end
  #--------------------------------------------------------------------------
  def exp
    return $data_enemies[@enemy_id].exp
  end
  #--------------------------------------------------------------------------
  def gold
    return $data_enemies[@enemy_id].gold
  end
  #--------------------------------------------------------------------------
  def item_id
    return $data_enemies[@enemy_id].item_id
  end
  #--------------------------------------------------------------------------
  def weapon_id
    return $data_enemies[@enemy_id].weapon_id
  end
  #--------------------------------------------------------------------------
  def armor_id
    return $data_enemies[@enemy_id].armor_id
  end
  #--------------------------------------------------------------------------
  def treasure_prob
    return $data_enemies[@enemy_id].treasure_prob
  end
end

#============================================================================
# â–  Game Battler
#============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  def can_use_skill?(skill)
    if skill.sp_cost > self.sp
      return false
    end
    if dead?
      return false
    end
    if skill.atk_f == 0 and self.restriction == 1
      return false
    end
    occasion = skill.occasion
    case occasion
    when 0..1
      return true
    when 2..3
      return false
    end
  end
  #--------------------------------------------------------------------------
  def effect_skill(user, skill)
    self.critical = false
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
       ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      return false
    end
    effective = false
    effective |= skill.common_event_id > 0
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    effective |= hit < 100
    if hit_result == true
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
      self.damage = power * rate / 20
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      if self.damage > 0
        if self.guarding?
          self.damage /= 2
        end
      end
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      effective |= hit < 100
    end
    if hit_result == true
      if skill.power != 0 and skill.atk_f > 0
        remove_states_shock
        effective = true
      end
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      if skill.power == 0
        self.damage = ""
        unless @state_changed
          self.damage = "Miss"
        end
      end
    else
      self.damage = "Miss"
    end
    return effective
  end
end

#============================================================================
# â–  Game Character
#============================================================================

class Game_Character
  attr_accessor   :move_type
  attr_accessor   :move_frequency
  attr_accessor   :move_speed
  attr_accessor   :character_name
  attr_accessor   :wait
  attr_accessor   :old_chr_name
  attr_accessor   :old_dir
  attr_accessor   :animating
  #------------------------------------------------------------------------
  alias animation_engine_game_character_initialize initialize
  #------------------------------------------------------------------------
  def initialize
    animation_engine_game_character_initialize
    @animating = false
    @wait = false
    @old_chr_name = @character_name
    @old_dir = @direction
  end
  #------------------------------------------------------------------------
  def animate(animation_name, position, frames, wait, repeat)
    @character_name = animation_name if @animating == false
    @pattern = 0
    @count = 0
    @repeat = repeat
    @direction_fix = true
    @old_dir = @direction
    @direction = position * 2
    @frames = frames
    lock
    @animating = true
    @wait = wait
    @anim_wait_count = @wait
    update
    return
  end
  #------------------------------------------------------------------------
  def update_animate
    if @anim_wait_count > 0
      @anim_wait_count -= 1
      return
    end
    if @pattern >= @frames or moving?
      if !moving?
        if @count < @repeat
          @pattern = 0
          @count += 1
          @anim_wait_count = @wait
          update
          return
        end
      end
      unlock
      @animating = false
      @pattern = 0
      @direction_fix = false
      @direction = @old_dir
      if self.is_a?(Game_Event)
        @character_name = @page != nil ? @page.graphic.character_name : ''
      else
        @character_name = @old_chr_name
      end
      $game_player.refresh
      $game_map.refresh
      return
    end
    @pattern += 1
    @anim_wait_count = @wait
    update
  end
  #------------------------------------------------------------------------
  def update_movement_type
    if @animating == true
      update_animate
      return
    end
    if jumping?
      update_jump
    elsif moving?
      update_move
    else
      update_stop
    end
  end
  #------------------------------------------------------------------------
  def update_movement
    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
      case @move_type
      when 1 # Random
        move_type_random
      when 2
        if @runpath
          run_path
        else
          move_type_toward_player
        end
      when 3
        move_type_custom
      when 4
        move_type_escape_player
      end
    end
  end
  #------------------------------------------------------------------------
  # * Move Type : Escape
  #------------------------------------------------------------------------
  def move_type_escape_player
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    abs_sx = sx > 0 ? sx : -sx
    abs_sy = sy > 0 ? sy : -sy
    if sx + sy >= 20
      move_random
      return
    end
    move_away_from_player
  end
  #------------------------------------------------------------------------
  # * Move Type : Approach
  #------------------------------------------------------------------------
  def move_type_toward_player
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    abs_sx = sx > 0 ? sx : -sx
    abs_sy = sy > 0 ? sy : -sy
    if sx + sy >= 20
      move_random
      return
    end
    move_toward_player
  end
  #------------------------------------------------------------------------
  # * Move away from Player
  #------------------------------------------------------------------------
  def move_away_from_player
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx > abs_sy
      sx > 0 ? move_right : move_left
      if not moving?
        rand(2) == 1 ? move_down : move_up
      end
    else
      sy > 0 ? move_down : move_up
      if not moving?
        rand(2) == 1 ? move_right : move_left
      end
    end
  end
end

#============================================================================
# â–  Game Ranged Weapon
#============================================================================

class Game_Ranged_Weapon < Game_Character
  #--------------------------------------------------------------------------
  attr_accessor :draw
  attr_accessor :dead
  #--------------------------------------------------------------------------
  def initialize(parent, actor, attack)
    @range = 0
    @step = 0
    @parent = parent
    @actor = actor
    @draw = true
    @dead  = false
    @range_wepaon = $ABS.RANGE_WEAPONS[attack]
    super()
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    @move_direction = @parent.direction
    moveto(@parent.x, @parent.y)
    @character_name = @range_wepaon[0]
    @move_speed = @range_wepaon[1]
    @range = @range_wepaon[4]
  end
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    hit_player if x == $game_player.x and y == $game_player.y
    for event in $game_map.events.values
      if event.x == x and event.y == y
        if event.character_name == ""
          froce_movement
        else
          hit_event(event.id)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def froce_movement
    case @move_direction
    when 2
      @y += 1
    when 4
      @x -= 1
    when 6
      @x += 1
    when 8
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  def update
    super
    return if moving?
    case @move_direction
    when 2
      move_down
    when 4
      move_left
    when 6
      move_right
    when 8
      move_up
    end
    update_step
  end
  #--------------------------------------------------------------------------
  def update_step
    kill if @step >= @range
    @step += 1
  end
  #--------------------------------------------------------------------------
  def hit_player
    actor = $game_party.actors[0]
    enemy = @actor
    $ABS.animate($game_player, $game_player.character_name + '-hit',
    $game_player.direction/2, 4, 3) if $ABS.p_animations
    actor.attack_effect(enemy)
    $game_player.animation_id = @range_wepaon[2] if actor.damage != "Miss" and actor.damage != 0
    $ABS.actor_non_dead?(actor, enemy)
    kill
  end
  #--------------------------------------------------------------------------
  def hit_event(id)
    actor = $ABS.enemies[id]
    return if actor == nil
    if @parent.is_a?(Game_Player)
      enemy = $game_party.actors[0]
      actor.attack_effect(enemy)
      $game_map.events[id].animation_id = @range_wepaon[2] if actor.damage != "Miss" and actor.damage != 0
      if $ABS.event_non_dead?(actor)
        if actor.engaged == false
          actor.behavior = 3
          actor.linking = true
          actor.engaged = true
          $ABS.set_event_movement(actor)
        end
      end
    else
      enemy = $ABS.enemies[@parent.id]
      actor.attack_effect(enemy)
      event = $game_map.events[id]
      $ABS.animate(event, event.page.graphic.character_name + '-hit',
      event.direction/2, 4, 3, 0) if $ABS.e_animations and actor.damage != "Miss" and actor.damage != 0
      $game_map.events[id].animation_id = @range_wepaon[2] if actor.damage != "Miss" and actor.damage != 0
      $ABS.event_non_dead?(actor, enemy)
    end
    kill
  end
  #--------------------------------------------------------------------------
  def kill
    @dead = true
  end
end

#============================================================================
# â–  Game Ranged Skill
#============================================================================

class Game_Ranged_Skill < Game_Character
  #--------------------------------------------------------------------------
  attr_accessor :draw
  attr_accessor :dead
  #--------------------------------------------------------------------------
  def initialize(parent, actor, skill)
    @range = 0
    @step = 0
    @parent = parent
    @skill = skill
    @actor = actor
    @range_skill = $ABS.RANGE_SKILLS[skill.id]
    @draw = true
    @dead  = false
    super()
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    @move_direction = @parent.direction
    moveto(@parent.x, @parent.y)
    @range = @range_skill[0]
    @opacity = 10 if @range == 1
    @move_speed = @range_skill[1]
    @character_name = @range_skill[2]
  end
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    hit_player if x == $game_player.x and y == $game_player.y
    for event in $game_map.events.values
      if event.x == x and event.y == y
        if event.character_name == ""
          froce_movement
        else
          hit_event(event.id)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def froce_movement
    case @move_direction
    when 2
      @y += 1
    when 4
      @x -= 1
    when 6
      @x += 1
    when 8
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  def update
    super
    return if moving?
    case @move_direction
    when 2
      move_down
    when 4
      move_left
    when 6
      move_right
    when 8
      move_up
    end
    update_step
  end
  #--------------------------------------------------------------------------
  def update_step
    kill if @step >= @range
    @step += 1
  end
  #--------------------------------------------------------------------------
  def hit_player
    actor = $game_party.actors[0]
    enemy = @actor
    actor.effect_skill(enemy, @skill)
    $ABS.animate($game_player, $game_player.character_name + '-hit',
    $game_player.direction/2, 4, 3) if $ABS.p_animations and actor.damage != "Miss" and actor.damage != 0
    $game_player.animation_id = @skill.animation2_id if actor.damage != "Miss" and actor.damage != 0
    $ABS.actor_non_dead?(actor, enemy)
  end
  #--------------------------------------------------------------------------
  def hit_event(id)
    actor = $ABS.enemies[id]
    return if actor == nil
    if @parent.is_a?(Game_Player)
      enemy = $game_party.actors[0]
      actor.effect_skill(enemy, @skill)
      $game_map.events[id].animation_id = @skill.animation2_id if actor.damage != "Miss" and actor.damage != 0
      if $ABS.event_non_dead?(actor, enemy)
        if actor.engaged == false
          actor.behavior = 3
          actor.linking = true
          actor.engaged = true
          $ABS.set_event_movement(actor)
        end
      end
    else
      enemy = $ABS.enemies[@parent.id]
      actor.effect_skill(enemy, @skill)
      $ABS.animate(event, event.page.graphic.character_name + '-hit',
      event.direction/2, 4, 3, 0) if $ABS.e_animations and actor.damage != "Miss" and actor.damage != 0
      $game_map.events[id].animation_id = @skill.animation2_id if actor.damage != "Miss" and actor.damage != 0
      $ABS.event_non_dead?(actor, enemy)
    end
  end
  #--------------------------------------------------------------------------
  def kill
    @dead = true
  end
end

#============================================================================
# â–  Game Event
#============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  alias nf_abs_game_event_refresh_set_page refresh_set_page
  #--------------------------------------------------------------------------
  def name
    return @event.name
  end
  #--------------------------------------------------------------------------
  def id
    return @id
  end
  #--------------------------------------------------------------------------
  def refresh_set_page
    nf_abs_game_event_refresh_set_page
    $ABS.refresh(self, @list, @character_name)
  end
end

#============================================================================
# â–  Spriteset Map
#============================================================================

class Spriteset_Map
  #--------------------------------------------------------------------------
  alias nf_abs_spriteset_map_initialize initialize
  alias nf_abs_spriteset_map_dispose dispose
  alias nf_abs_spriteset_map_update update
  #--------------------------------------------------------------------------
  def initialize
    @ranged = []
    for range in $ABS.range
      sprite = Sprite_Character.new(@viewport1, range)
      @ranged.push(sprite)
    end
    nf_abs_spriteset_map_initialize
  end
  #--------------------------------------------------------------------------
  def dispose
    for range in @ranged
      range.dispose
    end
    nf_abs_spriteset_map_dispose
  end
  #--------------------------------------------------------------------------
  def update
    for range in $ABS.range
      if range.draw == true
        sprite = Sprite_Character.new(@viewport1, range)
        @ranged.push(sprite)
        range.draw = false
      end
    end
    for range in @ranged
      if range.character.dead == true
        $ABS.range.delete(range.character)
        @ranged.delete(range)
        range.dispose
      else
        range.update
      end
    end
    nf_abs_spriteset_map_update
  end
end

#============================================================================
# â–  Scene Title
#============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  alias nf_abs_scene_title_cng command_new_game
  #--------------------------------------------------------------------------
  def command_new_game
    $ABS = ABS.new
    nf_abs_scene_title_cng
  end
end

#============================================================================
# â–  Scene Map
#============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  alias nf_abs_scene_map_update update
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  def update
    $ABS.update
    $ABS.player_attack if Input.triggerd?($ABS.ATTACK_KEY)
    for i in 0..9
      $ABS.player_skill(i) if Input.triggerd?($ABS.SKILL_KEYS[i])
    end
    nf_abs_scene_map_update
  end
end

#============================================================================
# â–  Scene Skill
#============================================================================

class Scene_Skill
  #--------------------------------------------------------------------------
  alias nf_abs_scene_skill_main main
  alias nf_abs_scene_skill_update update
  alias nf_abs_scene_skill_update_skill update_skill
  #--------------------------------------------------------------------------
  def main
    @shk_window = Window_Command.new(250, ["Skill Assigned to Hot Key"])
    @shk_window.visible = false
    @shk_window.active = false
    @shk_window.x = 200
    @shk_window.y = 250
    @shk_window.z = 1500
    nf_abs_scene_skill_main  
    @shk_window.dispose
  end
  #--------------------------------------------------------------------------
  def update
    @shk_window.update
    nf_abs_scene_skill_update
    if @shk_window.active
      update_shk
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_skill
    nf_abs_scene_skill_update_skill
    for i in 0..9
      if Input.triggerd?($ABS.SKILL_KEYS[i])
        $game_system.se_play($data_system.decision_se)
        @skill_window.active = false
        @shk_window.active = true
        @shk_window.visible = true
        $ABS.skills[i] = @skill_window.skill.id 
      end
    end
  end
 #--------------------------------------------------------------------------
 def update_shk
   if Input.trigger?(Input::C)
     $game_system.se_play($data_system.decision_se)
     @shk_window.active = false
     @shk_window.visible = false
     @skill_window.active = true
     $scene = Scene_Skill.new(@actor_index)
     return
   end
 end
end

#============================================================================
# â–  Scene Load
#============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  alias nf_abs_scene_load_read_data read_data
  #--------------------------------------------------------------------------
    def read_data(file)
    nf_abs_scene_load_read_data(file)
    $ABS = Marshal.load(file)
  end
end
#============================================================================
# â–  Scene Save
#============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  alias nf_abs_scene_save_write_data write_data
  #--------------------------------------------------------------------------
  def write_data(file)
    nf_abs_scene_save_write_data(file)
    Marshal.dump($ABS, file)
  end
end

#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end

The HUD script

Here's the script so far:

It needs the SDK, and Netplay+ to work...

Code:
#===============================================================================
# System_Hud
# Created by Dan Badger (a.k.a "Wyatt") for Lost Fantasy Online
# Version: 1.0
#===============================================================================

#------------------
# Equipment Window
#------------------
class Window_HudEquip < Window_Base
  def initialize
    super(194, 391, 285, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 80
    refresh
  end
  def refresh
    self.contents.clear
    @bitmap = RPG::Cache.picture("equipback.png")
    self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, @bitmap.width, @bitmap.height), 255)
  end
end

#-----------------
# Portrait Window
#-----------------
class Window_HudPortrait < Window_Base
  def initialize
    super(508, 10, 121, 112)
    self.contents = Bitmap.new(width - 0, height - 0)
    self.back_opacity = 0
    refresh
  end
  def refresh
    self.contents.clear
  end
end

#-------------
# Info Window
#-------------
class Window_HudInfo < Window_Base
  def initialize
    super(508, 116, 121, 59)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.windowskin = RPG::Cache.windowskin("ws2.png")
    self.back_opacity = 80
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.size = 12
    self.contents.draw_text(0, 0, 100, 14, "Wyatt Draegonhart")
    self.contents.draw_text(0, 14, 100, 14, "Level 17 Mage")
  end
end

#---------------
# Skills Window
#---------------
class Window_HudSkills < Window_Base
  def initialize
    super(8, 8, 80, 285)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 80
    refresh
  end
  def refresh
    self.contents.clear
    @bitmap = RPG::Cache.picture("skillsback.png")
    self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, @bitmap.width, @bitmap.height), 255)
  end
end

#---------------
# Spriteset_Map
#---------------
class Spriteset_Map
  # Thanks to Daniel for this
  alias icon_init initialize
  alias icon_dispose dispose
  def initialize
    icon_init
    bitmap = Bitmap.new(250, 32)
    unless $game_party.actors[0].weapon_id == 0
      icon = $data_weapons[$game_party.actors[0].weapon_id].icon_name
      bitmap.blt(0, 0, RPG::Cache.icon(icon), Rect.new(0, 0, 24, 24))
    end
    for i in 1..4
      case i
      when 1
        next if $game_party.actors[0].armor1_id == 0
        icon = $data_armors[$game_party.actors[0].armor1_id].icon_name
      when 2
        next if $game_party.actors[0].armor2_id == 0
        icon = $data_armors[$game_party.actors[0].armor2_id].icon_name
      when 3
        next if $game_party.actors[0].armor3_id == 0
        icon = $data_armors[$game_party.actors[0].armor3_id].icon_name
      when 4
        next if $game_party.actors[0].armor4_id == 0
        icon = $data_armors[$game_party.actors[0].armor4_id].icon_name
      end
      bitmap.blt(i*51, 0, RPG::Cache.icon(icon), Rect.new(0, 0, 24, 24))
    end
    @icon_sprite = Sprite.new
    @icon_sprite.bitmap = bitmap
    @icon_sprite.x = 222
    @icon_sprite.y = 417
    @icon_sprite.z = 500
  end
  def dispose
    icon_dispose
    @icon_sprite.dispose
  end
end

#-----------
# Scene_Map
#-----------
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
#  This class performs map screen processing.
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    main_draw    
    # Main loop
    loop do
      main_loop
      break if main_scenechange?
    end
    main_dispose
    main_tiletrigger
  end
  #--------------------------------------------------------------------------
  # * Main Draw
  #--------------------------------------------------------------------------
  def main_draw
    # Make sprite set
    @spriteset = Spriteset_Map.new
    # Make message window
    @message_window = Window_Message.new
    @hud1 = Window_HudEquip.new
    @hud2 = Window_HudPortrait.new
    @hud3 = Window_HudInfo.new
    @hud4 = Window_HudSkills.new
    @face_sprite = Sprite.new
    @face_sprite.bitmap = RPG::Cache.picture("fighter01face.png")
    @face_sprite.x = 514 # Change the x value here
    @face_sprite.y = 17 # Change the y value here
    @face_sprite.z = 250 # Change the z value here
    # Transition run
    Graphics.transition
  end
  #--------------------------------------------------------------------------
  # * Main Loop
  #--------------------------------------------------------------------------
  def main_loop
    # Update game screen
    Graphics.update
    # Update input information
    Input.update
    # Frame update
    update
  end
  #--------------------------------------------------------------------------
  # * Main Scene Change
  #--------------------------------------------------------------------------
  def main_scenechange?
    # Abort loop if screen is changed
    if $scene != self
      return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  # * Main Dispose
  #--------------------------------------------------------------------------
  def main_dispose
    Graphics.freeze
    @spriteset.dispose
    automatic_dispose
  end
  #--------------------------------------------------------------------------
  # * Main Tiletrigger
  #--------------------------------------------------------------------------
  def main_tiletrigger
    # If switching to title screen
    if $scene.is_a?(Scene_Title)
      # Fade out screen
      Graphics.transition
      Graphics.freeze
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update

    # Loop
    loop do
      update_systems
      # Abort loop if player isn't place moving
      unless $game_temp.player_transferring
        break
      end
      
      # Run place move
      transfer_player
      # Abort loop if transition processing
      if $game_temp.transition_processing
        break
      end
    end
    update_graphics
    return if update_game_over? == true
    return if update_to_title? == true
    # If transition processing
    if $game_temp.transition_processing
      # Clear transition processing flag
      $game_temp.transition_processing = false
      # Execute transition
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    # If showing message window
    if $game_temp.message_window_showing
      return
    end
    # If encounter list isn't empty, and encounter count is 0
    if $game_player.encounter_count == 0 and $game_map.encounter_list != []
      # If event is running or encounter is not forbidden
      unless $game_system.map_interpreter.running? or
             $game_system.encounter_disabled
        # Confirm troop
        n = rand($game_map.encounter_list.size)
        troop_id = $game_map.encounter_list[n]
 
Here is the Abs, it was a simple Edit. I just changed some number in Scene_Map and Scene_Skill
Code:
#==============================================================================
# â–  Action Battle System
#==============================================================================
# By Near Fantastica
# Version 4
# 29.11.05
#==============================================================================
# â–  ABS Key Commands
#==============================================================================
#   A    ● Dash
#   S    ● Sneak
#   D    ● Attack
#   1    ● Skill Key 1
#   2    ● Skill Key 2
#   3    ● Skill Key 3
#   4    ● Skill Key 4
#   5    ● Skill Key 5
#   6    ● Skill Key 6
#   7    ● Skill Key 7
#   8    ● Skill Key 8
#   9    ● Skill Key 9
#   0    ● Skill Key 0
#==============================================================================
# â–  ABS Enemy Ai List
#==============================================================================
#   Name
#   Name Of the Enemy in The Data Base
#---------------------------------------------------------------------------
#   Behavior
#   Passive = 0 ● The Event (Enemy) will only attack when attacked
#   Aggressive = 1 ● The Event will attack when one of its Detection level are set true
#   Linking = 2 ● Event will only attack when another Event is attacked with in its Detection level
#   Aggressive Linking = 3 ● Event will attack when either Aggressive or Linking is true
#---------------------------------------------------------------------------
#   Detection
#   Sound = range ● The range of sound the enemy can hear inactive if set to zero
#   Sight = range ● The range of sightthe enemy can see inactive if set to zero
#---------------------------------------------------------------------------
#   Aggressiveness
#   Aggressiveness = Level ● The high number the less Aggressive the Event
#---------------------------------------------------------------------------
#   Movement
#   Speed = Level ● The movment Speed of the event when engaged
#   Frequency = Level  ● The movment Frequency of the event when engaged 
#---------------------------------------------------------------------------
#   Trigger
#   Erased = 0  ● The event will be erased on death
#   Switch = 1  ● The event will be trigger Switch[ID] on death
#   Varible = 2  ● The event will be set the Varible[ID] = VALUE on death
#   Local Switch = 3 ● The event will trigger Local_Switch[ID] on death
#==============================================================================
# â–  ABS Range Constant
#==============================================================================
#   RANGE_WEAPONS[Weapon Id] = 
#   ["Character Set Name", Ammo Speed, Anmiation Id, Ammo Item Id, Range]
#   RANGE_SKILLS[Skill Id] = 
#   [Range, Ammo Speed, "Character Set Name"]
#==============================================================================

#--------------------------------------------------------------------------
# * SDK Log Script
#--------------------------------------------------------------------------
SDK.log("ABS", "Near Fantastica", 4, "29.11.05")

if SDK.state("Input") == nil or SDK.state("Input") == false
p "Input Addition Not Found"
SDK.disable("ABS")
end

#--------------------------------------------------------------------------
# * Begin SDK Enable Test
#--------------------------------------------------------------------------
if SDK.state("ABS") == true

class ABS
  #--------------------------------------------------------------------------
  RANGE_WEAPONS = {}
  RANGE_WEAPONS[17] = ["Arrow", 5, 4, 35, 10]
  RANGE_WEAPONS[18] = ["Arrow", 5, 4, 35, 10]
  RANGE_WEAPONS[19] = ["Arrow", 5, 4, 35, 10]
  RANGE_WEAPONS[20] = ["Arrow", 5, 4, 35, 10]
  #--------------------------------------------------------------------------
  RANGE_SKILLS = {}
  RANGE_SKILLS[7] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[8] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[10] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[11] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[13] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[14] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[16] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[17] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[19] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[20] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[22] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[23] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[25] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[26] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[28] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[29] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[31] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[33] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[35] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[37] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[39] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[41] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[43] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[45] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[47] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[49] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[51] = [10, 5, "Magic Balls"]
  RANGE_SKILLS[57] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[58] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[59] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[60] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[61] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[62] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[63] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[64] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[65] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[66] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[67] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[68] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[69] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[70] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[71] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[72] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[73] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[74] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[75] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[76] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[77] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[78] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[79] = [1, 5, "Magic Balls"]
  RANGE_SKILLS[80] = [1, 5, "Magic Balls"]
  #--------------------------------------------------------------------------
  DASH_KEY = Input::Letters["A"]
  SNEAK_KEY = Input::Letters["S"]
  ATTACK_KEY = Input::Letters["D"]
  SKILL_KEYS = Input::Numberkeys
  #--------------------------------------------------------------------------
  attr_accessor :enemies
  attr_accessor :range
  attr_accessor :skills
  attr_accessor :dash_level
  attr_accessor :sneak_level
  attr_accessor :p_animations
  attr_accessor :e_animations
  #--------------------------------------------------------------------------
  def initialize
    # Enemies
    @enemies = {}
    # Range
    @range = []
    # Skills
    @skills = []
    # Dashing
    @dashing = false
    @dash_restore = false
    @dash_reduce= false
    @dash_timer = 0
    @dash_level = 5
    @dash_sec = 0
    # Sneaking
    @sneaking = false
    @sneak_restore = false
    @sneak_reduce= false
    @sneak_timer = 0
    @sneak_level = 5
    @sneak_sec = 0
    # Button Mashing
    @mash_bar = 0
    #Animation
    @p_animations = false 
    @e_animations = false
  end
  #--------------------------------------------------------------------------
  def ATTACK_KEY
    return ATTACK_KEY
  end
  #--------------------------------------------------------------------------
  def SKILL_KEYS
    return SKILL_KEYS
  end
  #--------------------------------------------------------------------------
  def RANGE_WEAPONS
    return RANGE_WEAPONS
  end
  #--------------------------------------------------------------------------
  def RANGE_SKILLS
    return RANGE_SKILLS
  end
  #--------------------------------------------------------------------------
  # * ABS Animation Engine Functions
  #--------------------------------------------------------------------------
  # Handles animating map sprites for a wide variety of uses
  #--------------------------------------------------------------------------
  def animate(object, animation_name, position, wait = 8, frames = 0, repeat = 0)
    if object != nil
      object.animate(animation_name, position, frames, wait, repeat)
    end
  end
  #--------------------------------------------------------------------------
  def refresh(event, list, character_name)
    @enemies.delete(event.id)
    return if character_name == ""
    return if list == nil
    parameters = SDK.event_comment_input(event, 9, "ABS Event Command List")
    return if parameters.nil?
    name = parameters[0].split
    for x in 1...$data_enemies.size
      enemy = $data_enemies[x]
      if name[1].upcase == enemy.name.upcase
        @enemies[event.id] = Game_ABS_Enemy.new(enemy.id)
        @enemies[event.id].event_id = event.id
        default_setup(event.id)
        level = parameters[1].split
        @enemies[event.id].level = level[1].to_i
        behavior = parameters[2].split
        @enemies[event.id].behavior = behavior[1].to_i
        sound = parameters[3].split
        @enemies[event.id].detection_sound = sound[1].to_i
        sight = parameters[4].split
        @enemies[event.id].detection_sight = sight[1].to_i
        aggressiveness = parameters[5].split
        @enemies[event.id].aggressiveness = aggressiveness[1].to_i
        speed = parameters[6].split
        @enemies[event.id].speed = speed[1].to_i
        frequency = parameters[7].split
        @enemies[event.id].frequency = frequency[1].to_i
        trigger = parameters[8].split
        @enemies[event.id].trigger= [trigger[1].to_i, trigger[2].to_i, trigger[3].to_i]
      end
    end
  end
  #--------------------------------------------------------------------------
  def default_setup(id)
    @enemies[id].level = 1
    @enemies[id].behavior = 1
    @enemies[id].detection_sight = 1
    @enemies[id].detection_sound = 4
    @enemies[id].aggressiveness = 2
    @enemies[id].engaged = false
    @enemies[id].speed = 4
    @enemies[id].frequency = 5
  end
  #--------------------------------------------------------------------------
  def update
    update_dash if @sneaking == false 
    update_sneak if @dashing == false
    update_enemies if @enemies != {}
    update_player
    update_range
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  def update_range
    for range in @range
      range.update
    end
  end
  #--------------------------------------------------------------------------
  def update_player
    actor = $game_party.actors[0]
    @mash_bar = 100 if @mash_bar >= 100
    @mash_bar += 10
  end
  #--------------------------------------------------------------------------
  def update_dash
    if Input.pressed?(DASH_KEY)
      if $game_player.moving?
        @dashing = true
        $game_player.move_speed = 5
        @dash_restore = false
        if @dash_reduce == false
          @dash_timer = 50 # Initial time off set
          @dash_reduce = true
        else
          @dash_timer-= 1
        end
        @dash_sec = (@dash_timer / Graphics.frame_rate)%60
        if @dash_sec == 0
          if @dash_level != 0
            @dash_level -= 1
            @dash_timer = 50 # Timer Count
          end
        end
        if @dash_level == 0
          @dashing = false
          $game_player.move_speed = 4
        end
      end
    else
      @dashing = false
      $game_player.move_speed = 4
      @dash_reduce = false
      if @dash_restore == false
        @dash_timer = 80 # Initial time off set
        @dash_restore = true
      else
        @dash_timer-= 1
      end
      @dash_sec = (@dash_timer / Graphics.frame_rate)%60
      if @dash_sec == 0
        if @dash_level != 5
          @dash_level+= 1
          @dash_timer = 60
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def update_sneak
    if Input.pressed?(SNEAK_KEY)
      if $game_player.moving?
        @sneaking = true
        $game_player.move_speed = 3
        @sneak_restore = false
        if @sneak_reduce == false
          @sneak_timer = 50 # Initial time off set
          @sneak_reduce = true
        else
          @sneak_timer-= 1
        end
        @sneak_sec = (@sneak_timer / Graphics.frame_rate)%60
        if @sneak_sec == 0
          if @sneak_level != 0
            @sneak_level -= 1
            @sneak_timer = 100 # Timer Count
          end
        end
        if @sneak_level == 0
          @sneaking = false
          $game_player.move_speed = 4
        end
      end
    else
      @sneaking = false
      $game_player.move_speed = 4
      @sneak_reduce = false
      if @sneak_restore == false
        @sneak_timer = 80 # Initial time off set
        @sneak_restore = true
      else
        @sneak_timer-= 1
      end
      @sneak_sec = (@sneak_timer / Graphics.frame_rate)%60
      if @sneak_sec == 0
        if @sneak_level != 5
          @sneak_level+= 1
          @sneak_timer = 60 # Timer Count
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def update_enemies
    for enemy in @enemies.values
      case enemy.behavior
      when 0
        if enemy.engaged == true
          next if engaged_enemy_detection_sight?(enemy) == true
          next if engaged_enemy_detection_sound?(enemy) == true
        end
      when 1
        if enemy.engaged == true
          next if engaged_enemy_detection_sight?(enemy) == true
          next if engaged_enemy_detection_sound?(enemy) == true
        else
          next if enemy_detection_sight?(enemy) == true
          next if enemy_detection_sound?(enemy) == true
        end
      when 2
        if enemy.engaged == true
          next if engaged_enemy_linking_sight?(enemy) == true
          next if engaged_enemy_linking_sound?(enemy) == true
        else
          next if enemy_linking?(enemy) == true
        end
      when 3
        if enemy.engaged == true
          next if engaged_enemy_linking_sight?(enemy) == true
          next if engaged_enemy_linking_sound?(enemy) == true
        else
          next if enemy_detection_sight?(enemy) == true
          next if enemy_detection_sound?(enemy) == true
          next if enemy_linking?(enemy) == true
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def set_event_movement(enemy)
    event = $game_map.events[enemy.event_id]
    enemy.move_type = event.move_type
    enemy.move_frequency = event.move_frequency
    enemy.move_speed = event.move_speed
    enemy.engaged = true
    event.move_type = 2
    event.move_frequency = enemy.frequency 
    event.move_speed = enemy.speed
  end
  #--------------------------------------------------------------------------
  def return_event_movement(enemy)
    enemy.engaged = false
    event = $game_map.events[enemy.event_id]
    return if event == nil
    event.move_type = enemy.move_type
    event.move_frequency = enemy.move_frequency
    event.move_speed = enemy.move_speed
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_linking_sight?(enemy)
    if enemy.detection_sight != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sight)
        enemy.linking = false
        enemy_attack(enemy)
        return true
      else
        if enemy.linking == false
          return_event_movement(enemy)
          return false
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_linking_sound?(enemy)
    if enemy.detection_sound != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sound)
        enemy.linking = false
        enemy_attack(enemy)
        return true
      else
        if enemy.linking == false
          return_event_movement(enemy)
          return false
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def enemy_linking?(enemy)
    for key in @enemies.keys
      if in_range?($game_map.events[enemy.event_id], $game_map.events[key], enemy.detection_sight)
        if enemy.engaged == true
          enemy.linking = true
          set_event_movement(enemy)
          return true
        end
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_detection_sound?(enemy)
    if enemy.detection_sound != 0
      return false if enemy.level < $game_party.actors[0].level
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sound)
        if @sneaking == true
          return false
        end
        set_event_movement(enemy)
        return true
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_detection_sight?(enemy)
    if enemy.detection_sight != 0
      return false if enemy.level < $game_party.actors[0].level
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sight)
        if facing?($game_map.events[enemy.event_id], $game_player)
          set_event_movement(enemy)
          return true
        end
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_detection_sight?(enemy)
    if enemy.detection_sight != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sight)
        enemy_attack(enemy)
        return true
      else
        return_event_movement(enemy)
        return false
      end
    end
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_detection_sound?(enemy)
    if enemy.detection_sound != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection_sound)
        enemy_attack(enemy)
        return true
      else
        return_event_movement(enemy)
        return false
      end
    end
  end
  #--------------------------------------------------------------------------
  def in_range?(element, object, range)
    return if element == nil or object == nil or range == nil
    x = (element.x - object.x) * (element.x - object.x)
    y = (element.y - object.y) * (element.y - object.y)
    r = x + y
    return true  if r <= (range * range)
    return false
  end
  #--------------------------------------------------------------------------
  def in_range(element, range)
    return if element == nil or range == nil
    objects = []
    x = (element.x - $game_player.x) * (element.x - $game_player.x)
    y = (element.y - $game_player.y) * (element.y - $game_player.y)
    r = x + y
    objects.push($game_party.actors[0]) if r <= (range * range)
    return objects
  end
  #--------------------------------------------------------------------------
  def facing?(element, object)
     return if element == nil or object == nil
    if element.direction == 2
      return true if object.y >= element.y
    end
    if element.direction == 4
      return true if object.x <= element.x
    end
    if element.direction == 6
      return true if object.x  >= element.x
    end
    if element.direction == 8
      return true if object.y <= element.y
    end
    return false
  end
  #--------------------------------------------------------------------------
  def in_line?(element, object)
    return if element == nil or object == nil
    if element.direction == 2
      return true if object.x == element.x
    end
    if element.direction == 4
      return true if object.y == element.y
    end
    if element.direction == 6
      return true if object.y == element.y
    end
    if element.direction == 8
      return true if object.x == element.x
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_pre_attack(enemy, actions)
    return true if enemy.hp * 100.0 / enemy.maxhp > actions.condition_hp
    return true if $game_party.max_level < actions.condition_level
    switch_id = actions.condition_switch_id
    if actions.condition_switch_id > 0 and $game_switches[switch_id] == false
      return true
    end
    n = rand(11) 
    return true if actions.rating < n
    return false
  end
  #--------------------------------------------------------------------------
  def hit_player(enemy)
    animate($game_player, $game_player.character_name + '-hit',
    $game_player.direction/2, 4, 3) if @p_animations
    $game_player.jump(0, 0)
    $game_player.animation_id = enemy.animation2_id
  end
  #--------------------------------------------------------------------------
  def actor_non_dead?(actor, enemy)
    if actor.dead?
      if not enemy.is_a?(Game_Actor)
        return_event_movement(enemy)
        enemy.engaged = false
      end
      $game_temp.gameover = true
      return false
    end
    return true
  end
  #--------------------------------------------------------------------------
  def enemy_attack(enemy)
    for actions in enemy.actions
      next if enemy_pre_attack(enemy, actions) == true
      case actions.kind
      when 0 #Basic
        if Graphics.frame_count % (enemy.aggressiveness * 30) == 0          
          case actions.basic
          when 0 #Attack
            if in_range?($game_map.events[enemy.event_id], $game_player, 1) and 
            facing?($game_map.events[enemy.event_id], $game_player)
              actor = $game_party.actors[0]
              actor.attack_effect(enemy)
              event = $game_map.events[enemy.event_id]
              animate(event, event.page.graphic.character_name + '-atk',
              event.direction/2, 4, 3, 0) if @e_animations and actor.damage != "Miss" and actor.damage != 0
              if $game_party.actors[0].damage != "Miss" and $game_party.actors[0].damage != 0
                hit_player(enemy)
              end
              actor_non_dead?(actor, enemy)
              return
            end
          when 1..3 #Nothing
            return
          end
        end
      when 1..2#Skill
        skill = $data_skills[actions.skill_id]
        case skill.scope
        when 1 # One Enemy
          if Graphics.frame_count % (enemy.aggressiveness * 30) == 0
            if in_line?($game_map.events[enemy.event_id], $game_player)
              next if enemy.can_use_skill?(skill) == false
              event = $game_map.events[enemy.event_id]
              animate(event, event.page.graphic.character_name + '-cast',
              event.direction/2, 4, 3, 0) if @e_animations
              @range.push(Game_Ranged_Skill.new($game_map.events[enemy.event_id], enemy, skill))
              enemy.sp -= skill.sp_cost
            end
          end
        when 3..4, 7 # User          
          if Graphics.frame_count % (enemy.aggressiveness * 100) == 0
            if enemy.hp < skill.power.abs
              enemy.effect_skill(enemy, skill)
              event = $game_map.events[enemy.event_id]
              animate(event, event.page.graphic.character_name + '-cast',
              event.direction/2, 4, 3, 0) if @e_animations
              enemy.sp -= skill.sp_cost
              $game_map.events[enemy.event_id].animation_id = skill.animation2_id
            end
            return
          end
        end
        return
      end
    end
  else
    return
  end
  #--------------------------------------------------------------------------
  def hit_event(event, animation)
    animate(event, event.page.graphic.character_name + '-hit',
    event.direction/2, 4, 3, 0) if @e_animations
    event.jump(0, 0)
    return if animation == 0
    event.animation_id = animation
  end
  #--------------------------------------------------------------------------
  def event_non_dead?(enemy, actor = 0)
    if enemy.dead?
      treasure(enemy) if actor = 0
      id = enemy.event_id
      @enemies.delete(id)
      event = $game_map.events[enemy.event_id]
      event.character_name = ""
      case enemy.trigger[0]
      when 0
        event.erase
      when 1
        print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if enemy.trigger[1] == 0
        $game_switches[enemy.trigger[1]] = true
        $game_map.need_refresh = true
      when 2
        print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if enemy.trigger[1] == 0
         if enemy.trigger[2] == 0
           $game_variables[enemy.trigger[1]] += 1
          $game_map.need_refresh = true
        else
          $game_variables[enemy.trigger[1]] = enemy.trigger[2]
          $game_map.need_refresh = true
        end
      when 3
        value = "A" if enemy.trigger[1] == 1
        value = "B" if enemy.trigger[1] == 2
        value = "C" if enemy.trigger[1] == 3
        value = "D" if enemy.trigger[1] == 4
        print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if value == 0
        key = [$game_map.map_id, event.id, value]
        $game_self_switches[key] = true
        $game_map.need_refresh = true
      end
      return false
    end
    return true
  end
  #--------------------------------------------------------------------------
  def treasure(enemy)
    exp = 0
    gold = 0
    treasures = []
    unless enemy.hidden
      exp += enemy.exp
      gold += enemy.gold
      if rand(100) < enemy.treasure_prob
        if enemy.item_id > 0
          treasures.push($data_items[enemy.item_id])
        end
        if enemy.weapon_id > 0
          treasures.push($data_weapons[enemy.weapon_id])
        end
        if enemy.armor_id > 0
          treasures.push($data_armors[enemy.armor_id])
        end
      end
    end
    treasures = treasures[0..5]
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      if actor.cant_get_exp? == false
        last_level = actor.level
        actor.exp += exp
        if actor.level > last_level
          actor.hp = actor.maxhp
          actor.sp = actor.maxsp
        end
      end
    end
    $game_party.gain_gold(gold)
    for item in treasures
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
        $game_party.gain_armor(item.id, 1)
      end
    end
  end
  #--------------------------------------------------------------------------
  def player_attack
    actor = $game_party.actors[0]
    if RANGE_WEAPONS.has_key?(actor.weapon_id) 
      # Range Attack
      range_weapon = RANGE_WEAPONS[actor.weapon_id]
      return if $game_party.item_number(range_weapon[3]) == 0
      $game_party.lose_item(range_weapon[3], 1)
      @range.push(Game_Ranged_Weapon.new($game_player, actor, actor.weapon_id))
      animate($game_player, $game_player.character_name + '-ranged',
      $game_player.direction/2, 4, 3) if @p_animations
    else
      # Test Button Mash
      hit = rand(30) + 10
      if hit > @mash_bar
        @mash_bar = 0
        return
      end
      @mash_bar = 0
      # Melee Attack
      for enemy in @enemies.values
        event = $game_map.events[enemy.event_id]
        if facing?($game_player, event) and in_range?($game_player, event, 1)
          actor = $game_party.actors[0]
          enemy.attack_effect(actor)
          animate($game_player, $game_player.character_name + '-atk',
          $game_player.direction/2, 4, 3) if @p_animations
          hit_event(event, $data_weapons[actor.weapon_id].animation2_id) if enemy.damage != "Miss" and enemy.damage != 0
          if event_non_dead?(enemy)
            if enemy.engaged == false
              enemy.engaged = true
              set_event_movement(enemy)
            end
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def player_skill(key)
    return if @skills[key] == nil
    skill = $data_skills[@skills[key]]
    return if skill == nil
    actor = $game_party.actors[0]
    return if not actor.skills.include?(skill.id)
    return if actor.can_use_skill?(skill) == false
    case skill.scope
    when 1 # One Enemy
      @range.push(Game_Ranged_Skill.new($game_player, actor, skill))
      actor.sp -= skill.sp_cost
        animate($game_player, $game_player.character_name + '-cast',
        $game_player.direction/2, 4, 3) if @p_animations
    when 2 # All Emenies
      $game_player.animation_id = skill.animation2_id
      actor.sp -= skill.sp_cost
      for enemy in @enemies.values
        next if enemy == nil
        enemy.effect_skill(actor, skill)
        animate($game_player, $game_player.character_name + '-cast',
        $game_player.direction/2, 4, 3) if @p_animations

        if enemy.damage != "Miss" and enemy.damage != 0
          event = $game_map.events[enemy.event_id]
          hit_event(event, 0)
        end
        if event_non_dead?(enemy)
          if enemy.engaged == false
            enemy.behavior = 3
            enemy.linking = true
            enemy.engaged = true
            set_event_movement(enemy)
          end
        end
      end
      return
    when 3..4, 7 # User
      return if actor.can_use_skill?(skill) == false
      actor.effect_skill(actor, skill)
      actor.sp -= skill.sp_cost
        animate($game_player, $game_player.character_name + '-cast',
        $game_player.direction/2, 4, 3) if @p_animations
      $game_player.animation_id = skill.animation2_id
      return
    end
  end
end

#============================================================================
# â–  Game ABS Enemy
#============================================================================

class Game_ABS_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  attr_accessor :event_id
  attr_accessor :level
  attr_accessor :behavior
  attr_accessor :detection_sight
  attr_accessor :detection_sound
  attr_accessor :aggressiveness
  attr_accessor :trigger
  attr_accessor :speed
  attr_accessor :frequency
  attr_accessor :engaged
  attr_accessor :linking
  attr_accessor :move_type
  attr_accessor :move_frequency
  attr_accessor :move_speed
  attr_accessor :ranged
  #--------------------------------------------------------------------------
  def initialize(enemy_id)
    super()
    @event_id= 0
    @level = 0
    @behavior = 0
    @detection_sight = 0
    @detection_sound = 0
    @aggressiveness = 1
    @trigger = []
    @enemy_id = enemy_id
    @engaged = false
    @linking = false
    @speed = 0
    @frequency = 0
    @move_type = 0
    @move_frequency = 0
    @move_speed = 0
    @hp = maxhp
    @sp = maxsp
  end
  #--------------------------------------------------------------------------
  def id
    return @enemy_id
  end
  #--------------------------------------------------------------------------
  def index
    return @member_index
  end
  #--------------------------------------------------------------------------
  def name
    return $data_enemies[@enemy_id].name
  end
  #--------------------------------------------------------------------------
  def base_maxhp
    return $data_enemies[@enemy_id].maxhp
  end
  #--------------------------------------------------------------------------
  def base_maxsp
    return $data_enemies[@enemy_id].maxsp
  end
  #--------------------------------------------------------------------------
  def base_str
    return $data_enemies[@enemy_id].str
  end
  #--------------------------------------------------------------------------
  def base_dex
    return $data_enemies[@enemy_id].dex
  end
  #--------------------------------------------------------------------------
  def base_agi
    return $data_enemies[@enemy_id].agi
  end
  #--------------------------------------------------------------------------
  def base_int
    return $data_enemies[@enemy_id].int
  end
  #--------------------------------------------------------------------------
  def base_atk
    return $data_enemies[@enemy_id].atk
  end
  #--------------------------------------------------------------------------
  def base_pdef
    return $data_enemies[@enemy_id].pdef
  end
  #--------------------------------------------------------------------------
  def base_mdef
    return $data_enemies[@enemy_id].mdef
  end
  #--------------------------------------------------------------------------
  def base_eva
    return $data_enemies[@enemy_id].eva
  end
  #--------------------------------------------------------------------------
  def animation1_id
    return $data_enemies[@enemy_id].animation1_id
  end
  #--------------------------------------------------------------------------
  def animation2_id
    return $data_enemies[@enemy_id].animation2_id
  end
  #--------------------------------------------------------------------------
  def element_rate(element_id)
    table = [0,200,150,100,50,0,-100]
    result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
    for i in @states
      if $data_states[i].guard_element_set.include?(element_id)
        result /= 2
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  def state_ranks
    return $data_enemies[@enemy_id].state_ranks
  end
  #--------------------------------------------------------------------------
  def state_guard?(state_id)
    return false
  end
  #--------------------------------------------------------------------------
  def element_set
    return []
  end
  #--------------------------------------------------------------------------
  def plus_state_set
    return []
  end
  #--------------------------------------------------------------------------
  def minus_state_set
    return []
  end
  #--------------------------------------------------------------------------
  def actions
    return $data_enemies[@enemy_id].actions
  end
  #--------------------------------------------------------------------------
  def exp
    return $data_enemies[@enemy_id].exp
  end
  #--------------------------------------------------------------------------
  def gold
    return $data_enemies[@enemy_id].gold
  end
  #--------------------------------------------------------------------------
  def item_id
    return $data_enemies[@enemy_id].item_id
  end
  #--------------------------------------------------------------------------
  def weapon_id
    return $data_enemies[@enemy_id].weapon_id
  end
  #--------------------------------------------------------------------------
  def armor_id
    return $data_enemies[@enemy_id].armor_id
  end
  #--------------------------------------------------------------------------
  def treasure_prob
    return $data_enemies[@enemy_id].treasure_prob
  end
end

#============================================================================
# â–  Game Battler
#============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  def can_use_skill?(skill)
    if skill.sp_cost > self.sp
      return false
    end
    if dead?
      return false
    end
    if skill.atk_f == 0 and self.restriction == 1
      return false
    end
    occasion = skill.occasion
    case occasion
    when 0..1
      return true
    when 2..3
      return false
    end
  end
  #--------------------------------------------------------------------------
  def effect_skill(user, skill)
    self.critical = false
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
       ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      return false
    end
    effective = false
    effective |= skill.common_event_id > 0
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    effective |= hit < 100
    if hit_result == true
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
      self.damage = power * rate / 20
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      if self.damage > 0
        if self.guarding?
          self.damage /= 2
        end
      end
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      effective |= hit < 100
    end
    if hit_result == true
      if skill.power != 0 and skill.atk_f > 0
        remove_states_shock
        effective = true
      end
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      if skill.power == 0
        self.damage = ""
        unless @state_changed
          self.damage = "Miss"
        end
      end
    else
      self.damage = "Miss"
    end
    return effective
  end
end

#============================================================================
# â–  Game Character
#============================================================================

class Game_Character
  attr_accessor   :move_type
  attr_accessor   :move_frequency
  attr_accessor   :move_speed
  attr_accessor   :character_name
  attr_accessor   :wait
  attr_accessor   :old_chr_name
  attr_accessor   :old_dir
  attr_accessor   :animating
  #------------------------------------------------------------------------
  alias animation_engine_game_character_initialize initialize
  #------------------------------------------------------------------------
  def initialize
    animation_engine_game_character_initialize
    @animating = false
    @wait = false
    @old_chr_name = @character_name
    @old_dir = @direction
  end
  #------------------------------------------------------------------------
  def animate(animation_name, position, frames, wait, repeat)
    @character_name = animation_name if @animating == false
    @pattern = 0
    @count = 0
    @repeat = repeat
    @direction_fix = true
    @old_dir = @direction
    @direction = position * 2
    @frames = frames
    lock
    @animating = true
    @wait = wait
    @anim_wait_count = @wait
    update
    return
  end
  #------------------------------------------------------------------------
  def update_animate
    if @anim_wait_count > 0
      @anim_wait_count -= 1
      return
    end
    if @pattern >= @frames or moving?
      if !moving?
        if @count < @repeat
          @pattern = 0
          @count += 1
          @anim_wait_count = @wait
          update
          return
        end
      end
      unlock
      @animating = false
      @pattern = 0
      @direction_fix = false
      @direction = @old_dir
      if self.is_a?(Game_Event)
        @character_name = @page != nil ? @page.graphic.character_name : ''
      else
        @character_name = @old_chr_name
      end
      $game_player.refresh
      $game_map.refresh
      return
    end
    @pattern += 1
    @anim_wait_count = @wait
    update
  end
  #------------------------------------------------------------------------
  def update_movement_type
    if @animating == true
      update_animate
      return
    end
    if jumping?
      update_jump
    elsif moving?
      update_move
    else
      update_stop
    end
  end
  #------------------------------------------------------------------------
  def update_movement
    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
      case @move_type
      when 1 # Random
        move_type_random
      when 2
        if @runpath
          run_path
        else
          move_type_toward_player
        end
      when 3
        move_type_custom
      when 4
        move_type_escape_player
      end
    end
  end
  #------------------------------------------------------------------------
  # * Move Type : Escape
  #------------------------------------------------------------------------
  def move_type_escape_player
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    abs_sx = sx > 0 ? sx : -sx
    abs_sy = sy > 0 ? sy : -sy
    if sx + sy >= 20
      move_random
      return
    end
    move_away_from_player
  end
  #------------------------------------------------------------------------
  # * Move Type : Approach
  #------------------------------------------------------------------------
  def move_type_toward_player
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    abs_sx = sx > 0 ? sx : -sx
    abs_sy = sy > 0 ? sy : -sy
    if sx + sy >= 20
      move_random
      return
    end
    move_toward_player
  end
  #------------------------------------------------------------------------
  # * Move away from Player
  #------------------------------------------------------------------------
  def move_away_from_player
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx > abs_sy
      sx > 0 ? move_right : move_left
      if not moving?
        rand(2) == 1 ? move_down : move_up
      end
    else
      sy > 0 ? move_down : move_up
      if not moving?
        rand(2) == 1 ? move_right : move_left
      end
    end
  end
end

#============================================================================
# â–  Game Ranged Weapon
#============================================================================

class Game_Ranged_Weapon < Game_Character
  #--------------------------------------------------------------------------
  attr_accessor :draw
  attr_accessor :dead
  #--------------------------------------------------------------------------
  def initialize(parent, actor, attack)
    @range = 0
    @step = 0
    @parent = parent
    @actor = actor
    @draw = true
    @dead  = false
    @range_wepaon = $ABS.RANGE_WEAPONS[attack]
    super()
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    @move_direction = @parent.direction
    moveto(@parent.x, @parent.y)
    @character_name = @range_wepaon[0]
    @move_speed = @range_wepaon[1]
    @range = @range_wepaon[4]
  end
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    hit_player if x == $game_player.x and y == $game_player.y
    for event in $game_map.events.values
      if event.x == x and event.y == y
        if event.character_name == ""
          froce_movement
        else
          hit_event(event.id)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def froce_movement
    case @move_direction
    when 2
      @y += 1
    when 4
      @x -= 1
    when 6
      @x += 1
    when 8
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  def update
    super
    return if moving?
    case @move_direction
    when 2
      move_down
    when 4
      move_left
    when 6
      move_right
    when 8
      move_up
    end
    update_step
  end
  #--------------------------------------------------------------------------
  def update_step
    kill if @step >= @range
    @step += 1
  end
  #--------------------------------------------------------------------------
  def hit_player
    actor = $game_party.actors[0]
    enemy = @actor
    $ABS.animate($game_player, $game_player.character_name + '-hit',
    $game_player.direction/2, 4, 3) if $ABS.p_animations
    actor.attack_effect(enemy)
    $game_player.animation_id = @range_wepaon[2] if actor.damage != "Miss" and actor.damage != 0
    $ABS.actor_non_dead?(actor, enemy)
    kill
  end
  #--------------------------------------------------------------------------
  def hit_event(id)
    actor = $ABS.enemies[id]
    return if actor == nil
    if @parent.is_a?(Game_Player)
      enemy = $game_party.actors[0]
      actor.attack_effect(enemy)
      $game_map.events[id].animation_id = @range_wepaon[2] if actor.damage != "Miss" and actor.damage != 0
      if $ABS.event_non_dead?(actor)
        if actor.engaged == false
          actor.behavior = 3
          actor.linking = true
          actor.engaged = true
          $ABS.set_event_movement(actor)
        end
      end
    else
      enemy = $ABS.enemies[@parent.id]
      actor.attack_effect(enemy)
      event = $game_map.events[id]
      $ABS.animate(event, event.page.graphic.character_name + '-hit',
      event.direction/2, 4, 3, 0) if $ABS.e_animations and actor.damage != "Miss" and actor.damage != 0
      $game_map.events[id].animation_id = @range_wepaon[2] if actor.damage != "Miss" and actor.damage != 0
      $ABS.event_non_dead?(actor, enemy)
    end
    kill
  end
  #--------------------------------------------------------------------------
  def kill
    @dead = true
  end
end

#============================================================================
# â–  Game Ranged Skill
#============================================================================

class Game_Ranged_Skill < Game_Character
  #--------------------------------------------------------------------------
  attr_accessor :draw
  attr_accessor :dead
  #--------------------------------------------------------------------------
  def initialize(parent, actor, skill)
    @range = 0
    @step = 0
    @parent = parent
    @skill = skill
    @actor = actor
    @range_skill = $ABS.RANGE_SKILLS[skill.id]
    @draw = true
    @dead  = false
    super()
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    @move_direction = @parent.direction
    moveto(@parent.x, @parent.y)
    @range = @range_skill[0]
    @opacity = 10 if @range == 1
    @move_speed = @range_skill[1]
    @character_name = @range_skill[2]
  end
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    hit_player if x == $game_player.x and y == $game_player.y
    for event in $game_map.events.values
      if event.x == x and event.y == y
        if event.character_name == ""
          froce_movement
        else
          hit_event(event.id)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def froce_movement
    case @move_direction
    when 2
      @y += 1
    when 4
      @x -= 1
    when 6
      @x += 1
    when 8
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  def update
    super
    return if moving?
    case @move_direction
    when 2
      move_down
    when 4
      move_left
    when 6
      move_right
    when 8
      move_up
    end
    update_step
  end
  #--------------------------------------------------------------------------
  def update_step
    kill if @step >= @range
    @step += 1
  end
  #--------------------------------------------------------------------------
  def hit_player
    actor = $game_party.actors[0]
    enemy = @actor
    actor.effect_skill(enemy, @skill)
    $ABS.animate($game_player, $game_player.character_name + '-hit',
    $game_player.direction/2, 4, 3) if $ABS.p_animations and actor.damage != "Miss" and actor.damage != 0
    $game_player.animation_id = @skill.animation2_id if actor.damage != "Miss" and actor.damage != 0
    $ABS.actor_non_dead?(actor, enemy)
  end
  #--------------------------------------------------------------------------
  def hit_event(id)
    actor = $ABS.enemies[id]
    return if actor == nil
    if @parent.is_a?(Game_Player)
      enemy = $game_party.actors[0]
      actor.effect_skill(enemy, @skill)
      $game_map.events[id].animation_id = @skill.animation2_id if actor.damage != "Miss" and actor.damage != 0
      if $ABS.event_non_dead?(actor, enemy)
        if actor.engaged == false
          actor.behavior = 3
          actor.linking = true
          actor.engaged = true
          $ABS.set_event_movement(actor)
        end
      end
    else
      enemy = $ABS.enemies[@parent.id]
      actor.effect_skill(enemy, @skill)
      $ABS.animate(event, event.page.graphic.character_name + '-hit',
      event.direction/2, 4, 3, 0) if $ABS.e_animations and actor.damage != "Miss" and actor.damage != 0
      $game_map.events[id].animation_id = @skill.animation2_id if actor.damage != "Miss" and actor.damage != 0
      $ABS.event_non_dead?(actor, enemy)
    end
  end
  #--------------------------------------------------------------------------
  def kill
    @dead = true
  end
end

#============================================================================
# â–  Game Event
#============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  alias nf_abs_game_event_refresh_set_page refresh_set_page
  #--------------------------------------------------------------------------
  def name
    return @event.name
  end
  #--------------------------------------------------------------------------
  def id
    return @id
  end
  #--------------------------------------------------------------------------
  def refresh_set_page
    nf_abs_game_event_refresh_set_page
    $ABS.refresh(self, @list, @character_name)
  end
end

#============================================================================
# â–  Spriteset Map
#============================================================================

class Spriteset_Map
  #--------------------------------------------------------------------------
  alias nf_abs_spriteset_map_initialize initialize
  alias nf_abs_spriteset_map_dispose dispose
  alias nf_abs_spriteset_map_update update
  #--------------------------------------------------------------------------
  def initialize
    @ranged = []
    for range in $ABS.range
      sprite = Sprite_Character.new(@viewport1, range)
      @ranged.push(sprite)
    end
    nf_abs_spriteset_map_initialize
  end
  #--------------------------------------------------------------------------
  def dispose
    for range in @ranged
      range.dispose
    end
    nf_abs_spriteset_map_dispose
  end
  #--------------------------------------------------------------------------
  def update
    for range in $ABS.range
      if range.draw == true
        sprite = Sprite_Character.new(@viewport1, range)
        @ranged.push(sprite)
        range.draw = false
      end
    end
    for range in @ranged
      if range.character.dead == true
        $ABS.range.delete(range.character)
        @ranged.delete(range)
        range.dispose
      else
        range.update
      end
    end
    nf_abs_spriteset_map_update
  end
end

#============================================================================
# â–  Scene Title
#============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  alias nf_abs_scene_title_cng command_new_game
  #--------------------------------------------------------------------------
  def command_new_game
    $ABS = ABS.new
    nf_abs_scene_title_cng
  end
end

#============================================================================
# â–  Scene Map
#============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  alias nf_abs_scene_map_update update
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  def update
    $ABS.update
    $ABS.player_attack if Input.triggerd?($ABS.ATTACK_KEY)
    for i in 1..5
      $ABS.player_skill(i) if Input.triggerd?($ABS.SKILL_KEYS[i])
    end
    nf_abs_scene_map_update
  end
end

#============================================================================
# â–  Scene Skill
#============================================================================

class Scene_Skill
  #--------------------------------------------------------------------------
  alias nf_abs_scene_skill_main main
  alias nf_abs_scene_skill_update update
  alias nf_abs_scene_skill_update_skill update_skill
  #--------------------------------------------------------------------------
  def main
    @shk_window = Window_Command.new(250, ["Skill Assigned to Hot Key"])
    @shk_window.visible = false
    @shk_window.active = false
    @shk_window.x = 200
    @shk_window.y = 250
    @shk_window.z = 1500
    nf_abs_scene_skill_main  
    @shk_window.dispose
  end
  #--------------------------------------------------------------------------
  def update
    @shk_window.update
    nf_abs_scene_skill_update
    if @shk_window.active
      update_shk
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_skill
    nf_abs_scene_skill_update_skill
    for i in 1..5
      if Input.triggerd?($ABS.SKILL_KEYS[i])
        $game_system.se_play($data_system.decision_se)
        @skill_window.active = false
        @shk_window.active = true
        @shk_window.visible = true
        $ABS.skills[i] = @skill_window.skill.id 
      end
    end
  end
 #--------------------------------------------------------------------------
 def update_shk
   if Input.trigger?(Input::C)
     $game_system.se_play($data_system.decision_se)
     @shk_window.active = false
     @shk_window.visible = false
     @skill_window.active = true
     $scene = Scene_Skill.new(@actor_index)
     return
   end
 end
end

#============================================================================
# â–  Scene Load
#============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  alias nf_abs_scene_load_read_data read_data
  #--------------------------------------------------------------------------
    def read_data(file)
    nf_abs_scene_load_read_data(file)
    $ABS = Marshal.load(file)
  end
end
#============================================================================
# â–  Scene Save
#============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  alias nf_abs_scene_save_write_data write_data
  #--------------------------------------------------------------------------
  def write_data(file)
    nf_abs_scene_save_write_data(file)
    Marshal.dump($ABS, file)
  end
end

#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top