#==============================================================================
# ■ Troop_Ex vol.1.20
#------------------------------------------------------------------------------
# トループのX,Y,Z座標を直接指定
# ※X座標は均等割り
# ※Z座標はトループ追加順が後の程、上位に配置
# Game_Enemy の真下に挿入(再定義)
# 08/05/01
#==============================================================================
module Troop_Ex
  # Troop_ExからX座標を取得[true/false]
  SCREEN_X = false
  # 2体=x197x443 ※均等割り
  # 3体=140x320x500 ※均等割り
  Ex = []
  #--------------------------------------------------------------------------
  # ■ここから下に、Open_textで出力されたデータ(troop.text)を貼り付ける
  #--------------------------------------------------------------------------
  #■ troop001
  Ex[1] = {"X座標"=>"x197x443","Y座標"=>"y304y304","Z座標"=>"z0z1"}
  #■ troop002
  Ex[2] = {"X座標"=>"x140x320x500","Y座標"=>"y304y304y304","Z座標"=>"z0z1z2"}
  
  end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
  include Troop_Ex
  #--------------------------------------------------------------------------
  # ■ バトル画面 X 座標の補正値(再定義)
  #--------------------------------------------------------------------------
  def screen_x
    # □未設定の場合
    if Troop_Ex::Ex[@troop_id] == nil
      return $data_troops[@troop_id].members[@member_index].x
    end
    # □module Troop_Exから、補正する数値を取得
    ps = Troop_Ex::Ex[@troop_id]["X座標"].scan(/[x][+-]*[0-9]+/).each{|pss| pss.gsub!(/[x]/) {""} }
    # □補正する数値を取得
    if ps[@member_index] != nil
      return ps[@member_index].to_i
    # □トループ数と設定数が合わない場合
    else
      # p "エラーを返す場合、#を外す"
      return $data_troops[@troop_id].members[@member_index].x
    end
  end
  #--------------------------------------------------------------------------
  # ■ バトル画面 Y 座標の補正値(再定義)
  #--------------------------------------------------------------------------
  def screen_y
    # □未設定の場合
    if Troop_Ex::Ex[@troop_id] == nil
      return $data_troops[@troop_id].members[@member_index].y
    end
    # □module Troop_Exから、補正する数値を取得
    ps = Troop_Ex::Ex[@troop_id]["Y座標"].scan(/[y][+-]*[0-9]+/).each{|pss| pss.gsub!(/[y]/) {""} }
    # □補正する数値を取得
    if ps[@member_index] != nil
      return ps[@member_index].to_i
    # □トループ数と設定数が合わない場合
    else
      # p "エラーを返す場合、#を外す"
      return $data_troops[@troop_id].members[@member_index].y
    end
  end
  #--------------------------------------------------------------------------
  # ■ バトル画面 Z 座標の補正値(再定義)
  #--------------------------------------------------------------------------
  def screen_z
    # □未設定の場合
    if Troop_Ex::Ex[@troop_id] == nil
      return @member_index
    end
    # □module Troop_Exから、補正する数値を取得
    ps = Troop_Ex::Ex[@troop_id]["Z座標"].scan(/[z][+-]*[0-9]+/).each{|pss| pss.gsub!(/[z]/) {""} }
    # □補正する数値を取得
    if ps[@member_index] != nil
      return ps[@member_index].to_i
    # □トループ数と設定数が合わない場合
    else
      return @member_index
    end
  end
  #--------------------------------------------------------------------------
  # ■ バトル画面 X 座標の取得(直接取得版)(再定義)
  #--------------------------------------------------------------------------
  if SCREEN_X
    def screen_x
      if @dup_screen_x == nil
        troops_w = []
        all_width = 0
        for i in 0...$data_troops[@troop_id].members.size
          enemy = $data_enemies[$data_troops[@troop_id].members[i].enemy_id]
          pic = RPG::Cache.battler(enemy.battler_name,enemy.battler_hue)
          troops_w.push(pic.width)
          all_width += pic.width
        end
        m_width = 0
        mem = @member_index
        while mem > 0
          m_width += troops_w[mem - 1]
          mem -= 1
        end
        between = (640 - all_width)/($data_troops[@troop_id].members.size + 1)
        rem = ((640 - all_width) % ($data_troops[@troop_id].members.size + 1))/2
        @dup_screen_x = (between * (@member_index + 1)) + m_width + (troops_w[@member_index]/2) + rem
      end
      return @dup_screen_x
    end
  end

end

#==============================================================================
# ■ トループ追加のテキスト出力(データ作成後に↓スクリプトを全部削除しよう！)
#==============================================================================
class Open_text
  #--------------------------------------------------------------------------
  # ■ トループ追加データを出力(スクリプト貼り付け用)
  # イベントコマンドのスクリプトに、下の1行を貼り付けて、ゲーム中に実行する。
  #--------------------------------------------------------------------------
  # a = Open_text.new;a.create_troop
  #--------------------------------------------------------------------------
  def create_troop
    f = File.open("troop.text", "w")
    text = ""
    for troop_id in 1...$data_troops.size
      text += "  #■ troop" + sprintf("%03d",troop_id).to_s+ "\n"
      text += "  Ex[" + troop_id.to_s + '] = {"X座標"=>"'
      for member in 0...$data_troops[troop_id].members.size
        troops_w = []
        all_width = 0
        for i in 0...$data_troops[troop_id].members.size
          enemy = $data_enemies[$data_troops[troop_id].members[i].enemy_id]
          pic = RPG::Cache.battler(enemy.battler_name,enemy.battler_hue)
          troops_w.push(pic.width)
          all_width += pic.width
        end
        m_width = 0
        mem = member
        while mem > 0
          m_width += troops_w[mem - 1]
          mem -= 1
        end
        between = (640 - all_width)/($data_troops[troop_id].members.size + 1)
        rem = ((640 - all_width) % ($data_troops[troop_id].members.size + 1))/2
        x = (between * (member + 1)) + m_width + (troops_w[member]/2) + rem
        text += "x" + x.to_s
      end
      text += '","Y座標"=>"'
      for member in 0...$data_troops[troop_id].members.size
        text += "y" + $data_troops[troop_id].members[member].y.to_s
      end
      text += '","Z座標"=>"'
      for member in 0...$data_troops[troop_id].members.size
        text += "z" + member.to_s
      end
      text += '"}'+ "\n"
      
    end
    f.write(text)
    f.close
  end
end