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.

multi-item drop

well i'm looking for a multi-item drop from enemies. i've seen this before and i can't find it here on this forum, and if it is it's probably gone becuz of the hacker. anyways what im looking for is, a script that will allow u to have many drops from an enemy, i would need this to be compatible with Near's SBABS v 3.4, and it can't require SDK
 
alright here's the SBABS 3.4 script its been edited to work for mnetplay, if that makes any difference
Script 1
Code:
#======================================
# â–  Squad Based Action Battle System
#======================================
#  By: Near Fantastica
#   Date: 02.07.05
#   Version: 3.4
#   Thanks To: Cybersam for the Keyboard Script 
#   Thanks To: Prexus for the Graphics
#======================================
#
#======================================
# â–  ABS Key Commands
#======================================
#   E   ● Change Lead Forward
#   R   ● Change Lead Backwards
#   T   ● Waits Leader
#   Y   ● Waits Allies
#   U   ● Gathers Allies
#   D    ● Dash
#   S   ● Sneak
#   P    ● Toggle Hud
#   F    ● Melee Attack
#   G   ● Range Attack
#   H   ● Skill Key 1
#   J    ● Skill Key 2
#   K    ● Skill Key 3
#   L    ● Skill Key 4
#   N    ● Wide Follow
#   M    ● Close Follow
#======================================
#
#======================================
# â–  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 CONSTANTS
#======================================
#   ● DEAD_DISPLAY is the sprite that is displayed when an actor is dead
#   ● DEAD_DISPLAY[Data_Base_Actor_ID] = ["Character_Set_Name", X of sprite, Y of sprite] 
#---------------------------------------------------------------------------
$DEAD_DISPLAY = {}
$DEAD_DISPLAY[1] = ["189-Down01", 2, 0]   #Actor 1
$DEAD_DISPLAY[2] = ["189-Down01", 6, 1]   #Actor 2
$DEAD_DISPLAY[7] = ["190-Down02", 8, 0]   #Actor 7
$DEAD_DISPLAY[8] = ["191-Down03", 4, 1]   #Actor 8
#---------------------------------------------------------------------------
#   ● RANGE_ELEMENT_ID is which element the range is set to
#---------------------------------------------------------------------------
$RANGE_ELEMENT_ID = 17 #Element 17
#---------------------------------------------------------------------------
#   ● RANGE_DISPLAY is the setup for range weapons
#   ● RANGE_DISPLAY[Data_Base_Weapon_ID] = 
#      ["Character_Set_Name", New Animation Id, Item Id of Ammo]
#---------------------------------------------------------------------------
$RANGE_DISPLAY = {}
$RANGE_DISPLAY[17] = ["Arrow", 4, 33] #Weapon 17
$RANGE_DISPLAY[18] = ["Arrow", 4, 33] #Weapon 18
$RANGE_DISPLAY[19] = ["Arrow", 4, 33] #Weapon 19
$RANGE_DISPLAY[20] = ["Arrow", 4, 33] #Weapon 20
$RANGE_DISPLAY[34] = ["Arrow", 4, 33] #Weapon 34
#======================================

class Action_Battle_System
  #--------------------------------------------------------------------------
  attr_accessor :ally_ai_active
  attr_accessor :enemies
  attr_accessor :display
  attr_accessor :hud
  attr_accessor :hud_pc
  attr_accessor :hudname
  attr_accessor :dash_level
  attr_accessor :sneak_level
  attr_accessor :transer_player
  attr_accessor :ranged
  attr_accessor :skill_key
  attr_accessor :player_engaged
  attr_accessor :close_follow
  #--------------------------------------------------------------------------
  def initialize
    # Ally AI Flag
    @ally_ai_active = true
    # Enemies List
    @enemies = {}
    # Range List
    @ranged = {}
    # 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
    # Display
    @display = []
    @display[0] = false
    @display[1] = ""
    # Hud
    @hud = true
    @hud_pc = false
    @hudname = "HUD-Display"
    # Transfering Player
    @transer_player = false
    # Skill Keys
    @skill_key = {}
    @skill_key[1] = 0
    @skill_key[2] = 0
    @skill_key[3] = 0
    @skill_key[4] = 0
     # Ally tracking
    @player_engaged = false
    @player_obect = nil
    # Party Command
   @close_follow = false
  end
  #--------------------------------------------------------------------------
  def hud_control(flag)
    @hud = flag
    return
  end
  #--------------------------------------------------------------------------
  def hud_player_control(flag)
    @hud_pc = flag
    return
  end
  #--------------------------------------------------------------------------
  def set_ally_ai(tirgger)
    @ally_ai_active = tirgger
    return
  end
  #--------------------------------------------------------------------------
  def refresh(event, list, character_name)
    @enemies.delete(event.id)
    return if character_name == ""
    return if list == nil
    for i in 0...list.size
      if list[i].code == 108 and list[i].parameters == ["ABS Event Command List"]
        name = list[i+1].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)
            behavior = list[i+2].parameters[0].split
            @enemies[event.id].behavior = behavior[1].to_i
            sound = list[i+3].parameters[0].split
            @enemies[event.id].detection[0] = sound[1].to_i
            sight = list[i+4].parameters[0].split
            @enemies[event.id].detection[1] = sight[1].to_i
            aggressiveness = list[i+5].parameters[0].split
            @enemies[event.id].aggressiveness = aggressiveness[1].to_i
            speed = list[i+6].parameters[0].split
            @enemies[event.id].speed = speed[1].to_i
            frequency = list[i+7].parameters[0].split
            @enemies[event.id].frequency = frequency[1].to_i
            trigger = list[i+8].parameters[0].split
            @enemies[event.id].trigger= [trigger[1].to_i, trigger[2].to_i, trigger[3].to_i]
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def default_setup(id)
    @enemies[id].behavior = 1
    @enemies[id].detection[0] = 1
    @enemies[id].detection[1] = 4
    @enemies[id].aggressiveness = 2
    @enemies[id].engaged[0] = false
    @enemies[id].engaged[1] = 0
    @enemies[id].speed = 4
    @enemies[id].frequency = 5
  end
  #--------------------------------------------------------------------------
  def update
    update_dash if @sneaking == false 
    update_sneak if @dashing == false
    update_enemies
    update_range
    update_allies if @ally_ai_active == true
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  def update_range
    for range in @ranged.values
      range.update
    end
  end
  #--------------------------------------------------------------------------
  def update_allies
    for ally in $game_allies.values
      next if ally.under_attack == true
      if @player_engaged == true
        ally.under_attack = true
        ally.forced_attack = true
        ally.object = @player_obect        
      end
    end
  end
  #--------------------------------------------------------------------------
  def update_dash
    if Kboard.keyb($R_Key_D) == 1
      if $game_player.moving?
        @dashing = true
        $game_player.move_speed = 6
        for ally in $game_allies.values
          ally.move_speed = 5
        end
        @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
          for ally in $game_allies.values
          ally.move_speed = 4
        end
        end
      end
    else
      @dashing = false
      $game_player.move_speed = 4
      for ally in $game_allies.values
          ally.move_speed = 4
        end
      @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 Kboard.keyb($R_Key_S) == 1
      if $game_player.moving?
        @sneaking = true
        $game_player.move_speed = 3
        for ally in $game_allies.values
          ally.move_speed = 3
        end
        @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
          for ally in $game_allies.values
            ally.move_speed = 4
          end
        end
      end
    else
      @sneaking = false
      $game_player.move_speed = 4
      for ally in $game_allies.values
        ally.move_speed = 4
      end
      @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
      if enemy.ranged != nil
        enemy.ranged.update
      end
      case enemy.behavior
      when 0
        if enemy.engaged[0] == true
          next if engaged_enemy_detection?(enemy,1) == true
          next if engaged_enemy_detection?(enemy, 0) == true
        end
      when 1
        if enemy.engaged[0] == true
          next if engaged_enemy_detection?(enemy,1) == true
          next if engaged_enemy_detection?(enemy, 0) == true
        else
          next if enemy_detection_sight?(enemy) == true
          next if enemy_detection_sound?(enemy) == true
        end
      when 2
        if enemy.engaged[0] == true
          next if engaged_enemy_linking?(enemy, 1) == true
          next if engaged_enemy_linking?(enemy, 0) == true
        else
          next if enemy_linking?(enemy) == true
        end
      when 3
        if enemy.engaged[0] == true
          next if engaged_enemy_linking?(enemy,1) == true
          next if engaged_enemy_linking?(enemy,0) == 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
    if enemy.engaged[1] == 0
        event.object = $game_player
    else
        event.object = $game_allies[enemy.engaged[1]]
    end
    event.move_type = 4
    event.move_toward_object
    event.move_frequency = enemy.frequency 
    event.move_speed = enemy.speed
  end
  #--------------------------------------------------------------------------
  def return_event_movement(enemy)
    event = $game_map.events[enemy.event_id]
    event.move_type = enemy.move_type
    event.move_frequency = enemy.move_frequency
    event.move_speed = enemy.move_speed
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_linking?(enemy, level)
    if enemy.detection[level] != 0
      if enemy.engaged[1] == 0
        object = $game_player
      else
        object = $game_allies[enemy.engaged[1]]
      end
      if in_range?($game_map.events[enemy.event_id], object, enemy.detection[level])
        enemy.linking = false
        enemy_attack(enemy)
        return true
      else
        if enemy.linking == false
          enemy.engaged[0] = false
          if enemy.engaged[1] == 0
            @player_engaged = false
          else
            $game_allies[enemy.engaged[1]].under_attack = false
          end
          enemy.engaged[1] = 0
          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[1])
        if @enemies[key].engaged[0] == true
          enemy.engaged[0] = true
          enemy.engaged[1] = @enemies[key].engaged[1]
          enemy.linking = true
          set_event_movement(enemy)
          return true
        end
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_detection_sound?(enemy)
    if enemy.detection[0] != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection[0])
        if @sneaking == true
          return false
        end
        enemy.engaged[0] = true
        enemy.engaged[1] = 0
        set_event_movement(enemy)
        return true
      end
      for key in $game_allies.keys
        if $game_allies[key].map_id == $game_map.map_id
          next if $game_allies[key].dead == true
          if in_range?($game_map.events[enemy.event_id], $game_allies[key], enemy.detection[0])
            if $game_party.actors[key] != nil
              if @sneaking == true
                return false
              end
              enemy.engaged[0] = true
              enemy.engaged[1] = key
              set_event_movement(enemy)
              return true
            end
          end
        end
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_detection_sight?(enemy)
    if enemy.detection[1] != 0
      if in_range?($game_map.events[enemy.event_id], $game_player, enemy.detection[1])
        if facing?($game_map.events[enemy.event_id], $game_player)
          enemy.engaged[0] = true
          enemy.engaged[1] = 0
          set_event_movement(enemy)
          return true
        end
      end
      for key in $game_allies.keys
        if $game_allies[key].map_id == $game_map.map_id
          next if $game_allies[key].dead == true
          if in_range?($game_map.events[enemy.event_id], $game_allies[key], enemy.detection[1])
            if facing?($game_map.events[enemy.event_id], $game_allies[key])
              if $game_party.actors[key] != nil
                enemy.engaged[0] = true
                enemy.engaged[1] = key
                set_event_movement(enemy)
                return true
              end
            end
          end
        end
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def engaged_enemy_detection?(enemy, level)
    if enemy.detection[level] != 0
      if enemy.engaged[1] == 0
        object = $game_player
      else
        id = enemy.engaged[1]
        object = $game_allies[id]
      end
      if in_range?($game_map.events[enemy.event_id], object, enemy.detection[level])
        enemy_attack(enemy)
        return true
      else
        enemy.engaged[0] = false
        if enemy.engaged[1] == 0
          @player_engaged = false
        else
          $game_allies[enemy.engaged[1]].under_attack = false
        end
        enemy.engaged[1] = 0
        return_event_movement(enemy)
        return false
      end
    end
  end
  #--------------------------------------------------------------------------
  def in_range?(element, object, range)
    x = (element.x - object.x) * (element.x - object.x)
    y = (element.y - object.y) * (element.y - object.y)
    r = x + y
    if r <= (range * range)
       return true
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  def in_range(element, range)
    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
    if r <= (range * range)
      objects.push($game_party.actors[0])
    end
    for key in $game_allies.keys
      ally = $game_allies[key]
      x = (element.x - ally.x) * (element.x - ally.x)
      y = (element.y - ally.y) * (element.y - ally.y)
     r = x + y
      if r <= (range * range)
        next if $game_party.actors[key] == nil
        objects.push($game_party.actors[key])
      end
    end
    return objects
  end
  #--------------------------------------------------------------------------
  def facing?(element, object)
    if element.direction == 2
      if object.y >= element.y
        return true
      end
    end
    if element.direction == 4
      if object.x <= element.x
        return true
      end
    end
    if element.direction == 6
      if object.x  >= element.x
        return true
      end
    end
    if element.direction == 8
      if object.y <= element.y
        return true
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def in_line?(element, object)
    if element.direction == 2
      if object.x == element.x
        return true
      end
    end
    if element.direction == 4
      if object.y == element.y
        return true
      end
    end
    if element.direction == 6
      if object.y == element.y
        return true
      end
    end
    if element.direction == 8
      if object.x == element.x
        return true
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  def enemy_pre_attack(enemy, actions)
    if enemy.hp * 100.0 / enemy.maxhp > actions.condition_hp
      return true
    end
    if $game_party.max_level < actions.condition_level
      return true
    end
    switch_id = actions.condition_switch_id
    if actions.condition_switch_id > 0 and $game_switches[switch_id] == false
      return true
    end
    n = rand(11) 
    if actions.rating < n
      return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  def hit_actor(object, enemy)
    return if object == nil
    object.jump(0, 0)
    object.animation_id = enemy.animation2_id
  end
  #--------------------------------------------------------------------------
  def actor_non_dead?(actor, enemy)
    if actor.dead?
      return_event_movement(enemy)
      enemy.engaged[0] = false
      enemy.engaged[1] = 0
      $game_party.kill_actor(actor.id)
      if $game_party.all_dead?
        $game_temp.gameover = true
      end
      return false
    end
    return true
  end
  #--------------------------------------------------------------------------
  def set_engaged(enemy)
    if enemy.engaged[1] == 0
      @player_engaged = true
      @player_obect = $game_map.events[enemy.event_id]
    else
      $game_allies[enemy.engaged[1]].object = $game_map.events[enemy.event_id]
      $game_allies[enemy.engaged[1]].under_attack = true
    end
  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 * 20) == 0
          case actions.basic
          when 0 #Attack
            if enemy.engaged[1] == 0
              object = $game_player
            else
              object = $game_allies[enemy.engaged[1]]
            end
            if in_range?($game_map.events[enemy.event_id], object, 1) and 
            facing?($game_map.events[enemy.event_id], object)
              actor = $game_party.actors[enemy.engaged[1]]
              actor.attack_effect(enemy)
              set_engaged(enemy)
              if $game_party.actors[enemy.engaged[1]].damage != "Miss" and $game_party.actors[enemy.engaged[1]].damage != 0
                hit_actor(object, enemy)
              end
              actor_non_dead?(actor, enemy)
              return
            end
          when 1..3 #Nothing
            return
          end
        end
      when 1 #Skill
        skill = $data_skills[actions.skill_id]
        case skill.scope
        when 1 # One Enemy
          if Graphics.frame_count % (enemy.aggressiveness * 10) == 0
            if enemy.engaged[1] == 0
              object = $game_player
              actor = $game_party.actors[0]
            else
              object = $game_allies[enemy.engaged[1]]
              actor = $game_party.actors[enemy.engaged[1]]
            end
            if in_line?($game_map.events[enemy.event_id], object)
              next if enemy.can_use_skill?(skill) == false
              next if enemy.ranged  != nil
              enemy.ranged = Game_Ranged.new("Magic", $game_map.events[enemy.event_id], enemy, skill)
              enemy.sp -= skill.sp_cost
            end
          end
        when 2 # All Emenies
          if Graphics.frame_count % (enemy.aggressiveness * 100) == 0
            next if enemy.can_use_skill?(skill) == false
            enemy.sp -= skill.sp_cost
            actors = in_range($game_map.events[enemy.event_id], 7)
            next if actors[0].dead?
            $game_map.events[enemy.event_id].animation_id = skill.animation2_id
            for actor in actors
              actor.effect_skill(enemy, skill)
              if $game_party.actors[enemy.engaged[1]].damage != "Miss" and $game_party.actors[enemy.engaged[1]].damage != 0
                hit_actor(object, enemy)
              end
              set_engaged(enemy)
              if enemy.engaged[1] == 0
                object = $game_player
              else
                object = $game_allies[enemy.engaged[1]]
              end
              actor_non_dead?(actor, enemy)
            end
             return
          end
        when 3..4 # User
          if Graphics.frame_count % (enemy.aggressiveness * 100) == 0
            if enemy.hp < skill.power.abs
              enemy.effect_skill(enemy, skill)
              enemy.sp -= skill.sp_cost
              $game_map.events[enemy.event_id].animation_id = skill.animation2_id
            end
            return
          end
        when 7 # User
          if Graphics.frame_count % (enemy.aggressiveness * 100) == 0
            if enemy.hp < skill.power.abs
              enemy.effect_skill(enemy, skill)
              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)
    event.jump(0, 0)
    return if animation == 0
    event.animation_id = animation
  end
  #--------------------------------------------------------------------------
  def event_non_dead?(enemy)
    if enemy.dead?
      if enemy.engaged[1] == 0
        @player_engaged = false
      else
        $game_allies[enemy.engaged[1]].under_attack = false
      end
      treasure(enemy)
      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
          @display[0] = true
          @display[1] = "LEVEL UP ~!"
          actor.recover_all
          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
    if $RANGE_DISPLAY[$game_party.actors[0].weapon_id]  == nil
      if Graphics.frame_count % 2 == 0
        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)
            if enemy.damage != "Miss" and enemy.damage != 0
              hit_event(event, $data_weapons[actor.weapon_id].animation2_id)
            end
            if event_non_dead?(enemy)
              @player_engaged = false
              if enemy.engaged[0] == false
                enemy.engaged[0] = true
                enemy.engaged[1] = 0
                set_event_movement(enemy)
              end
            end
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def player_ranged
    weapon = $data_weapons[$game_party.actors[0].weapon_id]
    return if weapon == nil
    if weapon.element_set.include?($RANGE_ELEMENT_ID)
      ammo = $RANGE_DISPLAY[weapon.id]
      return if ammo == nil
      if $game_party.item_number(ammo[2]) != 0
        if @ranged[0] == nil
          $game_party.lose_item(ammo[2], 1)
          @ranged[0] = Game_Ranged.new("Weapon", $game_player, $game_party.actors[0], $game_party.actors[0].weapon_id)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def player_skill(skill_key_id)
    skill = $data_skills[@skill_key[skill_key_id]]
    return if skill == nil
    actor = $game_party.actors[0]
    return if not actor.skills.include?(skill.id)
    case skill.scope
    when 1 # One Enemy
      if skill.element_set.include?($RANGE_ELEMENT_ID)
        if @ranged[0] == nil
          return if actor.can_use_skill?(skill) == false
          @ranged[0] = Game_Ranged.new("Magic", $game_player, actor, skill)
          actor.sp -= skill.sp_cost
          return
        end
      else
        return if actor.can_use_skill?(skill) == false
        actor.sp -= skill.sp_cost
        for enemy in @enemies.values
          next if enemy == nil
           event = $game_map.events[enemy.event_id]
          if facing?($game_player, event) and in_range?($game_player, event, 1)
            enemy.effect_skill(actor, skill)
            if enemy.damage != "Miss" and enemy.damage != 0
              hit_event(event, skill.animation2_id)
            end
            if event_non_dead?(enemy)
              if enemy.engaged[0] == false
                enemy.engaged[0] = true
                enemy.engaged[1] = 0
                set_event_movement(enemy)
                return
              end
            end
          end
        end
      end
    when 2 # All Emenies
      return if actor.can_use_skill?(skill) == false
      $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)
        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[0] == false
            enemy.engaged[0] = true
            enemy.engaged[1] = 0
            set_event_movement(enemy)
          end
        end
      end
      return
    when 3..4 # User
      return if actor.can_use_skill?(skill) == false
      actor.effect_skill(actor, skill)
      actor.sp -= skill.sp_cost
      $game_player.animation_id = skill.animation2_id
      return
    when 7 # User
      return if actor.can_use_skill?(skill) == false
      actor.effect_skill(actor, skill)
      actor.sp -= skill.sp_cost
      $game_player.animation_id = skill.animation2_id
    end
  end
  #--------------------------------------------------------------------------
  def ally_melee_attack(ally, id)
    enemy = @enemies[id]
    actor = $game_party.actors[ally.actor_id]
    random = rand(100)
    return if random >= 20
    return if $RANGE_DISPLAY[actor.weapon_id]  != nil
    return if not Graphics.frame_count % 5 == 0
    enemy.attack_effect(actor)
    if enemy.damage != "Miss" and enemy.damage != 0
      event = $game_map.events[enemy.event_id]
      hit_event(event, $data_weapons[actor.weapon_id].animation2_id)
    end
    if not event_non_dead?(enemy)
      ally.under_attack = false
    end
  end
  #--------------------------------------------------------------------------
  def ally_ranged_weapon?(ally, id)
    event = $game_map.events[id]
    actor = $game_party.actors[ally.actor_id]
    return false if in_line?(ally, event) == false
    for allies in $game_allies.values
      next if allies == ally
      return false if in_line?(ally, allies) 
    end
    return false if $RANGE_DISPLAY[actor.weapon_id]  == nil
    weapon = $data_weapons[actor.weapon_id]
    return false if weapon == nil
    return false if weapon.element_set.include?($RANGE_ELEMENT_ID) == false
    return false if @ranged[ally.actor_id] != nil
    ammo = $RANGE_DISPLAY[weapon.id]
    return false if ammo == nil
    return false if $game_party.item_number(ammo[2]) == 0
    $game_party.lose_item(ammo[2], 1)
    @ranged[ally.actor_id] = Game_Ranged.new("Weapon", ally, actor, actor.weapon_id)
    return true
  end
  #--------------------------------------------------------------------------
  def ally_ranged_spell?(ally, id)
    event = $game_map.events[id]
    actor = $game_party.actors[ally.actor_id]
    return false if @ranged[ally.actor_id] != nil
    return false if in_line?(ally, event) == false
    for allies in $game_allies.values
      next if allies == ally
      return false if in_line?(ally, allies) 
    end
    for id in actor.skills
      skill = $data_skills[id]
      next if skill.scope > 1
      next if skill.element_set.include?($RANGE_ELEMENT_ID) == false
      next if skill.sp_cost > actor.sp
      next if facing?(ally, event) == false
      @ranged[ally.actor_id] = Game_Ranged.new("Magic", ally, actor, skill)
      actor.sp -= skill.sp_cost
      return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  def ally_heal?(ally)
    lowest_actor = $game_party.actors[0]
    for actor in $game_party.actors
      if lowest_actor.hp > actor.hp and actor.hp != actor.maxhp and actor.dead? == false
        lowest_actor = actor
      end
    end
    return false if lowest_actor.hp == lowest_actor.maxhp and !lowest_actor.dead?
    ally_actor = $game_party.actors[ally.actor_id]
    for id in ally_actor.skills
      skill = $data_skills[id]
      next if skill.scope != 3
      next if skill.element_set.include?($RANGE_ELEMENT_ID) == true
      next if skill.sp_cost > ally_actor.sp
      next if skill.power >= 0
      next if (lowest_actor.hp/2) > skill.power.abs
      lowest_actor.effect_skill(ally_actor, skill)
      ally_actor.sp -= skill.sp_cost
      index = $game_party.actors.index(lowest_actor)
      if index == 0
        $game_player.animation_id = skill.animation2_id
      else
        $game_allies[index].animation_id = skill.animation2_id
      end
      return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  def ally_cure?(ally)
    lowest_actor = $game_party.actors[0]
    for actor in $game_party.actors
      if lowest_actor.states.size > actor.states.size and actor.dead? == false
        lowest_actor = actor
      end
    end
    return false if lowest_actor.states.size == 0
    ally_actor = $game_party.actors[ally.actor_id]
    for id in ally_actor.skills
      skill = $data_skills[id]
      next if skill.scope != 3
      next if skill.element_set.include?($RANGE_ELEMENT_ID) == true
      next if skill.sp_cost > ally_actor.sp
      next if skill.minus_state_set == []
      next if skill.plus_state_set != []
      lowest_actor.effect_skill(ally_actor, skill)
      ally_actor.sp -= skill.sp_cost
      index = $game_party.actors.index(lowest_actor)
      if index == 0
        $game_player.animation_id = skill.animation2_id
      else
        $game_allies[index].animation_id = skill.animation2_id
      end
      return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  def ally_range_attack?(ally, id)
    return true if ally_ranged_weapon?(ally, id)
    return true if ally_ranged_spell?(ally, id)
    return true if ally_heal?(ally)
    return true if ally_cure?(ally)
    return false
  end
  #--------------------------------------------------------------------------
  def ally_range_help(ally)
    return if ally_heal?(ally)
    return if ally_cure?(ally)
  end
end

Script 2
Code:
#======================================
# â–  Game ABS Enemy
#======================================

class Game_ABS_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  attr_accessor :event_id
  attr_accessor :behavior
  attr_accessor :detection
  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
    @behavior = 0
    @detection  = []
    @aggressiveness = 1
    @trigger = []
    @enemy_id = enemy_id
    @engaged = []
    @linking = false
    @speed = 0
    @frequency = 0
    @move_type = 0
    @move_frequency = 0
    @move_speed = 0
    @ranged = nil
    @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 Party
#======================================

class Game_Party
  #--------------------------------------------------------------------------
  alias abs_game_party_initialize initialize
  #--------------------------------------------------------------------------
  attr_accessor :party_max
  #--------------------------------------------------------------------------
  def initialize
    @allies_active = true
    @party_max = 6
    @player_trans = false
    @locked = false
    abs_game_party_initialize
  end
  #--------------------------------------------------------------------------
  def add_actor(actor_id)
    actor = $game_actors[actor_id]
    if @actors.size < @party_max and not @actors.include?(actor)
      @actors.push(actor)
      $game_player.refresh
      id = @actors.size-1
      $game_allies[id] = Game_Ally.new(id)
      $game_allies[id].refresh
      $game_allies[id].moveto($game_player.x,$game_player.y)    
      if $scene.spriteset != nil
        $scene.spriteset.add_ally(id)
      end
    end
  end
  #--------------------------------------------------------------------------
  def kill_actor(actor_id)
    actor = $game_actors[actor_id]
    if @actors.include?(actor)
      id = @actors.index(actor)
      if id == 0
        if all_dead? == false
          shift_forward
          $game_allies[$game_party.actors.size-1].dead = true
          $game_allies[$game_party.actors.size-1].refresh
        end
      else
        $game_allies[id].dead = true
        $game_allies[id].refresh
      end
    end
  end
  #--------------------------------------------------------------------------
  def remove_actor(actor_id)
    actor = $game_actors[actor_id]
    if @actors.include?(actor)
      id = @actors.size - 1
      @actors.delete(actor)
      $game_player.refresh
      for key in $game_allies.keys
        $game_allies[key].refresh
      end
      $game_allies.delete(id)
    end
  end
  #--------------------------------------------------------------------------
  def shift_forward
    new_x = 0
    new_y = 0
    loop do
      temp = @actors.shift
      @actors.push(temp)
      if $game_party.actors.size <= 1
        return
      end
      x = $game_player.x
      y = $game_player.y
      direction = $game_player.direction
      wait = $game_player.wait_command
      map_id = $game_player.map_id
      transparent = $game_player.transparent
      $game_player.move_to($game_allies[1].x,$game_allies[1].y)
      $game_player.center($game_allies[1].x, $game_allies[1].y)
      new_x = $game_allies[1].x
      new_y = $game_allies[1].y
      $game_player.direction = $game_allies[1].direction
      $game_player.wait_command = false
      $game_player.map_id = $game_allies[1].map_id
      $game_player.transparent = false
      @player_trans = $game_allies[1].transparent
      for i in 1...$game_party.actors.size-1
        $game_allies[i].move_to($game_allies[i+1].x,$game_allies[i+1].y)
        $game_allies[i].direction = $game_allies[i+1].direction
        $game_allies[i].wait_command = $game_allies[i+1].wait_command
        $game_allies[i].map_id = $game_allies[i+1].map_id
        $game_allies[i].transparent = $game_allies[i+1].transparent
      end
      $game_allies[$game_party.actors.size-1].move_to(x,y)
      $game_allies[$game_party.actors.size-1].direction = direction
      $game_allies[$game_party.actors.size-1].wait_command = wait
      $game_allies[$game_party.actors.size-1].map_id = map_id
      $game_allies[$game_party.actors.size-1].transparent = @player_trans
      $game_player.refresh
      for ally in $game_allies.values
        ally.refresh
      end
      if @actors[0].dead? == false
        break
      end
    end
    new_map(new_x, new_y)
  end
  #--------------------------------------------------------------------------
  def shift_backward
    new_x = 0
    new_y = 0
    loop do
      temp = @actors.pop
      @actors.unshift(temp)
      if $game_party.actors.size <= 1
        return
      end
      x = $game_player.x
      y = $game_player.y
      direction = $game_player.direction
      wait = $game_player.wait_command
      map_id = $game_player.map_id
      transparent = $game_player.transparent
      id = $game_party.actors.size-1
      $game_player.move_to($game_allies[id].x, $game_allies[id].y)
      $game_player.direction = $game_allies[id].direction
      $game_player.wait_command = false
      $game_player.map_id = $game_allies[id].map_id
      $game_player.transparent = false
      @player_trans = $game_allies[id].transparent
      for i in 1...$game_party.actors.size-1
        id = $game_party.actors.size-i
        $game_allies[id].move_to($game_allies[id -1].x,$game_allies[id-1].y)
        $game_allies[id].direction = $game_allies[id -1].direction
        $game_allies[id].wait_command = $game_allies[id -1].wait_command
        $game_allies[id].map_id = $game_allies[id -1].map_id
        $game_allies[id].transparent = $game_allies[id -1].transparent
      end
      $game_allies[1].move_to(x,y)
      $game_allies[1].direction = direction
      $game_allies[1].wait_command = wait
      $game_allies[1].map_id = map_id
      $game_allies[1].transparent = @player_trans
      $game_player.refresh
      for ally in $game_allies.values
        ally.refresh
      end
      if @actors[0].dead? == false
        break
      end
    end
    new_map(new_x, new_y)
  end
  #--------------------------------------------------------------------------
  def new_map(new_x, new_y)
    if $game_player.map_id != $game_map.map_id
      $game_map.setup($game_player.map_id)
      $game_player.moveto(new_x,new_y)
      for ally in $game_allies.values
        if ally.map_id != $game_map.map_id
          ally.wait_command = true
        end
      end
      $ABS.transer_player = true
      $game_temp.transition_processing = true
    end
  end
end

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

class Game_Character
  #--------------------------------------------------------------------------
  attr_accessor   :character_name
  attr_accessor   :character_hue
  attr_accessor   :direction
  attr_accessor   :direction_fix
  attr_accessor   :wait_command
  attr_accessor   :map_id
  attr_accessor   :move_type
  attr_accessor   :move_frequency
  attr_accessor   :move_speed
  attr_accessor   :object
  #--------------------------------------------------------------------------
  alias abs_game_character_initialize initialize
  alias abs_game_character_update update
  #--------------------------------------------------------------------------
  def initialize
    abs_game_character_initialize
    @wait_command = false
    @map_id = 0
    @object = nil
  end
  #--------------------------------------------------------------------------
  def move_to(x, y)
    @x = x
    @y = y
    @real_x = @x * 128
    @real_y = @y * 128
    @prelock_direction = 0
  end
  #--------------------------------------------------------------------------
  def update
    abs_game_character_update
    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
      if @move_type == 4
        move_toward_object
      end
    end
  end
  #--------------------------------------------------------------------------
  def move_toward_object
    sx = @x - @object.x
    sy = @y - @object.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_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end
  #--------------------------------------------------------------------------
  def move_away_from_object
    sx = @x - @object.x
    sy = @y - @object.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? and sy != 0
        sy > 0 ? move_down : move_up
      end
    else
      sy > 0 ? move_down : move_up
      if not moving? and sx != 0
        sx > 0 ? move_right : move_left
      end
    end
  end
  #--------------------------------------------------------------------------
  def turn_toward_object
    sx = @x - @object.x
    sy = @y - @object.y
    if sx == 0 and sy == 0
      return
    end
    if sx.abs > sy.abs
      sx > 0 ? turn_left : turn_right
    else
      sy > 0 ? turn_up : turn_down
    end
  end
  #--------------------------------------------------------------------------
  def move_ally(ally)
    ally.move_away_from_player
  end
  #--------------------------------------------------------------------------
  def passable?(x, y, d)
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    unless $game_map.valid?(new_x, new_y)
      return false
    end
    if @through
      return true
    end
    unless $game_map.passable?(x, y, d, self)
      return false
    end
    unless $game_map.passable?(new_x, new_y, 10 - d)
      return false
    end
    for event in $game_map.events.values
      if event.x == new_x and event.y == new_y
        unless event.through
          if self != $game_player and !self.is_a?(Game_Ally)
            return false
          end
          if event.character_name != ""
            return false
          end
        end
      end
    end
    for ally in $game_allies.values
      if ally.map_id == $game_map.map_id
        if ally.x == new_x and ally.y == new_y
          unless ally.through
            if self != $game_player and ally.dead == false
              return false
            else
              move_ally(ally) if ally.dead == false
              return true
            end
          end
        end
      end
    end
    if $game_player.x == new_x and $game_player.y == new_y
      unless $game_player.through
        if @character_name != ""
          return false
        end
      end
    end
    return true
  end
end

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

class Game_Ranged < Game_Character
  #--------------------------------------------------------------------------
  attr_accessor   :running
  attr_accessor   :ending
  #--------------------------------------------------------------------------
  def initialize(type, event, enemy, attack = nil)
    super()
    @move_speed = 5
    @type = type
    @event = event
    @enemy = enemy
    @move_direction = event.direction
    @attack = attack
    @running = false
    @ending = false
    refresh(event)
  end
  #--------------------------------------------------------------------------
  def refresh(event)
    moveto(event.x, event.y)
    case @type
    when "Magic"
      @character_name = "Magic Balls.png"
    when "Weapon"
      display = $RANGE_DISPLAY[@attack]
      @character_name = display[0]
    end
  end
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    if turn_enabled
      turn_down
    end
    if passable?(@x, @y, 2)
      turn_down
      @y += 1
    end
  end
  #--------------------------------------------------------------------------
  def move_left(turn_enabled = true)
    if turn_enabled
      turn_left
    end
    if passable?(@x, @y, 4)
      turn_left
      @x -= 1
    end
  end
  #--------------------------------------------------------------------------
  def move_right(turn_enabled = true)
    if turn_enabled
      turn_right
    end
    if passable?(@x, @y, 6)
      turn_right
      @x += 1
    end
  end
  #--------------------------------------------------------------------------
  def move_up(turn_enabled = true)
    if turn_enabled
      turn_up
    end
    if passable?(@x, @y, 8)
      turn_up
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  def hit_actor(object, enemy)
    object.jump(0, 0)
  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
    if enemy.engaged[1] == 0
        event.object = $game_player
    else
        event.object = $game_allies[enemy.engaged[1]]
    end
    event.move_type = 4
    event.move_toward_object
    event.move_frequency = enemy.frequency 
    event.move_speed = enemy.speed
  end
  #--------------------------------------------------------------------------
  def return_event_movement(enemy)
    event = $game_map.events[enemy.event_id]
    event.move_type = enemy.move_type
    event.move_frequency = enemy.move_frequency
    event.move_speed = enemy.move_speed
  end
  #--------------------------------------------------------------------------
  def actor_non_dead?(actor, enemy)
    if actor.dead?
      return true if enemy.is_a?(Game_Actor)
      if enemy.engaged[1] == 0
        $ABS.player_engaged = false
      else
        $game_allies[enemy.engaged[1]].under_attack = false
      end
      return_event_movement(enemy)
      enemy.engaged[0] = false
      enemy.engaged[1] = 0
      $game_party.kill_actor(actor.id)
      if $game_party.all_dead?
        $game_temp.gameover = true
      end
      return false
    end
    return true
  end
#--------------------------------------------------------------------------
  def event_non_dead?(actor, event, event_actor)
    if actor.dead?
      if event_actor.engaged[1] == 0
        $ABS.player_engaged = false
      else
        $game_allies[event_actor.engaged[1]].under_attack = false
      end
      id = event_actor.event_id
      $ABS.enemies.delete(id)
      event = $game_map.events[event_actor.event_id]
      event.character_name = ""
      case event_actor.trigger[0]
      when 0
        event.erase
      when 1
        print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if event_actor.trigger[1] == 0
        $game_switches[event_actor.trigger[1]] = true
        $game_map.need_refresh = true
      when 2
        print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if event_actor.trigger[1] == 0
         if event_actor.trigger[2] == 0
           $game_variables[event_actor.trigger[1]] += 1
          $game_map.need_refresh = true
        else
          $game_variables[event_actor.trigger[1]] = event_actor.trigger[2]
          $game_map.need_refresh = true
        end
      when 3
        value = "A" if event_actor.trigger[1] == 1
        value = "B" if event_actor.trigger[1] == 2
        value = "C" if event_actor.trigger[1] == 3
        value = "D" if event_actor.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 set_engaged(enemy,type)
    if type == 0
      @player_engaged = true
      @player_obect = $game_map.events[enemy.event_id]
    else
      $game_allies[type].object = $game_map.events[enemy.event_id]
      $game_allies[type].under_attack = true
    end
  end
  #--------------------------------------------------------------------------
  def update
    super
    if !moving?
      if !passable?(@x, @y, @move_direction) and @ending == false
        @ending = true
        @through = true
        case @move_direction
        when 2
          move_down
        when 4
          move_left
        when 6
          move_right
        when 8
          move_up
        end
        @transparent = false
        if @x == $game_player.x and @y == $game_player.y
          actor = $game_party.actors[0]
          case @type
          when "Magic"
            actor.effect_skill(@enemy, @attack)
            if $game_party.actors[0].damage != "Miss" and $game_party.actors[0].damage != 0
              @animation_id = @attack.animation2_id
            end
            if not @enemy.is_a?(Game_Actor)
              set_engaged(@enemy, 0)
            end
          when "Weapon"
            actor.attack_effect(@enemy)
            if $game_party.actors[0].damage != "Miss" and $game_party.actors[0].damage != 0
              hit_actor($game_player, @enemy)
              display = $RANGE_DISPLAY[@enemy.weapon_id]
              if display == nil
                animation = @enemy.animation2_id
              else
                animation = display[1]
              end
              @animation_id = animation
            end
          end
          if not @enemy.is_a?(Game_Actor)
            set_engaged(@enemy, 0)
          end
          actor_non_dead?(actor, @enemy) 
        end        
        for event in $game_map.events.values
          if @x == event.x and @y == event.y
            event_actor = $ABS.enemies[event.id]
            next if event_actor == nil
            case @type
            when "Magic"
              event_actor.effect_skill(@enemy, @attack)
              if event_actor.damage != "Miss" and event_actor.damage != 0
                @animation_id = @attack.animation2_id
              end
            when "Weapon"
              event_actor.attack_effect(@enemy)
              if event_actor.damage != "Miss" and event_actor.damage != 0
                hit_actor(event, @enemy)
                display = $RANGE_DISPLAY[@enemy.weapon_id]
                if display == nil
                  animation = @enemy.animation2_id
                else
                  animation = display[1]
                end
                @animation_id = animation
              end
            end
            if  event_non_dead?(event_
 

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