Project1

标题: MOG菜单如何修改状态里面的文字和血条位置 [打印本页]

作者: mollyko    时间: 2020-3-24 15:10
标题: MOG菜单如何修改状态里面的文字和血条位置

因为我分辨率改了,所以就变成这个样子了。

如然后我就修改了菜单里面的状态数值,结果一点用也没有,很是头大……

附上脚本:
#==============================================================================
# +++ MOG - Monogatari 菜单(物語)  (v1.5) +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com/
#==============================================================================
# 高级菜单系统,可供脚本师学习精灵和窗口的放置方法.
# 全部图片放在文件夹\Graphics\Menus
#==============================================================================

#==============================================================================
# Version History.
#==============================================================================
# 1.5 - Função de desabilitar o save.
#       Definição dos nomes das fontes baseado na fonte padrão do sistema,
#       para resolver o problema de compatibilidade de fontes de outras línguas.
#       Melhoria na posição das janelas.
#       Correção do bug de não atualizar o número de itens. (Dual Wield)
# 1.4 - Compatibilidade com Mog Menu Cursor.
# 1.3 - Corrigido o bug do som da Scene Skill.
# 1.2 - Compatibilidade com Third Party scripts.
#     - Scene File incorporado ao sistema Monogatari, melhorando a performance.
#==============================================================================

#==============================================================================
# NOTA - Como este é um script para apresentar técnicas de RGSS, não foram
# adicionados comentários explicativos no modulo de configuração
#==============================================================================

#==============================================================================
# ■ 主菜单
#==============================================================================
module MOG_MENU
   NUMBER_OF_PARTICLES = 20  #粒子数量
   BACKGROUND_SCROLL_SPEED = [1,0]#背景滚动速度
   COMMAND_POSITION = [32, 84]#指令位置
   COMMAND_POSITION_2 = [10,100]#指令位置2
   COMMAND_SPACE = 4#指令间距
   COMMAND_NAME_POSITION = [0,0]#名字指令位置
   COMMAND_NAME_POSITION_2 = [220,48]#名字指令位置2
   ACTOR_SPACE = 100 #角色间距
   ACTOR_POSITION = [240,0]#角色位置
   
   ACTOR_LAYOUT_POSITON = [0,275]#角色图片位置
   ACTOR_HP1_POSITON = [28,315]#角色HP1位置
   ACTOR_HP2_POSITON = [50,330]#角色HP2位置
   ACTOR_MP1_POSITON = [28,346]#角色MP1位置
   ACTOR_MP2_POSITON = [50,361]#角色MP2位置
   ACTOR_HP_METER_POSITON = [29,329]#角色HP条位置
   ACTOR_MP_METER_POSITON = [29,360]#角色MP条位置
   ACTOR_LEVEL_POSITON = [30,290]#角色等级位置
   ACTOR_STATES_POSITION = [63,283]#角色状态位置
   
   MEMBERS_FACE_POSITION =[150,55]#队员脸图位置
   MEMBERS_FACE_SPACE = 64#队员脸图间隔
   MEMBERS_ARROW_LAYOUT_POSITION = [217,40]#队员指针图片位置
   MEMBERS_ARROW_1_POSITION = [180,40]#队员指针1位置
   MEMBERS_ARROW_2_POSITION = [300,40]#队员指针2位置
   TIME_NUMBER_POS = [415,10]#时间数字位置
   GOLD_NUMBER_POS = [170,388]#金币数字位置
   LOCATION_POS = [330,380]#地点位置
end

#==============================================================================
# ■ MOG_菜单 物品
#==============================================================================
module MOG_MENU_ITEM
   NUMBER_OF_PARTICLES = 20 #粒子数
   BACKGROUND_SCROLL_SPEED = [0,0]#背景滚动速度
   COMMAND_POSITION = [0, 69]#指令位置
   BUTTON_POSITION = [210, 30]#按钮位置
   BUTTON_SPACE = 90 #按钮间距
end

#==============================================================================
# ■ MOG_菜单 技能
#==============================================================================
module MOG_MENU_SKILL
   NUMBER_OF_PARTICLES = 20  #粒子数
   BACKGROUND_SCROLL_SPEED = [0,0]#背景滚动速度
   
end

#==============================================================================
# ■ MOG_角色 技能 状态
#==============================================================================
module MOG_ACTOR_SKILL_STATUS
  MEMBERS_SPACE = 80  #队员间距
  LAYOUT_POSITION = [155,0]#图片位置
  PAR_POSITION = [0,0]#
  FACE_POSITION = [-13,-3]#脸图位置
  HP_METER_POSITION = [158,15]#HP条位置
  MP_METER_POSITION = [177,35]#MP条位置
  STATES_POSITION = [71,36]#状态位置
  STATES_SCROLLING_ANIMATION = false  #是否显示状态滚动动画
  NAME_POSITION = [105,34]#名字位置
  FONT_SIZE = 18 #字体大小
  FONT_BOLD = true  #字体是否加粗
end

#==============================================================================
# ■ MOG_菜单 装备
#==============================================================================
module MOG_MENU_EQUIP
   NUMBER_OF_PARTICLES = 20  #粒子数
   BACKGROUND_SCROLL_SPEED = [0,0]#背景滚动速度
   FONT_SIZE = 18 #字体大小
   FONT_BOLD = true #字体是否加粗
   FONT_ITALIC = false #字体是否斜体
end

#==============================================================================
# ■ MOG_菜单 状态
#==============================================================================
module MOG_EQUIP_STATUS  
  LAYOUT_POSITION = [0,80] #图片位置
  FACE_POSITION = [120,-45]#脸图位置
  PAR_POSITION = [5,32]
  NAME_POSITION = [15,-5]#名字位置
  FONT_SIZE = 18#字体大小
  FONT_BOLD = true#字体是否加粗
end

#==============================================================================
# ■ MOG_菜单 状态
#==============================================================================
module MOG_MENU_STATUS
   NUMBER_OF_PARTICLES = 20  #粒子数
   BACKGROUND_SCROLL_SPEED = [1,0]#背景滚动速度
end

#==============================================================================
# ■ MOG 菜单 队伍
#==============================================================================
module MOG_MENU_PARTY
   NUMBER_OF_PARTICLES = 20  #粒子数
   BACKGROUND_SCROLL_SPEED = [0,0]#背景滚动速度
end

#==============================================================================
# ■ MOG 菜单 存档
#==============================================================================
module MOG_MENU_SAVE
   FILES_MAX = 9   
   NUMBER_OF_PARTICLES = 20   #粒子数
   BACKGROUND_SCROLL_SPEED = [1,0]#背景滚动速度
end

#==============================================================================
# ■ MOG 菜单 结束游戏
#==============================================================================
module MOG_MENU_END
   NUMBER_OF_PARTICLES = 20#粒子数
   BACKGROUND_SCROLL_SPEED = [0,0]#背景滚动速度
end

#==============================================================================
# ■ MOG 角色 菜单 状态
#==============================================================================
module MOG_ACTOR_MENU_STATUS  
  LAYOUT_POSITION = [385,115]#图片位置
  FACE_POSITION = [48,-32]#脸图位置
  PAR_POSITION = [5,64]
  STATES_POSITION = [15,25]#状态位置
  STATES_SCROLLING_ANIMATION = false #是否显示状态滚动动画
  NAME_POSITION = [10,60]#名字位置
  FONT_SIZE = 18#字体大小
  FONT_BOLD = true#字体是否加粗
end

#==============================================================================
# ■ MOG 队员图片
#==============================================================================
module MOG_MEMBERS_LAYOUT
  MEMBERS_SPACE = 80  #队员间隔
  LAYOUT_POSITION = [3,160]#图片位置
  PAR_POSITION = [0,0]
  FACE_POSITION = [0,-2]#脸图位置
  HP_METER_POSITION = [12,37]#HP条位置
  MP_METER_POSITION = [86,37]#MP条位置
  SCOPE_TEXT_POSITION = [0,170]#滚动文字位置
  ARROW_1_POSITION = [50,55]#指针1位置
  ARROW_2_POSITION = [50,4]#指针2位置
  NAME_POSITION = [42,38]#名字位置
  FONT_SIZE = 18#字体大小
  FONT_BOLD = true  #字体是否加粗
end

#==============================================================================
# ■ MOG 角色 菜单 队伍
#==============================================================================
module MOG_ACTOR_MENU_PARTY
  FACE_POSITION = [390,96]#脸图位置
  NAME_POSITION = [390,73]#名字位置
  FONT_SIZE = 16#字体大小
  FONT_BOLD = true#字体是否加粗
end


#==============================================================================
# ■ MOG MENU BASE
#==============================================================================
module MOG_MENU_BASE
  
end

$imported = {} if $imported.nil?
$imported[:mog_monogatari] = true

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
  
  attr_accessor :menu_index
  attr_accessor :actor_menu_temp
  attr_accessor :item_scope
  attr_accessor :temp_actor_equip
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  alias mog_menu_index_initialize initialize
  def initialize
      @menu_index = 0
      @actor_menu_temp = -1      
      @item_scope = 0
      @temp_actor_equip = nil
      mog_menu_index_initialize
  end
  
end

#==============================================================================
# ■ Scene Map
#==============================================================================
class Scene_Map < Scene_Base
  
#--------------------------------------------------------------------------
# ● Update Call Menu
#--------------------------------------------------------------------------   
alias mog_menu_monogatari_update_call_menu update_call_menu   
def update_call_menu
     if $game_party.members.size == 0
        @call_menu = false
        return
     end
     mog_menu_monogatari_update_call_menu
end

#--------------------------------------------------------------------------
# ● Call Menu
#--------------------------------------------------------------------------   
alias mog_menu_monogatari_call_menu call_menu
def call_menu
     $game_temp.menu_index = 0     
     mog_menu_monogatari_call_menu
end
   
end

#==============================================================================
# ■ Window Command
#==============================================================================
class Window_Command < Window_Selectable
  
  attr_reader :list
end

#==============================================================================
# ■ Game Party
#==============================================================================
class Game_Party < Game_Unit
  
   attr_accessor :menu_actor_id   
   
end

#==============================================================================
# ■ Game Interpreter
#==============================================================================
class Game_Interpreter
  
#--------------------------------------------------------------------------
# ● gain Tp
#--------------------------------------------------------------------------      
def gain_tp(actor_id,value)
     return if $game_party.members[actor_id] == nil
     $game_party.members[actor_id].tp += value.truncate
end  

#--------------------------------------------------------------------------
# ● Lose Tp
#--------------------------------------------------------------------------      
def lose_tp(actor_id,value)
     return if $game_party.members[actor_id] == nil
     $game_party.members[actor_id].tp -= value.truncate
end   

end

#==============================================================================
# ■ Cache
#==============================================================================
module Cache
  
  #--------------------------------------------------------------------------
  # ● Menu
  #--------------------------------------------------------------------------
  def self.menu(filename)
      load_bitmap("Graphics/Menus/", filename)
  end  
  
  #--------------------------------------------------------------------------
  # ● Menu Main
  #--------------------------------------------------------------------------
  def self.menu_main(filename)
      load_bitmap("Graphics/Menus/Main/", filename)
  end

  #--------------------------------------------------------------------------
  # ● Menu Item
  #--------------------------------------------------------------------------
  def self.menu_item(filename)
      load_bitmap("Graphics/Menus/Item/", filename)
  end  
  
  #--------------------------------------------------------------------------
  # ● Menu Skill
  #--------------------------------------------------------------------------
  def self.menu_skill(filename)
      load_bitmap("Graphics/Menus/Skill/", filename)
  end   
  
  #--------------------------------------------------------------------------
  # ● Menu Equip
  #--------------------------------------------------------------------------
  def self.menu_equip(filename)
      load_bitmap("Graphics/Menus/Equip/", filename)
  end      
  
  #--------------------------------------------------------------------------
  # ● Menu Status
  #--------------------------------------------------------------------------
  def self.menu_status(filename)
      load_bitmap("Graphics/Menus/Status/", filename)
  end   
  
  #--------------------------------------------------------------------------
  # ● Menu Save
  #--------------------------------------------------------------------------
  def self.menu_save(filename)
      load_bitmap("Graphics/Menus/Save/", filename)
  end      
  
  #--------------------------------------------------------------------------
  # ● Menu Party
  #--------------------------------------------------------------------------
  def self.menu_party(filename)
      load_bitmap("Graphics/Menus/Party/", filename)
  end     
  
  #--------------------------------------------------------------------------
  # ● Menu End
  #--------------------------------------------------------------------------
  def self.menu_end(filename)
      load_bitmap("Graphics/Menus/End/", filename)
  end      
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  attr_accessor :pre_cache_main_menu
  attr_accessor :pre_cache_actor_menu
  attr_accessor :pre_cache_item_menu
  attr_accessor :pre_cache_skill_menu
  attr_accessor :pre_cache_equip_menu
  attr_accessor :pre_cache_status_menu
  attr_accessor :pre_cache_party_menu
  attr_accessor :pre_cache_file_menu
  attr_accessor :pre_cache_end_menu
  attr_accessor :pre_cache_icon
  attr_accessor :pre_symbol
  
  #--------------------------------------------------------------------------
  # ● Pre Cache Atelier Menu
  #--------------------------------------------------------------------------  
  def pre_cache_atelier_menu   
      @pre_cache_main_menu = []
      @pre_cache_item_menu = []
      @pre_cache_skill_menu = []
      @pre_cache_equip_menu = []
      @pre_cache_status_menu = []
      @pre_cache_party_menu = []
      @pre_cache_file_menu = []
      @pre_cache_end_menu = []
      @pre_symbol = ""
      execute_pre_cache_icon if can_pre_cache_icon?
      execute_pre_cache_actor
      execute_pre_cache_main_menu
      execute_pre_cache_item_menu
      execute_pre_cache_skill_menu
      execute_pre_cache_equip_menu
      execute_pre_cache_status_menu
      execute_pre_cache_file_menu
      execute_pre_cache_party_menu
      execute_pre_cache_end_menu
  end

  #--------------------------------------------------------------------------
  # ● Pre Cache Icon
  #--------------------------------------------------------------------------   
  def execute_pre_cache_icon
      @pre_cache_icon = Cache.system("Iconset")
  end
      
  #--------------------------------------------------------------------------
  # ● Can Pre Cache Menu?
  #--------------------------------------------------------------------------  
  def can_pre_cache_icon?
      return true if @pre_cache_icon == nil
      return true if @pre_cache_icon.disposed? rescue return false
      return false
  end
  
end

#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map  
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_atelier_menu_initialize initialize
  def initialize
      $game_temp.pre_cache_atelier_menu if $game_temp.can_pre_cache_icon?
      mog_atelier_menu_initialize
  end
  
end

#==============================================================================
# ■ Particles_Menu
#==============================================================================
class Particles_Menu < Sprite
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------            
  def initialize(viewport = nil)
      super(viewport)
      @speed_x = 0
      @speed_y = 0
      @speed_a = 0
      self.bitmap = Cache.menu("Particles")
      self.blend_type = 0
      self.z = 1
      reset_setting(true)
  end  
  
#--------------------------------------------------------------------------
# ● Reset Setting
#--------------------------------------------------------------------------               
  def reset_setting(initial = false)
      zoom = (50 + rand(100)) / 100.1
      self.zoom_x = zoom
      self.zoom_y = zoom
      self.x = rand(576) - 160
      self.y = initial == true ? rand(480) : 512
      self.opacity = 0
      @speed_y = -(1 + rand(3))
      @speed_x = (1 + rand(2))
      @speed_a = (1 + rand(2))     
  end
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------               
  def dispose
      super
      self.bitmap.dispose if self.bitmap != nil
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------               
  def update
      super
      self.x += @speed_x
      self.y += @speed_y
      self.opacity += 5
      reset_setting if can_reset_setting?
  end  
  
#--------------------------------------------------------------------------
# ● Can Reset Setting
#--------------------------------------------------------------------------                 
  def can_reset_setting?
      return true if self.y < -50
      return true if self.x > 576
      return false
  end  
   
end




#==============================================================================
# ■ Window_Actor_Status_0
#==============================================================================
class Members_Windows_Status < Window_Selectable
  attr_reader   :pending_index         
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x = 0, y = 0)
    super(x, y, window_width, window_height)
    self.windowskin = Cache.menu("")
    self.opacity = 0
    self.contents_opacity = 0
    self.visible = false
    @input_lag = 0
    @old_index = -1
    @pending_index = -1
    refresh
  end

  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
      40
  end

  #--------------------------------------------------------------------------
  # ● Window Height
  #--------------------------------------------------------------------------
  def window_height
      40
  end
  
  #--------------------------------------------------------------------------
  # ● Cursor Movable?
  #--------------------------------------------------------------------------  
  def cursor_movable?
      active && open? && !@cursor_fix && !@cursor_all && item_max > 0 && @input_lag == 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      $game_party.members.size
  end
  
  #--------------------------------------------------------------------------
  # ● Item Height
  #--------------------------------------------------------------------------
  def item_height
    (height - standard_padding * 2) / 4
  end

  #--------------------------------------------------------------------------
  # ● Draw Item Background
  #--------------------------------------------------------------------------
  def draw_item_background(index)
  end
  
  #--------------------------------------------------------------------------
  # ● Pending Index
  #--------------------------------------------------------------------------
  def pending_index=(index)
      last_pending_index = @pending_index
      @pending_index = index
  end
  
  #--------------------------------------------------------------------------
  # ● Process OK
  #--------------------------------------------------------------------------
  def process_ok
      $game_party.target_actor = $game_party.members[index] unless @cursor_all
      call_ok_handler
  end
  
  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select($game_party.target_actor.index || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Select For Item
  #--------------------------------------------------------------------------
  def select_for_item(item)
      @cursor_fix = item.for_user?
      @cursor_all = item.for_all?
      if @cursor_fix
         select($game_party.menu_actor.index)
      elsif @cursor_all
         select(0)
      else
          @index = @index < 0 ? 0 : @index
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------  
  def draw_item(index)
  end
  
  #--------------------------------------------------------------------------
  # ● Process Cursor Move 2
  #--------------------------------------------------------------------------
  def process_cursor_move2
      return unless cursor_movable?
      last_index = @index
      cursor_down (Input.trigger?(:RIGHT))  if Input.repeat?(:RIGHT)
      cursor_up   (Input.trigger?(:LEFT))    if Input.repeat?(:LEFT)
      Sound.play_cursor if @index != last_index
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      super
      @input_lag -= 1 if @input_lag > 0
      if @old_index != @index
         @old_index = @index
         @input_lag = 5
      end   
  end
  
end

#==============================================================================
# ■ Members Menu
#==============================================================================
class Members_Menu
  include MOG_MEMBERS_LAYOUT
  
  attr_accessor :actor
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor,index)
      @actor = actor
      @index = index
      @index_old = -1
      @com_index = 0
      @max_index = $game_party.members.size - 1      
      @active = false
      @active_old = false
      @opac = 0
      @opac_active = [0,0]
      @par = []
      @float = [0,0,0]
      set_old_parameter
      create_sprites
      create_sprites_support if @index == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------   
  def create_sprites
      @meter_image = $game_temp.pre_cache_actor_menu[6]
      @meter_cw = @meter_image.width
      @meter_ch = @meter_image.height / 2   
      @parameter_number = $game_temp.pre_cache_actor_menu[2]
      @parameter_cw = @parameter_number.width / 10
      @parameter_ch = @parameter_number.height
      @visible = false
      create_layout
      create_parameter
      create_face
      create_name
      create_hp_meter
      create_mp_meter
      @next_pos = [[email protected] - 64,0]
      @now_index = [[email protected] - 64,0,0]
      @before_index = [[email protected] - 64,0,0]
      @next_index = [[email protected] - 64,0,0]
      set_position([email protected] - 64,0)
      set_opacity(0)
  end
   
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------     
  def create_sprites_support
      create_scope_all
      create_arrow
  end
  
  #--------------------------------------------------------------------------
  # ● Create Scope All
  #--------------------------------------------------------------------------      
  def create_scope_all
      @scope = Sprite.new
      @scope.bitmap = $game_temp.pre_cache_actor_menu[4]
      @scope_cw = @scope.bitmap.width
      @org_pos_scope = [SCOPE_TEXT_POSITION[0],SCOPE_TEXT_POSITION[1],SCOPE_TEXT_POSITION[0] - @scope_cw]
      @scope.x = @org_pos_scope[2]
      @scope.y = @org_pos_scope[1]
      @scope.z = 15
  end
  
  #--------------------------------------------------------------------------
  # ● Update Scope
  #--------------------------------------------------------------------------         
  def update_scope
      if @active and all_targets
         if @scope.x < @org_pos_scope[0]
            @scope.x += 15
            if @scope.x >= @org_pos_scope[0]
               @scope.x = @org_pos_scope[0]
            end   
         end
      else
         if @scope.x > @org_pos_scope[2]         
            @scope.x -= 15
            if @scope.x <= @org_pos_scope[2]
               @scope.x = @org_pos_scope[2]
            end         
          end
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Create Arrow
  #--------------------------------------------------------------------------           
  def create_arrow
      @arrow_float = [0,0,0]
      @arrow_np_1 = [0,0]
      @arrow_np_2 = [0,0]
      @arrow_image = $game_temp.pre_cache_actor_menu[5]
      @arrow_image_cw = @arrow_image.width
      @arrow_image_ch = @arrow_image.height# / 2
      @arrow_1 = Sprite.new
      @arrow_1.bitmap = Bitmap.new(@arrow_image_cw,@arrow_image_ch)
      @arrow_cw = @arrow_1.bitmap.width
      @org_pos_arrow_1 = [ARROW_1_POSITION[0],ARROW_1_POSITION[1]]
      @arrow_1.x = @org_pos_arrow_1[0]
      @arrow_1.y = @org_pos_arrow_1[1]
      @arrow_1.z = 15
      @arrow_1.opacity = 0
      @arrow_2 = Sprite.new
      @arrow_2.bitmap = Bitmap.new(@arrow_image_cw,@arrow_image_ch)
      @arrow_2.ox = @arrow_2.bitmap.width / 2
      @arrow_2.oy = @arrow_2.bitmap.height / 2
      @arrow_2.angle = 180
      ar_y = (MEMBERS_SPACE * 4) + ARROW_2_POSITION[1]
      @org_pos_arrow_2 = [ARROW_2_POSITION[0] + @arrow_2.ox,ar_y]
      @arrow_2.x = @org_pos_arrow_2[0]
      @arrow_2.y = @org_pos_arrow_2[1]
      @arrow_2.z = 15  
      @arrow_2.opacity = 0
      @arrow_time_1 = 0
      @arrow_time_2 = 0
      refresh_arrow(0,@arrow_1,0)
      refresh_arrow(1,@arrow_2,0)
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh_arrow 1
  #--------------------------------------------------------------------------            
  def refresh_arrow(arrow,sprite,type)
      sprite.bitmap.clear
      h = @arrow_image_ch * type
      a_rect = Rect.new(0,h,@arrow_image_cw,@arrow_image_ch)
      sprite.bitmap.blt(0,0,@arrow_image,a_rect)
      @arrow_time_1 = 20 if arrow == 0
      @arrow_time_2 = 20 if arrow ==1
  end
  
  #--------------------------------------------------------------------------
  # ● Update Arrow
  #--------------------------------------------------------------------------            
  def update_arrow
    #  update_arrow_type
      update_arrow_visible
      update_arrow_float_animation
  end
   
  #--------------------------------------------------------------------------
  # ● Update Arrow Type
  #--------------------------------------------------------------------------               
  def update_arrow_type
      if @arrow_time_1 > 0
         @arrow_time_1 -= 1
         refresh_arrow(0,@arrow_1,0) if @arrow_time_1 == 0
      end   
      if @arrow_time_2 > 0
         @arrow_time_2 -= 1
         refresh_arrow(1,@arrow_2,0) if @arrow_time_2 == 0
      end         
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Arrow Type
  #--------------------------------------------------------------------------                 
  def refresh_arrow_type
      return
      if @index_old > @com_index
         refresh_arrow(0,@arrow_1,1)
      else  
         refresh_arrow(1,@arrow_2,1)
      end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Arrow Visible
  #--------------------------------------------------------------------------              
  def update_arrow_visible
      if can_arrow_visible?
        @arrow_1.opacity += 15
        @arrow_2.opacity += 15
        @arrow_np_1 = [@org_pos_arrow_1[0],@org_pos_arrow_1[1]]
        @arrow_np_2 = [@org_pos_arrow_2[0],@org_pos_arrow_2[1]]
      else  
        @arrow_1.opacity -= 10
        @arrow_2.opacity -= 10
        @arrow_np_1 = [-@arrow_cw,@org_pos[1]]
        @arrow_np_2 = [-@arrow_cw + @arrow_2.ox,@org_pos[1] + @arrow_2.oy]        
      end  
  
  end
  
#--------------------------------------------------------------------------
# ● Update Slide Arrow
#--------------------------------------------------------------------------                       
  def update_slide_arrow(type,sprite,cp,np)
      cp -= @arrow_float[1] if type == 1
      sp = 2 + ((cp - np).abs / 20)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp + @arrow_float[1] if type == 1
  end      
  
  #--------------------------------------------------------------------------
  # ● Can Arrow Visiblle?
  #--------------------------------------------------------------------------               
  def can_arrow_visible?
      return false if !@active
      return false if all_targets
      return false if $game_party.members.size < 2
      return  true
  end
  
  #--------------------------------------------------------------------------
  # ● Update Arrow Float Animation
  #--------------------------------------------------------------------------               
  def update_arrow_float_animation
      @arrow_float[2] += 1
      if @arrow_float[2] > 2
         @arrow_float[2] = 0
         @arrow_float[0] += 1
         case @arrow_float[0]
            when 1..11
              @arrow_float[1] += 1
            when 12..22
              @arrow_float[1] -= 1
            else  
              @arrow_float[0] = 0
              @arrow_float[1] = 0
         end  
      end
    update_slide_arrow(0,@arrow_1,@arrow_1.x,@arrow_np_1[0])
    update_slide_arrow(1,@arrow_1,@arrow_1.y,@arrow_np_1[1])
    update_slide_arrow(0,@arrow_2,@arrow_2.x,@arrow_np_2[0])
    update_slide_arrow(1,@arrow_2,@arrow_2.y,@arrow_np_2[1])   
  end
      
  #--------------------------------------------------------------------------
  # ● Create Scope All
  #--------------------------------------------------------------------------      
  def update_support
      update_scope
      update_arrow
  end
  
  #--------------------------------------------------------------------------
  # ● Set Old Parameter
  #--------------------------------------------------------------------------  
  def set_old_parameter
      @par.clear
      @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.level]
  end   
  
  #--------------------------------------------------------------------------
  # ● Members Spate
  #--------------------------------------------------------------------------   
  def members_space
      LAYOUT_POSITION[1] + (@index * MEMBERS_SPACE)
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_parameter
      dispose_face
      dispose_name
      dispose_hp_meter
      dispose_mp_meter
      dispose_support if @index == 0
  end

  #--------------------------------------------------------------------------
  # ● Dispose Support
  #--------------------------------------------------------------------------   
  def dispose_support
      dispose_scope
      dispose_arrow
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      @layout.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Scope
  #--------------------------------------------------------------------------         
  def dispose_scope
      @scope.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose_Arrow
  #--------------------------------------------------------------------------            
  def dispose_arrow
      @arrow_1.bitmap.dispose
      @arrow_1.dispose
      @arrow_2.bitmap.dispose
      @arrow_2.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------      
  def dispose_parameter
      @parameter.bitmap.dispose
      @parameter.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------   
  def dispose_face
      @face.dispose
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Meter
  #--------------------------------------------------------------------------      
  def dispose_hp_meter
      @hp_meter.bitmap.dispose
      @hp_meter.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose MP Meter
  #--------------------------------------------------------------------------      
  def dispose_mp_meter
      @mp_meter.bitmap.dispose
      @mp_meter.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      @name.bitmap.dispose
      @name.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = Cache.menu("Actor_Layout_1")
      @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]]
      @layout.x = @org_pos[0]
      @layout.y = @org_pos[1]
      @layout.z = 10
      #@layout.opacity = 0
  end

  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------
  def create_parameter
      @parameter = Sprite.new
      @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height)
      @org_pos_par = [@org_pos[0] + PAR_POSITION[0],
                      @org_pos[1] + PAR_POSITION[1]]
      @parameter.x = @org_pos_par[0]
      @parameter.y = @org_pos_par[1]
      @parameter.z = 12
#      @parameter.opacity = 0
      refresh_parameter
  end  
  
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------  
  def create_hp_meter
      @hp_meter_old = [-1,-1]
      @hp_meter = Sprite.new
      @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @org_pos_hp = [@org_pos[0] + HP_METER_POSITION[0],
                     @org_pos[1] + HP_METER_POSITION[1]]      
      @hp_meter.x = @org_pos_hp[0]
      @hp_meter.y = @org_pos_hp[1]
      @hp_meter.z = 11
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh HP Meter
  #--------------------------------------------------------------------------   
  def refresh_hp_meter
      @hp_meter_old[0] = @actor.hp
      @hp_meter_old[1] = @actor.mhp
      @hp_meter.bitmap.clear
      width_range = @meter_cw * @actor.hp / @actor.mhp
      m_rect = Rect.new(0,0,width_range,@meter_ch)
      @hp_meter.bitmap.blt(0,0,@meter_image,m_rect)
  end
  
  #--------------------------------------------------------------------------
  # ● Create MP Meter
  #--------------------------------------------------------------------------  
  def create_mp_meter
      @mp_meter_old = [-1,-1]
      @mp_meter = Sprite.new
      @mp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @org_pos_mp = [@org_pos[0] + MP_METER_POSITION[0],
                     @org_pos[1] + MP_METER_POSITION[1]]      
      @mp_meter.x = @org_pos_mp[0]
      @mp_meter.y = @org_pos_mp[1]
      @mp_meter.z = 11
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh MP Meter
  #--------------------------------------------------------------------------   
  def refresh_mp_meter
      @mp_meter_old[0] = @actor.mp
      @mp_meter_old[1] = @actor.mmp
      @mp_meter.bitmap.clear
      width_range = @meter_cw * @actor.mp / @actor.mmp rescue nil
      width_range = 0 if width_range == nil
      m_rect = Rect.new(0,@meter_ch,width_range,@meter_ch)
      @mp_meter.bitmap.blt(0,0,@meter_image,m_rect)
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------   
  def refresh_parameter
      set_old_parameter   
      @parameter.bitmap.clear
      
      value = @actor.level
      x = 146
      y = 8
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
     
      value = @actor.hp
      x = 72
      y = 24
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
  
      value = @actor.mp
      x = 146
      y = 24
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------     
  def refresh_number(sprite,image,value,number_cw,number_ch,x,y)
      number = value.abs.to_s.split(//)
      x2 = -number_cw * number.size
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          sprite.bitmap.blt(x + x2 + (number_cw  *  i), y, image, nsrc_rect)        
      end      
      
  end

  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------  
  def create_face
      @face = Sprite.new
      @org_pos_face = [@org_pos[0] + FACE_POSITION[0],
                       @org_pos[1] + FACE_POSITION[1]]
      @face.x = @org_pos_face[0]
      @face.y = @org_pos_face[1]
      @face.z = 11
   #   @face.opacity = 0
      refresh_face
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------   
  def refresh_face
      face_name = "Face_B" + @actor.id.to_s
      @face.bitmap = Cache.menu(face_name.to_s)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------   
  def create_name
      @name = Sprite.new
      @name.bitmap = Bitmap.new(140,32)
      @name.bitmap.font.size = FONT_SIZE
      @name.bitmap.font.bold = FONT_BOLD
      @org_pos_name = [@org_pos[0] + NAME_POSITION[0],
                       @org_pos[1] + NAME_POSITION[1]]
      @name.x = @org_pos_name[0]
      @name.y = @org_pos_name[1]
      @name.z = 11
      refresh_name     
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------      
  def refresh_name
      @name.bitmap.clear
      @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0)
  end  
  
  #--------------------------------------------------------------------------
  # ● Set Actor
  #--------------------------------------------------------------------------        
  def set_actor(actor)
      @actor = actor
  end
  
  #--------------------------------------------------------------------------
  # ● Can Refresh HP Meter
  #--------------------------------------------------------------------------         
  def can_refresh_hp_meter?
      return true if @hp_meter_old[0] != @actor.hp
      return true if @hp_meter_old[1] != @actor.mhp
      return false
  end
     
  #--------------------------------------------------------------------------
  # ● Can Refresh MP Meter
  #--------------------------------------------------------------------------         
  def can_refresh_mp_meter?
      return true if @mp_meter_old[0] != @actor.mp
      return true if @mp_meter_old[1] != @actor.mmp
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Parameter
  #--------------------------------------------------------------------------
  def can_refresh_parameter?
      return true if @par[0] != @actor.hp
      return true if @par[1] != @actor.mhp
      return true if @par[2] != @actor.mp
      return true if @par[3] != @actor.mmp
      return true if @par[4] != @actor.level
      return false
  end   
  
  #--------------------------------------------------------------------------
  # ● Refresh_Visible
  #--------------------------------------------------------------------------   
  def refresh_visible
      if can_visible?
         set_visible(true)
      else  
         set_visible(false)
      end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Set Index
  #--------------------------------------------------------------------------     
  def set_index
      @now_index[0] = @com_index
      @before_index[0] = @com_index - 1
      @next_index[0] = @com_index + 1
      @before_index[0] = @max_index if @before_index[0] < 0
      @next_index[0] = 0 if @next_index[0] > @max_index   
  end
      
  #--------------------------------------------------------------------------
  # ● Can Visible?
  #--------------------------------------------------------------------------     
  def can_visible?
      return true if @index == @now_index[0]
      return true if @index == @next_index[0]
      return true if @index == @before_index[0]
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Set Visible
  #--------------------------------------------------------------------------     
  def set_visible(value)
      @visible = value
      return
      @layout.visible = @visible
      @parameter.visible = @visible
      @hp_meter.visible = @visible
      @mp_meter.visible = @visible
      @face.visible = @visible
      @name.visible = @visible
  end
  
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------      
  def update_position
      update_slide(0,@layout,@layout.x,@next_pos[0] + @org_pos[0])
      update_slide(1,@layout,@layout.y,@next_pos[1] + @org_pos[1])
      update_slide(0,@parameter,@parameter.x,@next_pos[0] + @org_pos_par[0])
      update_slide(1,@parameter,@parameter.y,@next_pos[1] + @org_pos_par[1])
      update_slide(0,@hp_meter,@hp_meter.x,@next_pos[0] + @org_pos_hp[0])
      update_slide(1,@hp_meter,@hp_meter.y,@next_pos[1] + @org_pos_hp[1])  
      update_slide(0,@mp_meter,@mp_meter.x,@next_pos[0] + @org_pos_mp[0])
      update_slide(1,@mp_meter,@mp_meter.y,@next_pos[1] + @org_pos_mp[1])        
      update_slide(0,@face,@face.x,@next_pos[0] + @org_pos_face[0])
      update_slide(1,@face,@face.y,@next_pos[1] + @org_pos_face[1])        
      update_slide(0,@name,@name.x,@next_pos[0] + @org_pos_name[0])
      update_slide(1,@name,@name.y,@next_pos[1] + @org_pos_name[1])      
  end

  #--------------------------------------------------------------------------
  # ● Update Float
  #--------------------------------------------------------------------------         
  def update_float
      @float[2] += 1
      if @float[2] > 5
         @float[2] = 0
         @float[0] += 1
         case @float[0]         
              when 1..5
                  @float[1] -= 1  
              when 6..15
                  @float[1] += 1
              when 16..20
                  @float[1] -= 1
              else
                 @float = [0,0,0]
          end
       end
  end
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,cp,np)
      cp -= @float[1] if type == 1
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp + @float[1] if type == 1
  end   
  
  #--------------------------------------------------------------------------
  # ● All Targets
  #--------------------------------------------------------------------------                        
  def all_targets
      return true if $game_temp.item_scope == 8
      return true if $game_temp.item_scope == 10
      return false
  end  
   
  #--------------------------------------------------------------------------
  # ● Update Opacity
  #--------------------------------------------------------------------------  
  def update_opacity
      if @visible
         if all_targets
            if @max_index == 0
               @next_pos = [0,0]
            else   
               if @index == @before_index[0]
                  @next_pos = [0,-MEMBERS_SPACE]
               elsif @index == @next_index[0]
                  @next_pos = [0,MEMBERS_SPACE]
               else  
                  @next_pos = [0,0]
               end      
            end            
            update_opacity_active
            update_float
         else  
             if ((@index == @before_index[0]) or (@index == @next_index[0])) and
                  @max_index != 0
                  opac_limit = 170
                  if @opac > opac_limit
                     @opac -= 10
                     @opac = opac_limit if @opac < opac_limit
                  elsif @opac < opac_limit
                     @opac += 10
                     @opac = opac_limit if @opac > opac_limit
                  end   
                  @float = [0,0,0]
             else  
                 update_opacity_active
                 update_float
             end  
         end   
      else
          @opac -= 10 if @opac > 0
          @opac = 0 if @opac < 0
          @float = [0,0,0]
      end
      set_opacity(@opac)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Opacity Active
  #--------------------------------------------------------------------------   
  def update_opacity_active
      @opac_active[0] += 1
      case @opac_active[0]
         when 1..30
            @opac_active[1] +=  4
         when 31..60           
            @opac_active[1] -=  4
         else
           @opac_active[1] = 0
           @opac_active[0] = 0
      end
      @opac = 160 + @opac_active[1]
  end         
            
  #--------------------------------------------------------------------------
  # ● Set Opacity
  #--------------------------------------------------------------------------   
  def set_opacity(opac)
      @layout.opacity = opac
      @layout.opacity = opac
      @parameter.opacity = opac
      @parameter.opacity = opac
      @hp_meter.opacity = opac
      @hp_meter.opacity = opac
      @mp_meter.opacity = opac
      @mp_meter.opacity = opac
      @face.opacity = opac
      @face.opacity = opac
      @name.opacity = opac
      @name.opacity = opac
  end   
      
  #--------------------------------------------------------------------------
  # ● Refresh Index
  #--------------------------------------------------------------------------   
  def refresh_index
      refresh_arrow_type if @index == 0
      @index_old = @com_index
      set_index
      refresh_visible
      set_next_position
  end
  
  #--------------------------------------------------------------------------
  # ● Set Next Position
  #--------------------------------------------------------------------------      
  def set_next_position
      if @max_index == 0
         @next_pos = [0,0]
         return
      end  
      if @visible
      if @index == @before_index[0]
         @next_pos = [-32,-MEMBERS_SPACE]
         if @layout.opacity < 150
            set_position(@next_pos[0],-MEMBERS_SPACE * 2)
            set_opacity(0)
         end   
      elsif @index == @next_index[0]
         @next_pos = [-32,MEMBERS_SPACE]
         if @layout.opacity < 150  
            set_position(@next_pos[0],MEMBERS_SPACE * 2)
            set_opacity(0)
         end   
      else  
         @next_pos = [0,0]
      end   
      else
         @next_pos = [-64,0]
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------      
  def set_position(pos_x,pos_y)
      @layout.x = @org_pos[0] + pos_x
      @layout.y = @org_pos[1] + pos_y
      @parameter.x = @org_pos_par[0] + pos_x
      @parameter.y = @org_pos_par[1] + pos_y
      @hp_meter.x = @org_pos_hp[0] + pos_x
      @hp_meter.y = @org_pos_hp[1] + pos_y
      @mp_meter.x = @org_pos_mp[0] + pos_x
      @mp_meter.y = @org_pos_mp[1] + pos_y
      @face.x = @org_pos_face[0] + pos_x
      @face.y = @org_pos_face[1] + pos_y
      @name.x = @org_pos_name[0] + pos_x
      @name.y = @org_pos_name[1] + pos_y
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Active
  #--------------------------------------------------------------------------         
  def refresh_active
      @active_old = @active
      @visible = @active
      refresh_index
      if !@active
         @visible = @active
         @next_pos = [[email protected] - 64,0]
      else   
         set_position([email protected] - 64,0)
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update(active,com_index)
      @active = active
      @com_index = com_index
      refresh_active if @active != @active_old
      update_opacity
      update_position
      update_support if @index == 0
      return if !@active
      refresh_index if @index_old != @com_index
      return if !@active or !@visible
      refresh_hp_meter if can_refresh_hp_meter?
      refresh_mp_meter if can_refresh_mp_meter?
      refresh_parameter if can_refresh_parameter?
  end
  
  #--------------------------------------------------------------------------
  # ● Current Actor
  #--------------------------------------------------------------------------   
  def current_actor
      return true if @com_index == @index
      return false
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Actor
  #--------------------------------------------------------------------------  
  def execute_pre_cache_actor
      @pre_cache_actor_menu = []
      @pre_cache_actor_menu.push(Cache.menu("Actor_Layout_1"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Layout_2"))      
      @pre_cache_actor_menu.push(Cache.menu("Actor_Number_1"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Number_2"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Scope_All"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Members_Arrow"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Meter"))
  end
   
end

#==============================================================================
# ■ Actor Menu Status
#==============================================================================
class Actor_Menu_Status
  
  include MOG_ACTOR_MENU_STATUS
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      @actor = actor
      @active = false
      set_old_parameter
      create_sprites
  end

  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------  
  def create_sprites
      @parameter_number = $game_temp.pre_cache_actor_menu[3]
      @parameter_cw = @parameter_number.width / 10
      @parameter_ch = @parameter_number.height   
      create_layout
      create_face
      create_parameter
      create_name
      create_states  
  #    update(true,@actor)
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_face
      dispose_parameter
      dispose_name
      dispose_states
  end

  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      @layout.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------   
  def dispose_face
      @face.bitmap.dispose if @face.bitmap != nil
      @face.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------      
  def dispose_parameter
      @parameter.bitmap.dispose
      @parameter.dispose
  end

  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      @name.bitmap.dispose
      @name.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose States
  #--------------------------------------------------------------------------            
   def dispose_states
       return if @status == nil
       @status.bitmap.dispose
       @status.dispose
       if @actor_status != nil
          @actor_status.dispose
          @actor_status = nil
       end   
   end   
  
  #--------------------------------------------------------------------------
  # ● Set Old Parameter
  #--------------------------------------------------------------------------  
  def set_old_parameter
      @par = [] if @par == nil
      @par.clear
      @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.atk,@actor.def,
              @actor.mat,@actor.mdf,@actor.agi,@actor.luk,@actor.level,@actor.tp]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_actor_menu[1]
      @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]]
      @layout.x = @org_pos[0] + 150
      @layout.y = @org_pos[1]
      @layout.z = 10
      @layout.opacity = 0
  end

  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------
  def create_parameter
      @parameter = Sprite.new
      @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height)
      @org_pos_par = [@org_pos[0] + PAR_POSITION[0],
                      @org_pos[1] + PAR_POSITION[1]]
      @parameter.x = @org_pos_par[0] + 150
      @parameter.y = @org_pos_par[1]
      @parameter.z = 11
      @parameter.opacity = 0
      refresh_parameter
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------  
  def create_face
      @face = Sprite.new
      @face.bitmap = Bitmap.new(96,96)
      @org_pos_face = [@org_pos[0] + FACE_POSITION[0],
                       @org_pos[1] + FACE_POSITION[1]]
      @face.x = @org_pos_face[0] + 150
      @face.y = @org_pos_face[1]
      @face.z = 11
      @face.opacity = 0
      refresh_face
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------   
  def create_name
      @name = Sprite.new
      @name.bitmap = Bitmap.new(140,32)
      @name.bitmap.font.size = FONT_SIZE
      @name.bitmap.font.bold = FONT_BOLD
      @org_pos_name = [@org_pos[0] + NAME_POSITION[0],
                       @org_pos[1] + NAME_POSITION[1]]
      @name.x = @org_pos_name[0] + 150
      @name.y = @org_pos_name[1]
      @name.z = 11
      @name.opacity = 0
      refresh_name     
  end  
  
  #--------------------------------------------------------------------------
  # ● Create_States
  #--------------------------------------------------------------------------      
  def create_states
      @status_old = nil
      @status_flow = [-24,0]   
      @status = Sprite.new
      @status.bitmap = Bitmap.new(24,24)
      @org_pos_states = [@org_pos[0] + STATES_POSITION[0],
                         @org_pos[1] + STATES_POSITION[1]]      
      @status.x = @org_pos_states[0] + 150
      @status.y = @org_pos_states[1]
      @status.z = 11
  end      

  #--------------------------------------------------------------------------
  # * Refresh States
  #--------------------------------------------------------------------------        
  def refresh_states
      check_icon_image
      @status_old = @actor.states
      @status_flow = [0,0]
      @actor_status.dispose if @actor_status != nil
      @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24
      @actor_status = Bitmap.new(@states_size,24)
      index = 0
      for i in @actor.states
         rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24)
         @actor_status.blt(26 * index , 0, @icon_image, rect)
         index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # * Flow_Status
  #--------------------------------------------------------------------------         
  def flow_states
      return if @actor_status == nil
      @status.bitmap.clear
      return if @actor.states.size == 0
      st_src_rect = Rect.new(@status_flow[0],0, 24,24)
      @status.bitmap.blt(0,0, @actor_status, st_src_rect)
      if STATES_SCROLLING_ANIMATION
         @status_flow[0] += 1
         @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2
      else   
         @status_flow[1] += 1 unless @actor.states.size <= 1
         if @status_flow[1] > 30
            @status_flow[1] = 0
            @status_flow[0] += 26
            @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0)
         end   
     end   
  end        
  
  #--------------------------------------------------------------------------
  # * Check Icon Image
  #--------------------------------------------------------------------------         
  def check_icon_image
      if @icon_image == nil or @icon_image.disposed?
         @icon_image = Cache.system("Iconset")
      end   
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Parameter
  #--------------------------------------------------------------------------
  def can_refresh_parameter?
      return false if !@active
      return true if @par[0] != @actor.hp
      return true if @par[1] != @actor.mhp
      return true if @par[2] != @actor.mp
      return true if @par[3] != @actor.mmp
      return true if @par[4] != @actor.atk
      return true if @par[5] != @actor.def
      return true if @par[6] != @actor.mat
      return true if @par[7] != @actor.mdf
      return true if @par[8] != @actor.agi
      return true if @par[9] != @actor.luk
      return true if @par[10] != @actor.level
      return true if @par[11] != @actor.tp
      return false
  end  

  #--------------------------------------------------------------------------
  # ● Refresh All
  #--------------------------------------------------------------------------  
  def refresh_all(actor)      
      @actor = actor
      refresh_parameter
      refresh_face
      refresh_name
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------      
  def refresh_name   
      @name.bitmap.clear
      @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------   
  def refresh_parameter
      set_old_parameter
      @parameter.bitmap.clear      
      value = @actor.level
      x = 67
      y = 24
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.tp
      x = 140
      y = 24
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.hp
      x = 70
      y = 46
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
   
      value = @actor.mhp
      x = 140
      y = 46
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.mp
      x = 70
      y = 46 + 22 * 1
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)

      value = @actor.mmp
      x = 140
      y = 46 + 22 * 1
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
  
      value = @actor.atk
      x = 70
      y = 46 + 22 * 2
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.def
      x = 70
      y = 46 + 22 * 3
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.agi
      x = 70
      y = 46 + 22 * 4
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.mat
      x = 140
      y = 46 + 22 * 2
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.mdf
      x = 140
      y = 46 + 22 * 3
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.luk
      x = 140
      y = 46 + 22 * 4
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
  end
   
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------     
  def refresh_number(sprite,image,value,number_cw,number_ch,x,y)
      number = value.truncate.abs.to_s.split(//)
      x2 = -number_cw * number.size
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          sprite.bitmap.blt(x + x2 + (number_cw  *  i), y, image, nsrc_rect)        
      end      
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------  
  def refresh_face
      #return
      @face.bitmap.clear
      face_image = Cache.face(@actor.face_name)
      arect = Rect.new(@actor.face_index  % 4 * 96, @actor.face_index / 4 * 96, 96, 96)
      @face.bitmap.blt(0,0, face_image, arect)
     # face_image.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Update Slide
  #--------------------------------------------------------------------------  
  def update_slide
      slide_speed = 10
      opac_speed = 23
      @slide_range = (@org_pos[0] + 150)
      if @active
         if @layout.x > @org_pos[0]
            @layout.x -= slide_speed
            @parameter.x -= slide_speed
            @face.x -= slide_speed
            @name.x -= slide_speed
            @status.x -= slide_speed
            @layout.opacity += opac_speed
            @parameter.opacity += opac_speed
            @face.opacity += opac_speed
            @name.opacity += opac_speed
            @status.opacity += opac_speed
            if @layout.x <= @org_pos[0]
               @layout.x = @org_pos[0]
               @parameter.x = @org_pos_par[0]
               @face.x = @org_pos_face[0]
               @name.x = @org_pos_name[0]
               @status.x = @org_pos_states[0]
               @layout.opacity = 255
               @parameter.opacity = 255
               @face.opacity = 255
               @name.opacity = 255  
               @status.opacity = 255
            end  
         end   
      else
         if @layout.x <  @slide_range
            @layout.x += slide_speed
            @parameter.x += slide_speed
            @face.x += slide_speed
            @name.x += slide_speed
            @status.x += slide_speed
            @layout.opacity -= opac_speed
            @parameter.opacity -= opac_speed
            @face.opacity -= opac_speed
            @name.opacity -= opac_speed
            @status.opacity -= opac_speed
            if @layout.x >=  @slide_range
               @layout.x =  @slide_range
               @parameter.x = @org_pos_par[0] + 150
               @face.x = @org_pos_face[0] + 150
               @name.x = @org_pos_name[0] + 150
               @status.x = @org_pos_states[0] + 150
               @layout.opacity = 0
               @parameter.opacity = 0
               @face.opacity = 0
               @name.opacity = 0   
               @status.opacity = 0   
            end  
         end   
         
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update(active,actor)
      @active = active
      update_slide
      return if !@active
      refresh_all(actor) if actor != @actor
      refresh_parameter if can_refresh_parameter?
      refresh_states if @status_old != @actor.states      
      flow_states
  end      
  
end



#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Main Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_main_menu
      @pre_cache_main_menu = []
      @pre_cache_main_menu.push(Cache.menu_main("Background"))
      @pre_cache_main_menu.push(Cache.menu_main("Layout"))
      @pre_cache_main_menu.push(Cache.menu_main("Time_Number"))
      @pre_cache_main_menu.push(Cache.menu_main("Gold_Number"))
      @pre_cache_main_menu.push(Cache.menu_main("Members_Layout"))
      @pre_cache_main_menu.push(Cache.menu_main("Members_Arrow"))
      @pre_cache_main_menu.push(Cache.menu_main("Par_Number_1"))
      @pre_cache_main_menu.push(Cache.menu_main("Par_Number_2"))
      @pre_cache_main_menu.push(Cache.menu_main("Par_Meter"))
      @pre_cache_main_menu.push(Cache.menu_main("Par_Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  include MOG_MENU
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      $game_temp.execute_pre_cache_icon if $game_temp.can_pre_cache_icon?
      @phase = 0
      @members_windows_active = false
      @members_index = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end  
  
end

#==============================================================================
# ■ Face Members
#==============================================================================
class Face_Members_Sprite < Sprite
  include MOG_MENU
  attr_accessor :index
  attr_accessor :active
  attr_accessor :actor_id
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil, index, actor_id)
      super(viewport)
      @active = false
      @index = index
      @actor_id = actor_id
      @active = false
      self.bitmap = Cache.menu("Face" + @actor_id.to_s)
      self.z = 12
      self.ox = self.bitmap.width / 2
      self.oy = self.bitmap.height / 2
      members_size = $game_party.members.size - 1
      members_size = 3 if members_size > 3
      space_base = (MEMBERS_FACE_SPACE * @index)
      space = space_base - ((ACTOR_SPACE * members_size ) / 2) +  MEMBERS_FACE_POSITION[0]
      @org_pos =  [space + self.ox , self.oy   ]
      @ny = 0
      @zoom_duration = [0,0,false]
      self.x = @org_pos[0]
      self.y = @org_pos[1]
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose
      super
      self.bitmap.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                     
  def update_command(index, ny)
      @active = index == @index ? true : false
      @ny = ny
      update_slide(index)
      update_opacity
      update_zoom   
  end  
   
#--------------------------------------------------------------------------
# ● Update Opacity
#--------------------------------------------------------------------------                       
  def update_opacity
      if @active
         self.opacity += 12
      else  
         self.opacity -= 6 if self.opacity > 120
      end  
  end  
  
#--------------------------------------------------------------------------
# ● Update Zoom
#--------------------------------------------------------------------------                       
  def update_zoom
      if @active
         if !@zoom_duration[2]
            update_zoom_out
            @zoom_duration = [0,0,true] if self.zoom_x == 1.00  
         else  
            update_zoom_effect
         end
      else
         @zoom_duration[2] = false   
         update_zoom_in
      end  
  end   
  
#--------------------------------------------------------------------------
# ● Update Zoom Out
#--------------------------------------------------------------------------                        
  def update_zoom_out
      return if self.zoom_x == 1.00
      self.zoom_x += 0.03
      self.zoom_y += 0.03
      if self.zoom_x >= 1.00
            self.zoom_x = 1.00
            self.zoom_y = 1.00
      end   
   end   
  
#--------------------------------------------------------------------------
# ● Update Zoom In
#--------------------------------------------------------------------------                           
  def update_zoom_in
      return if self.zoom_x == 0.80
      self.zoom_x -= 0.03
      self.zoom_y -= 0.03
      if self.zoom_x <= 0.80
         self.zoom_x = 0.80
         self.zoom_y = 0.80
      end   
  end      
         
#--------------------------------------------------------------------------
# ● Update Zoom_effect
#--------------------------------------------------------------------------                        
def update_zoom_effect
     @zoom_duration[0] += 1
     return if @zoom_duration[0] < 1
     @zoom_duration[0] = 0
     @zoom_duration[1] += 1
     case @zoom_duration[1]
          when 1..30
             self.zoom_x -= 0.005
             self.zoom_y -= 0.005                 
          when 31..60
             self.zoom_x += 0.005
             self.zoom_y += 0.005           
          when 61..999  
          @zoom_duration[1] = 0
          self.zoom_x = 1.00
          self.zoom_y = 1.00
     end
end  
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(index)
      np = @org_pos[0] - (index * MEMBERS_FACE_SPACE) + @ny
      cp = self.x
      sp = 5 + ((cp - np).abs / 5)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp      
  end  
  
#--------------------------------------------------------------------------
# ● Active
#--------------------------------------------------------------------------                        
  def active(value)
      @active = value
  end   
      
end

#==============================================================================
# ■ Members Arrow Sprite
#==============================================================================
class Members_Arrow_Sprite
   include MOG_MENU
   attr_accessor :active
   
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
  def initialize
      @active = false
      create_members_layout
      create_arrows
  end
  
#--------------------------------------------------------------------------
# ● Create Members Layout
#--------------------------------------------------------------------------  
  def create_members_layout
      @layout_members = Sprite.new
      @layout_members.bitmap = $game_temp.pre_cache_main_menu[4]
      @layout_members.z = 13
      @layout_members_pos = [MEMBERS_ARROW_LAYOUT_POSITION[0], MEMBERS_ARROW_LAYOUT_POSITION[1]]
      @layout_members.x = @layout_members_pos[0]
      @layout_members.y = @layout_members_pos[1]
      @layout_members.opacity = 0
  end
  
#--------------------------------------------------------------------------
# ● Create Arrows
#--------------------------------------------------------------------------  
  def create_arrows
      @arrow_animation_duration = [0,0]
      @arrow_1 = Sprite.new
      @arrow_1.bitmap = $game_temp.pre_cache_main_menu[5]
      @arrow_1.z = 13
      @arrow1_pos = [MEMBERS_ARROW_1_POSITION[0], MEMBERS_ARROW_1_POSITION[1]]
      @arrow_1.x = @arrow1_pos[0]
      @arrow_1.y = @arrow1_pos[1]
      @arrow_1.opacity = 0
      @arrow_2 = Sprite.new
      @arrow_2.bitmap = $game_temp.pre_cache_main_menu[5]
      @arrow_2.z = 13
      @arrow_2.mirror = true
      @arrow2_pos = [MEMBERS_ARROW_2_POSITION[0], MEMBERS_ARROW_2_POSITION[1]]
      @arrow_2.x = @arrow2_pos[0]
      @arrow_2.y = @arrow2_pos[1]
      @arrow_2.opacity = 0
      @nx = 0
      @nx2 = 0
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                              
  def dispose
      dispose_members_layout
      dispose_arrows
  end

#--------------------------------------------------------------------------
# ● Dispose Arrows
#--------------------------------------------------------------------------                                
def dispose_arrows
     return if @arrow_1 == nil
     @arrow_1.dispose
     @arrow_2.dispose
     @arrow_1 = nil
end  
  
#--------------------------------------------------------------------------
# ● Dispose Members Layout
#--------------------------------------------------------------------------   
  def dispose_members_layout
      return if @layout_members == nil
      @layout_members.dispose
      @layout_members = nil
  end

#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                              
  def update
      update_arrow_animation
      update_position
      @layout_members.opacity += 15
      @arrow_1.opacity += 15
      @arrow_2.opacity += 15
  end  
  
#--------------------------------------------------------------------------
# ● Update Position
#--------------------------------------------------------------------------                                
  def update_position
      @arrow_1.x = @arrow1_pos[0] + @nx + @nx2
      @arrow_2.x = @arrow2_pos[0] + @nx - @nx2   
      @layout_members.x = @layout_members_pos[0] + @nx
  end

#--------------------------------------------------------------------------
# ● Update Arrow Animation
#--------------------------------------------------------------------------                                
  def update_arrow_animation
      @arrow_animation_duration[0] += 1
      return if @arrow_animation_duration[0] < 2
      @arrow_animation_duration[0] = 0
      @arrow_animation_duration[1] += 1
      case @arrow_animation_duration[1]
         when 1..20
           @nx2 -= 1
         when 21..40
           @nx2 += 1
         when 41..999  
           @nx2 = 0
           @arrow_animation_duration[1] = 0            
      end
  end

#--------------------------------------------------------------------------
# ● Active
#--------------------------------------------------------------------------                        
  def nx(value)
      @nx = value
  end   
  
end

#==============================================================================
# ■ Command Menu Sprite
#==============================================================================
class Command_Menu_Sprite < Sprite
  include MOG_MENU
  attr_accessor :index
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil,index,command_name)
      super(viewport)
      @index = index
      @command_name = command_name
      self.bitmap = Cache.menu_main("CM_" + @command_name.to_s)
      @cw = self.bitmap.width
      @ch = self.bitmap.height      
      cw1 = self.bitmap.height / 2
      cw2 = (self.bitmap.width + COMMAND_SPACE) * index
      self.ox = self.bitmap.width / 2
      self.oy = self.bitmap.height / 2
      @org_pos = [COMMAND_POSITION[0] + cw2 + self.ox, COMMAND_POSITION[1] + self.oy]
      @slide_max = @org_pos[1] + cw1
      @zoom_duration = [0,0,false]
      @zoom_limit = [1.00, 1.20]
      self.x = -@cw
      self.y = -@ch
      self.z = 10
      @active = false
      @visible_old = true
      @np = [-@cw,-@ch]
      @sprite_name = Sprite.new
      @sprite_name.bitmap = Bitmap.new(100,32)
      @sprite_name.bitmap.draw_text(0,0,100,32,@command_name.to_s,0)
      @sprite_name.z = 11
      @np_name = [-@cw,-@ch]
      @cw_name_pos = [@cw - self.ox + 4, -self.oy + 4]
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose_command
      self.bitmap.dispose
      @sprite_name.bitmap.dispose
      @sprite_name.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                     
  def update_command(index, visible)
      @active = index == @index ? true : false
      refresh_active(visible) if @visible_old != visible
      update_position
      if !visible
          if @active
             self.opacity += 15
          else
             self.opacity -= 15
          end   
          return
      end  
      update_zoom
      update_opacity
  end   
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,cp,np)
      sp = 2 + ((cp - np).abs / 15)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp if type == 0
      self.y = cp if type == 1
      @sprite_name.x = cp if type == 2
      @sprite_name.y = cp if type == 3
  end
  
#--------------------------------------------------------------------------
# ● Update Position
#--------------------------------------------------------------------------  
  def update_position
      unless !@visible_old
      if @active
         @np[0] = @org_pos[0]
         @np[1] = @slide_max
      else
         @np[0] = @org_pos[0]
         @np[1] = @org_pos[1]
      end  
      end
      update_slide(0,self.x,@np[0])
      update_slide(1,self.y,@np[1])
      update_sprite_name_position
  end      

#--------------------------------------------------------------------------
# ● Update Sprite Name Position
#--------------------------------------------------------------------------  
def update_sprite_name_position
      if (@active and !@visible_old) or !@active
         @np_name[0] = self.x + @cw_name_pos[0] + COMMAND_NAME_POSITION[0]
         @np_name[1] = self.y + @cw_name_pos[1] + COMMAND_NAME_POSITION[1]
      else
         @np_name[0] = COMMAND_NAME_POSITION_2[0]
         @np_name[1] = COMMAND_NAME_POSITION_2[1]
      end
      update_slide(2,@sprite_name.x,@np_name[0])
      update_slide(3,@sprite_name.y,@np_name[1])      
      @sprite_name.visible = @active ? true : false
  end     
  
  
#--------------------------------------------------------------------------
# ● Refresh Active
#--------------------------------------------------------------------------                       
  def refresh_active(visible)
      if @active and !visible
         @np[0] = COMMAND_POSITION_2[0] + (@cw / 2)
         @np[1] = COMMAND_POSITION_2[1]  
         self.zoom_x = @zoom_limit[0]
         self.zoom_y = @zoom_limit[0]
      else
         @np[0] = @org_pos[0]
         @np[1] = @org_pos[1]     
      end
      @visible_old = visible
  end
  
#--------------------------------------------------------------------------
# ● Update Opacity
#--------------------------------------------------------------------------  
  def update_opacity
      if @active
         self.opacity += 15
      else
         self.opacity -= 15 if self.opacity > 160
         if self.opacity < 160
            self.opacity += 15
            self.opacity = 160 if self.opacity > 160
         end   
      end   
  end  
  
#--------------------------------------------------------------------------
# ● Update Zoom
#--------------------------------------------------------------------------                       
  def update_zoom
      if @active
         if !@zoom_duration[2]
            update_zoom_out
            @zoom_duration = [0,0,true] if self.zoom_x == @zoom_limit[1]
         else  
            update_zoom_effect
         end
      else
         @zoom_duration[2] = false   
         update_zoom_in
      end  
  end   
  
#--------------------------------------------------------------------------
# ● Update Zoom Out
#--------------------------------------------------------------------------                        
  def update_zoom_out
      return if self.zoom_x == @zoom_limit[1]
      self.zoom_x += 0.03
      self.zoom_y += 0.03
      if self.zoom_x >= @zoom_limit[1]
            self.zoom_x = @zoom_limit[1]
            self.zoom_y = @zoom_limit[1]
      end   
   end   
  
#--------------------------------------------------------------------------
# ● Update Zoom In
#--------------------------------------------------------------------------                           
  def update_zoom_in
      return if self.zoom_x == @zoom_limit[0]
      self.zoom_x -= 0.03
      self.zoom_y -= 0.03
      if self.zoom_x <= @zoom_limit[0]
         self.zoom_x = @zoom_limit[0]
         self.zoom_y = @zoom_limit[0]
      end   
  end      
         
#--------------------------------------------------------------------------
# ● Update Zoom_effect
#--------------------------------------------------------------------------                        
def update_zoom_effect
     @zoom_duration[0] += 1
     return if @zoom_duration[0] < 1
     @zoom_duration[0] = 0
     @zoom_duration[1] += 1
     case @zoom_duration[1]
          when 1..30
             self.zoom_x -= 0.005
             self.zoom_y -= 0.005                 
          when 31..60
             self.zoom_x += 0.005
             self.zoom_y += 0.005           
          when 61..999  
          @zoom_duration[1] = 0
          self.zoom_x = @zoom_limit[1]
          self.zoom_y = @zoom_limit[1]
     end
end   
  
end

#==============================================================================
# ■ Actor Menu Pictures
#==============================================================================
class Actor_Menu_Pictures < Sprite
  include MOG_MENU
  attr_accessor :index
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil,index,actor_id)
      super(viewport)
      @index = index
      @actor_id = actor_id
      self.bitmap = Cache.menu("Actor" + @actor_id.to_s)
      self.z = 2
      set_position
      @slide_max = @org_pos[0] + 24
      auto_y = Graphics.height - self.bitmap.height
      self.ox = self.bitmap.width / 2
      self.x = @org_pos[0] - 15
      self.y = auto_y
      self.opacity = 0
      @op_time = 10 * @index
  end  
  
#--------------------------------------------------------------------------
# ● Set Position
#--------------------------------------------------------------------------  
  def set_position
      members_size = $game_party.members.size
      members_size = $game_party.max_battle_members if members_size > $game_party.max_battle_members
      space_members = ((Graphics.width ) / members_size)
      space_members_2 = (space_members * @index)
      space_members_3 = ((space_members / 2) * (members_size - 1))
      center = Graphics.width / 2
      space = center + space_members_2 - space_members_3
      @org_pos =  [space, ACTOR_POSITION[1]]   
  end
      
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose_picture
      self.bitmap.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update Picture
#--------------------------------------------------------------------------  
  def update_picture
      @op_time -= 1 if @op_time > 0
      return if @op_time > 0
      self.opacity += 15
      self.x += 1 if self.x < @org_pos[0]
  end
  
end

#==============================================================================
# ■ Actor Menu Parameter
#==============================================================================
class Actor_Menu_Parameter
  
  include MOG_MENU
  attr_accessor :index
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------                     
  def initialize(index, actor)
      setup(index, actor)
      create_layout_par
      create_hp_number
      create_hp2_number
      create_mp_number
      create_mp2_number
      create_hp_meter
      create_mp_meter
      create_level
      create_states
      create_name
  end
  
  #--------------------------------------------------------------------------
  # ● Setup
  #--------------------------------------------------------------------------                       
  def setup(index, actor)
      @actor = actor
      @index = index
      set_position
      @number_image_1 = $game_temp.pre_cache_main_menu[6]
      @number_image_1_cw = @number_image_1.width / 10
      @number_image_1_ch = @number_image_1.height / 3
      @number_image_2 = $game_temp.pre_cache_main_menu[7]
      @number_image_2_cw = @number_image_2.width / 10
      @number_image_2_ch = @number_image_2.height
      @par_meter_image = $game_temp.pre_cache_main_menu[8]
      @par_meter_cw = @par_meter_image.width / 3
      @par_meter_ch = @par_meter_image.height / 2
      @par_meter_flow = 0
      @par_meter_flow_max = @par_meter_image.width - @par_meter_cw
      @icon_image = $game_temp.pre_cache_icon
  end

  #--------------------------------------------------------------------------
  # ● Set Position
  #--------------------------------------------------------------------------                       
  def set_position
      members_size = $game_party.members.size
      members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members
      space_members = ((Graphics.width ) / members_size)
      space_members_2 = (space_members * @index)
      space_members_3 = ((space_members / 2) * (members_size - 1))
      center = Graphics.width / 2
      layout_ox = $game_temp.pre_cache_main_menu[9].width / 2
      @base_x = center - layout_ox + space_members_2 - space_members_3  
  end
      
  #--------------------------------------------------------------------------
  # ● Create Layout Par
  #--------------------------------------------------------------------------                       
  def create_layout_par
      @layout_par = Sprite.new
      @layout_par.bitmap = $game_temp.pre_cache_main_menu[9]
      @layout_par.z = 10
      @layout_par.x = @base_x + ACTOR_LAYOUT_POSITON[0]      
      @layout_par.y = ACTOR_LAYOUT_POSITON[1]
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------  
  def create_name
      @actor_name = Sprite.new
      @actor_name.bitmap = Bitmap.new(160,32)
      @actor_name.bitmap.font.size = 18
      @actor_name.bitmap.font.bold = true
      @actor_name.bitmap.font.italic = true
      actor_name = @actor.name
      @actor_name.bitmap.font.color = Color.new(0,0,0)
      @actor_name.bitmap.draw_text(1,1,140,32,actor_name,1)
      @actor_name.bitmap.font.color = Color.new(255 ,255,255)
      @actor_name.bitmap.draw_text(0,0,140,32,actor_name,1)
      @actor_name.z = 12
      @actor_name.x = @base_x - 20
      @actor_name.y = 250
  end
  
  #--------------------------------------------------------------------------
  # ● Create HP Number
  #--------------------------------------------------------------------------  
  def create_hp_number
      @hp_number = Sprite.new
      @hp_number.bitmap = Bitmap.new(@number_image_1_cw * 4,@number_image_1_ch)
      @hp_number.z = 12
      @hp_number.x = @base_x + ACTOR_HP1_POSITON[0]
      @hp_number.y =  ACTOR_HP1_POSITON[1]
      refresh_hp
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh HP
  #--------------------------------------------------------------------------   
  def refresh_hp
      @hp_number.bitmap.clear
      number = @actor.hp.abs.to_s.split(//)
      number_cw = @number_image_1_cw
      number_ch = @number_image_1_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          @hp_number.bitmap.blt(number_cw  *  i, 0, @number_image_1, nsrc_rect)        
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Create HP2 Number
  #--------------------------------------------------------------------------  
  def create_hp2_number
      @hp2_number = Sprite.new
      @hp2_number.bitmap = Bitmap.new(@number_image_2_cw * 4,@number_image_2_ch)
      @hp2_number.z = 12
      @hp2_number.x = @base_x + ACTOR_HP2_POSITON[0]
      @hp2_number.y =  ACTOR_HP2_POSITON[1]
      refresh_hp2
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh HP2
  #--------------------------------------------------------------------------   
  def refresh_hp2
      @hp2_number.bitmap.clear
      number = @actor.mhp.abs.to_s.split(//)
      number_cw = @number_image_2_cw
      number_ch = @number_image_2_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          @hp2_number.bitmap.blt(number_cw  *  i, 0, @number_image_2, nsrc_rect)        
      end
  end  
  
  #--------------------------------------------------------------------------
  # ● Create MP Number
  #--------------------------------------------------------------------------  
  def create_mp_number
      @mp_number = Sprite.new
      @mp_number.bitmap = Bitmap.new(@number_image_1_cw * 4,@number_image_1_ch)
      @mp_number.z = 12
      @mp_number.x = @base_x + ACTOR_MP1_POSITON[0]
      @mp_number.y =  ACTOR_MP1_POSITON[1]
      refresh_mp
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh MP
  #--------------------------------------------------------------------------   
  def refresh_mp
      @mp_number.bitmap.clear
      number = @actor.mp.abs.to_s.split(//)
      number_cw = @number_image_1_cw
      number_ch = @number_image_1_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          @mp_number.bitmap.blt(number_cw  *  i, 0, @number_image_1, nsrc_rect)        
      end
    end
   
  #--------------------------------------------------------------------------
  # ● Create MP2 Number
  #--------------------------------------------------------------------------  
  def create_mp2_number
      @mp2_number = Sprite.new
      @mp2_number.bitmap = Bitmap.new(@number_image_2_cw * 4,@number_image_2_ch)
      @mp2_number.z = 12
      @mp2_number.x = @base_x + ACTOR_MP2_POSITON[0]
      @mp2_number.y =  ACTOR_MP2_POSITON[1]
      refresh_mp2
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh MP2
  #--------------------------------------------------------------------------   
  def refresh_mp2
      @mp2_number.bitmap.clear
      number = @actor.mmp.abs.to_s.split(//)
      number_cw = @number_image_2_cw
      number_ch = @number_image_2_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          @mp2_number.bitmap.blt(number_cw  *  i, 0, @number_image_2, nsrc_rect)        
      end
  end      
   
  #--------------------------------------------------------------------------
  # ● Create Level
  #--------------------------------------------------------------------------      
  def create_level
      @level = Sprite.new
      @level.bitmap = Bitmap.new(@number_image_1_cw * 2, @number_image_1_ch)
      @level.z = 12
      @level.x = @base_x + ACTOR_LEVEL_POSITON[0]
      @level.y = ACTOR_LEVEL_POSITON[1]
      refresh_level
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Level
  #--------------------------------------------------------------------------        
  def refresh_level
      @level.bitmap.clear
      number = @actor.level.abs.to_s.split(//)
      number_cw = @number_image_1_cw
      number_ch = @number_image_1_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, number_ch * 2, number_cw , number_ch)
          @level.bitmap.blt(number_cw  *  i, 0, @number_image_1, nsrc_rect)        
      end      
  end  
  
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------      
  def create_hp_meter
      @hp_meter = Sprite.new
      @hp_meter.bitmap = Bitmap.new(@par_meter_cw,@par_meter_ch)
      @hp_meter.z = 11
      @hp_meter.x = @base_x + ACTOR_HP_METER_POSITON[0]
      @hp_meter.y = ACTOR_HP_METER_POSITON[1]
      update_flow_hp
  end
  
  #--------------------------------------------------------------------------
  # ● Update Flow HP
  #--------------------------------------------------------------------------        
  def update_flow_hp
      @hp_meter.bitmap.clear
      par_width = @par_meter_cw * @actor.hp / @actor.mhp
      m_scr = Rect.new(@par_meter_flow,0, par_width, @par_meter_ch)
      @hp_meter.bitmap.blt(0,0,@par_meter_image, m_scr)
  end  
  
  #--------------------------------------------------------------------------
  # ● Create MP Meter
  #--------------------------------------------------------------------------      
  def create_mp_meter
      @mp_meter = Sprite.new
      @mp_meter.bitmap = Bitmap.new(@par_meter_cw,@par_meter_ch)
      @mp_meter.z = 11
      @mp_meter.x = @base_x + ACTOR_MP_METER_POSITON[0]
      @mp_meter.y = ACTOR_MP_METER_POSITON[1]
      update_flow_mp
  end
  
  #--------------------------------------------------------------------------
  # ● Update Flow MP
  #--------------------------------------------------------------------------        
  def update_flow_mp
      @mp_meter.bitmap.clear
      par_width = @par_meter_cw * @actor.mp / @actor.mmp rescue nil
      par_width = 0 if par_width == nil
      m_scr = Rect.new(@par_meter_flow,@par_meter_ch, par_width, @par_meter_ch)
      @mp_meter.bitmap.blt(0,0,@par_meter_image, m_scr)
      @par_meter_flow += 3
      @par_meter_flow = 0 if @par_meter_flow > @par_meter_flow_max
  end   

  #--------------------------------------------------------------------------
  # ● Create_States
  #--------------------------------------------------------------------------      
  def create_states
      refresh_states
      @status = Sprite.new
      @status.bitmap = Bitmap.new(24,24)
      @status.x = @base_x +  ACTOR_STATES_POSITION[0]
      @status.y = ACTOR_STATES_POSITION[1]
      @status_flow = -24
      @states_speed = 50
      @status.z = 503
      @old_states = @actor.states
      refresh_states
      update_flow_states
  end      
   
  #--------------------------------------------------------------------------
  # ● Upate Flow_Status
  #--------------------------------------------------------------------------         
  def update_flow_states
      return if @actor.states.size == 0 and [email protected]
      @states_speed = 0
      @status.bitmap.clear
      src_rect = Rect.new(@status_flow,0, 24,24)
      @status.bitmap.blt(0,0, @actor_status, src_rect)
      @status.visible = @actor.states.size == 0 ? false : true
      @status_flow += 1
      @status_flow = -24 if @status_flow >= @states_size - 24
  end   
  
  #--------------------------------------------------------------------------
  # ● Refresh States
  #--------------------------------------------------------------------------        
  def refresh_states
      @old_states = @actor.states
      if @actor_status != nil
         @actor_status.dispose
         @actor_status = nil
      end
      @states_size = @actor.states.size > 0 ? (48 * @actor.states.size) : 24
      @actor_status = Bitmap.new(@states_size,24)
      index = 0
      for i in  @actor.states
         rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24)
         @actor_status.blt(48 * index , 0, @icon_image, rect)
         index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------         
  def update
      update_flow_hp
      update_flow_mp
      update_flow_states
  end  
  
end


#==============================================================================
# ■ Actor Menu Parameter
#==============================================================================
class Actor_Menu_Parameter
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------                     
  def dispose
      dispose_actor_layout_par
      dispose_name
      dispose_hp_number
      dispose_mp_number
      dispose_hp_meter
      dispose_mp_meter
      dispose_states
      dispose_level
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Actor Layout Par
  #--------------------------------------------------------------------------                        
  def dispose_actor_layout_par
      return if @layout_par == nil
      @layout_par.dispose
      @layout_par = nil
  end   

  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------  
  def dispose_name
      return if @actor_name == nil
      @actor_name.bitmap.dispose
      @actor_name.dispose
      @actor_name = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Number
  #--------------------------------------------------------------------------      
  def dispose_hp_number
      return if @hp_number == nil
      @hp_number.bitmap.dispose
      @hp_number.dispose
      @hp_number = nil
      @hp2_number.bitmap.dispose
      @hp2_number.dispose
      @hp2_number = nil      
      
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose MP Number
  #--------------------------------------------------------------------------      
  def dispose_mp_number
      return if @mp_number == nil
      @mp_number.bitmap.dispose
      @mp_number.dispose
      @mp_number = nil
      @mp2_number.bitmap.dispose
      @mp2_number.dispose
      @mp2_number = nil      
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose States
  #--------------------------------------------------------------------------            
   def dispose_states
       return if @status == nil
       @status.bitmap.dispose
       @status.dispose
       if @actor_status != nil
          @actor_status.dispose
          @actor_status = nil
       end   
   end  
  
  #--------------------------------------------------------------------------
  # ● Dispose MP Meter
  #--------------------------------------------------------------------------        
  def dispose_mp_meter
      return if @mp_meter == nil
      @mp_meter.bitmap.dispose
      @mp_meter.dispose
      @mp_meter = nil
  end     
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Meter
  #--------------------------------------------------------------------------        
  def dispose_hp_meter
      return if @hp_meter == nil
      @hp_meter.bitmap.dispose
      @hp_meter.dispose
      @hp_meter = nil
  end

  #--------------------------------------------------------------------------
  # ● Dispose Level
  #--------------------------------------------------------------------------        
  def dispose_level
      return if @level == nil
      @level.bitmap.dispose
      @level.dispose
      @level = nil
  end
   
end  

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------         
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_command
      create_actor_pictures
      create_timer_sprite
      create_gold_number
      create_location
      create_actor_parameter
      create_members
      create_members_layout
      update_members_face
  end

  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_main_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end  

  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------              
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_main_menu[1]
      @layout.z = 3
  end
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Create Command
  #--------------------------------------------------------------------------   
  def create_command
      create_command_window
      @command_window.visible = false
      @command_window.x -=544      
      @command_max = @command_window.list.size
      @commnad_name = []
      index = 0
      for i in @command_window.list
         @commnad_name.push(i[:name])
         index += 1
      end   
      @command_scroll_max = @command_max > 6 ? 6 : @command_max
      @command_ny = 0
      @command_sprites = []
      index = 0
      for i in 0...@command_max
          @command_sprites.push(Command_Menu_Sprite.new(nil, index,@commnad_name[index]) )
          index += 1
      end
  end  

  #--------------------------------------------------------------------------
  # ● Create Command Window
  #--------------------------------------------------------------------------     
  def create_command_window
      @command_window = Window_MenuCommand.new
      @command_window.set_handler(:item,      method(:command_item))
      @command_window.set_handler(:skill,     method(:command_personal))
      @command_window.set_handler(:equip,     method(:command_personal))
      @command_window.set_handler(:status,    method(:command_personal))
      @command_window.set_handler(:formation, method(:command_formation))
      @command_window.set_handler(:save,      method(:command_save))
      @command_window.set_handler(:game_end,  method(:command_game_end))
      @command_window.set_handler(:cancel,    method(:return_scene))  
      @command_window.index = $game_temp.menu_index
   end   
      
  #--------------------------------------------------------------------------
  # ● Create Actor Pictures
  #--------------------------------------------------------------------------     
  def create_actor_pictures
      @actor_pictures = []
      members_size = $game_party.members.size
      members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members
      for i in 0...members_size
         @actor_pictures.push(Actor_Menu_Pictures.new(nil,i,$game_party.members.id))
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Create Timer Number
  #--------------------------------------------------------------------------      
  def create_timer_sprite
      update_timer
      @min_old = @min
      @timer_image = $game_temp.pre_cache_main_menu[2]
      @timer_cw = @timer_image.width / 10
      @timer_ch = @timer_image.height
      @timer_sprite = Sprite.new
      @timer_sprite.bitmap = Bitmap.new(@timer_image.width ,@timer_image.height)
      @timer_sprite.z = 11
      @timer_sprite.x = TIME_NUMBER_POS[0]
      @timer_sprite.y = TIME_NUMBER_POS[1]
      refresh_timer
  end
  
  #--------------------------------------------------------------------------
  # ● Create Gold Number
  #--------------------------------------------------------------------------         
  def create_gold_number
      @gold = $game_party.gold
      @gold_image = $game_temp.pre_cache_main_menu[3]
      @gold_cw = @gold_image.width / 10
      @gold_ch = @gold_image.height
      @gold_sprite = Sprite.new
      @gold_sprite.bitmap = Bitmap.new(@gold_image.width ,@gold_image.height)
      @gold_sprite.z = 11
      @gold_sprite.x = GOLD_NUMBER_POS[0]
      @gold_sprite.y = GOLD_NUMBER_POS[1]
      refresh_gold
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Location
  #--------------------------------------------------------------------------         
  def create_location
      @location = Sprite.new
      @location.bitmap = Bitmap.new(200,40)
      @location.bitmap.font.size = 20
      @location.bitmap.font.bold = true
      @location.bitmap.font.italic = true
      @location.z = 12
      @location.x = LOCATION_POS[0]
      @location.y = LOCATION_POS[1]
      refresh_location
  end

  #--------------------------------------------------------------------------
  # ● Refresh Location
  #--------------------------------------------------------------------------            
  def refresh_location
      location_name = $game_map.display_name
      @location.bitmap.clear
      @location.bitmap.font.color = Color.new(120,120,120,120)
      @location.bitmap.draw_text(6,4,190,32, location_name.to_s,2)
      @location.bitmap.font.color = Color.new(255,255,255)
      @location.bitmap.draw_text(0,0,190,32, location_name.to_s,2)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Actor Parameter
  #--------------------------------------------------------------------------              
  def create_actor_parameter
      @actor_par = []
      members_size = $game_party.members.size
      members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members
      for i in 0...members_size
          @actor_par.push(Actor_Menu_Parameter.new(i,$game_party.members))
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Create Members
  #--------------------------------------------------------------------------               
  def create_members
      @members_viewport = Viewport.new(MEMBERS_FACE_POSITION[0],MEMBERS_FACE_POSITION[1],400,96)
      @members_viewport.z = 12
      @members_viewport.ox = -544
      @members_slide_max = (MEMBERS_FACE_POSITION[0] - 544)
      @members = []
      for i in 0...$game_party.members.size        
          @members.push(Face_Members_Sprite.new(@members_viewport,i, $game_party.members.id))
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Create Members Layout
  #--------------------------------------------------------------------------                  
  def create_members_layout
      @members_layout = Members_Arrow_Sprite.new
  end  
  
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_command_sprites
      dispose_actor_sprites
      dispose_actor_parameter
      dispose_timer_sprite
      dispose_gold_number
      dispose_location
      dispose_members
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
   
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end
   
  #--------------------------------------------------------------------------
  # ● Dispose Command Sprites
  #--------------------------------------------------------------------------     
  def dispose_command_sprites
      return if @command_sprites == nil
      @command_sprites.each {|sprite| sprite.dispose_command }
      @command_sprites = nil
      @command_window.dispose
  end   

  #--------------------------------------------------------------------------
  # ● Dispose Actor Sprites
  #--------------------------------------------------------------------------     
  def dispose_actor_sprites
      return if @actor_pictures == nil
      @actor_pictures.each {|sprite| sprite.dispose_picture }
      @actor_pictures = nil
  end     
  
  #--------------------------------------------------------------------------
  # ● Dispose timer Sprite
  #--------------------------------------------------------------------------         
  def dispose_timer_sprite
      return if @timer_sprite == nil
      @timer_sprite.dispose
  end
   
  #--------------------------------------------------------------------------
  # ● Dispose Gold Number
  #--------------------------------------------------------------------------           
  def dispose_gold_number
      return if @gold_image == nil
      @gold_sprite.dispose
      @gold_sprite = nil
  end

  #--------------------------------------------------------------------------
  # ● Dispose Location
  #--------------------------------------------------------------------------            
  def dispose_location
      return if @location == nil
      @location.bitmap.dispose
      @location.dispose
      @location = nil
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose Actor Parameter
  #--------------------------------------------------------------------------               
  def dispose_actor_parameter
      return if @actor_par == nil
      @actor_par.each {|sprite| sprite.dispose }
      @actor_par = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Members
  #--------------------------------------------------------------------------                  
  def dispose_members
      return if @members == nil
      @members.each {|sprite| sprite.dispose }
      @members = nil
      @members_layout.dispose
      @members_viewport.dispose
  end  
   
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles
      update_command_sprites
      update_actor_parameter
      update_actor_sprites
      update_members_face
      refresh_timer if @min_old != @min
      refresh_gold if @gold != $game_party.gold      
  end
      
  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
   
  #--------------------------------------------------------------------------
  # ● Update Command Sprites
  #--------------------------------------------------------------------------     
  def update_command_sprites
      return if @command_window == nil
      visible = @phase == 0 ? true : false
      @command_sprites.each {|sprite| sprite.update_command(@command_window.index,visible) }
  end     
  
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------  
  def refresh_timer
      @min_old = @min
      @timer_sprite.bitmap.clear
      draw_number(@timer_cw * 1,0,0) if @hour < 10              
      draw_number(@timer_cw * 2,0,@hour)
      draw_number(@timer_cw * 4,0,0) if @min < 10            
      draw_number(@timer_cw * 5,0,@min)
  end  
  
  #--------------------------------------------------------------------------
  # ● Draw Number
  #--------------------------------------------------------------------------  
  def draw_number(x,y,value)
      @number_text = value.abs.to_s.split(//)
      plus_x = -@timer_cw * @number_text.size
      for r in 0..@number_text.size - 1
         @number_abs = @number_text[r].to_i
         nsrc_rect = Rect.new(@timer_cw * @number_abs, 0, @timer_cw, @timer_ch)
         @timer_sprite.bitmap.blt(plus_x + x + (@timer_cw  *  r), y, @timer_image, nsrc_rect)        
      end     
  end     
  
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------  
  def update_timer
      time = $game_system.playtime
      @hour = time / 60 / 60
      @min = time / 60 % 60
      @sec = time % 60
  end      
  
  #--------------------------------------------------------------------------
  # ● Refresh Gold
  #--------------------------------------------------------------------------           
  def refresh_gold
      @gold = $game_party.gold
      @gold_sprite.bitmap.clear
      value_text = @gold.abs.to_s.split(//)
      index = 0
      for i in 0..value_text.size - 1
          value_abs = value_text.to_i
          nsrc_rect = Rect.new(@gold_cw * value_abs, 0, @gold_cw, @gold_ch)
          @gold_sprite.bitmap.blt(@gold_cw *  i, 0, @gold_image, nsrc_rect)
          index += 1
      end
      ey = (index * @gold_cw)  
      @gold_sprite.x = GOLD_NUMBER_POS[0] -  ey
  end
  
  #--------------------------------------------------------------------------
  # ● Update Actor Parameter
  #--------------------------------------------------------------------------               
  def update_actor_parameter
      return if @actor_par == nil
      @actor_par.each {|sprite| sprite.update }
  end
   
  #--------------------------------------------------------------------------
  # ● Update Actor Sprites
  #--------------------------------------------------------------------------     
  def update_actor_sprites
      return if @actor_pictures == nil
      @actor_pictures.each {|sprite| sprite.update_picture }
  end     
  
  #--------------------------------------------------------------------------
  # ● Update Members Face
  #--------------------------------------------------------------------------                  
  def update_members_face
      return if @members == nil or @members == 0
      if @members_index > 4
         ny = (5 * 64)
         else
         ny = 64 * @members_index
      end
      @members.each {|sprite| sprite.update_command(@members_index, ny) }
      @members_layout.update
      if @members_windows_active
         if @members_viewport.ox < 0
            @members_viewport.ox += 25
         end
       else   
         if @members_viewport.ox > -544
            @members_viewport.ox -= 25
          end         
      end
      @members_layout.nx(@members_viewport.ox)
  end  
  
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_timer
      update_sprites
      update_command
      @members_windows_active = @phase == 100 ? true : false
  end
   
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
      case @phase
        when 0;       update_main_command
        when 100;      update_select_members            
     end   
  end
   
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_main_command
      if Input.trigger?(:UP) or Input.trigger?(:LEFT)
         move_command_index(-1)
      elsif Input.trigger?(:DOWN) or Input.trigger?(:RIGHT)
         move_command_index(1)
      elsif Input.trigger?(:C)
         execute_select
      elsif Input.trigger?(:B)
         return_to_map
      end  
  end
   
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------   
  def move_command_index(value)
      Sound.play_cursor
      @command_window.index += value
      @command_window.index = 0 if @command_window.index >= @command_max
      @command_window.index = (@command_max - 1) if @command_window.index < 0
  end   
  
  #--------------------------------------------------------------------------
  # ● Execute Select
  #--------------------------------------------------------------------------     
  def execute_select
      if @command_window.current_symbol == :save and $game_system.save_disabled
         Sound.play_buzzer
         return
      end
      @phase = @command_window.index
      $game_temp.menu_index = @phase
      Sound.play_ok
      $game_temp.pre_symbol = @command_window.current_symbol
      @command_window.call_handler(@command_window.current_symbol)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Select Members
  #--------------------------------------------------------------------------        
  def update_select_members  
      if $game_party.members.size == 0
         execute_cancel
         return
      end  
      if Input.trigger?(:LEFT)
         move_members_index(-1)
      elsif Input.trigger?(:RIGHT)
         move_members_index(1)
      elsif Input.trigger?(:C)
         execute_select_members
      elsif Input.trigger?(:B)
         execute_cancel
      end   
  end  
   
  #--------------------------------------------------------------------------
  # ● Execute Cancel
  #--------------------------------------------------------------------------         
  def execute_cancel
      Sound.play_cancel
      @phase = 0
      @members_index = 0
  end
      
  #--------------------------------------------------------------------------
  # ● Move Members Index
  #--------------------------------------------------------------------------         
  def move_members_index(value)
      Sound.play_cursor
      @members_index += value
      @members_index = 0 if @members_index >= $game_party.members.size
      @members_index = ($game_party.members.size - 1) if @members_index < 0
  end
  
  #--------------------------------------------------------------------------
  # ● Command Formation
  #--------------------------------------------------------------------------
  def command_formation
      SceneManager.call(Scene_Party)
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Access Scene
  #--------------------------------------------------------------------------              
  def can_access_scene?
      if $game_party.members.size == 0
         #Sound.play_buzzer   
         execute_cancel
         return false
      end   
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Select Members
  #--------------------------------------------------------------------------     
  def execute_select_members
      @phase = @command_window.index
      $game_temp.menu_index = @phase
      Sound.play_ok
      on_personal_ok
  end  
  
  #--------------------------------------------------------------------------
  # ● ON Personal OK
  #--------------------------------------------------------------------------            
  alias mog_monogatari_on_personal_ok on_personal_ok
  def on_personal_ok
      $game_temp.actor_menu_temp =  $game_party.members[@members_index]
      $game_party.menu_actor = $game_party.members[@members_index]
      mog_monogatari_on_personal_ok
  end   

  #--------------------------------------------------------------------------
  # ● Return To Map
  #--------------------------------------------------------------------------              
  def return_to_map
      $game_temp.menu_index = 0
      Sound.play_cancel
      SceneManager.return
  end  
  
  #--------------------------------------------------------------------------
  # ● Command Personal
  #--------------------------------------------------------------------------
  def command_personal
      @phase = 100
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Item Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_item_menu
      @pre_cache_item_menu = []
      @pre_cache_item_menu.push(Cache.menu_item("Background"))
      @pre_cache_item_menu.push(Cache.menu_item("Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Item
  include MOG_MENU_ITEM
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @phase = 0
      @command_index = 0
      @actor = $game_party.members[0]
      @wait_time = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end  
  
end

#==============================================================================
# ■ Window_ItemList Z
#==============================================================================
class Window_ItemList_Z < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @category = :none
      @data = []
  end
  
  #--------------------------------------------------------------------------
  # ● Category
  #--------------------------------------------------------------------------
  def category=(category)
      return if @category == category
      @category = category
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled?
  #--------------------------------------------------------------------------
  def current_item_enabled?
      enable?(@data[index])
  end
  
  #--------------------------------------------------------------------------
  # ● Include?
  #--------------------------------------------------------------------------
  def include?(item)
      case @category
      when :item
           item.is_a?(RPG::Item) && !item.key_item?
      when :weapon
           item.is_a?(RPG::Weapon)
      when :armor
           item.is_a?(RPG::Armor)
      when :key_item
           item.is_a?(RPG::Item) && item.key_item?
      else
           false
      end
  end

  #--------------------------------------------------------------------------
  # ● Enable?
  #--------------------------------------------------------------------------
  def enable?(item)
      $game_party.usable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Make Item List
  #--------------------------------------------------------------------------
  def make_item_list
      @data = $game_party.all_items.select {|item| include?(item) }
      @data.push(nil) if include?(nil)
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select(@data.index($game_party.last_item.object) || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      item = @data[index]
      if item
         rect = item_rect(index)
         rect.width -= 4
         draw_item_name(item, rect.x, rect.y, enable?(item))
         draw_item_number(rect, item)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item Number
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
      draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      @help_window.set_item(item)
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      make_item_list
      create_contents
      draw_all_items
  end
   
end

#==============================================================================
# ■ Window_ItemList Z
#==============================================================================
class Window_ItemList_Item_1 < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @category = :none
      @data = []
  end
  
  #--------------------------------------------------------------------------
  # ● Category
  #--------------------------------------------------------------------------
  def category=(category)
      return if @category == category
      @category = category
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled?
  #--------------------------------------------------------------------------
  def current_item_enabled?
      enable?(@data[index])
  end
  
  #--------------------------------------------------------------------------
  # ● Include?
  #--------------------------------------------------------------------------
  def include?(item)
      case @category
      when :item   ;   item.is_a?(RPG::Item) && !item.key_item?
      else
           false
      end
  end

  #--------------------------------------------------------------------------
  # ● Enable?
  #--------------------------------------------------------------------------
  def enable?(item)
      $game_party.usable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Make Item List
  #--------------------------------------------------------------------------
  def make_item_list
      @data = $game_party.all_items.select {|item| include?(item) }
      @data.push(nil) if include?(nil)
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select(@data.index($game_party.last_item.object) || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      item = @data[index]
      if item
         rect = item_rect(index)
         rect.width -= 4
         draw_item_number(rect, item)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item Number
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
      draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  end  
   
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      @help_window.set_item(item)
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      make_item_list
      create_contents
      draw_all_items
   end
   
end

#==============================================================================
# ■ Window_ItemList Z
#==============================================================================
class Window_ItemList_Item_2 < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @category = :none
      @data = []
  end
  
  #--------------------------------------------------------------------------
  # ● Category
  #--------------------------------------------------------------------------
  def category=(category)
      return if @category == category
      @category = category
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled?
  #--------------------------------------------------------------------------
  def current_item_enabled?
      enable?(@data[index])
  end
  
  #--------------------------------------------------------------------------
  # ● Include?
  #--------------------------------------------------------------------------
  def include?(item)
      case @category
      when :item   ;   item.is_a?(RPG::Item) && !item.key_item?
      else
           false
      end
  end

  #--------------------------------------------------------------------------
  # ● Enable?
  #--------------------------------------------------------------------------
  def enable?(item)
      $game_party.usable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Make Item List
  #--------------------------------------------------------------------------
  def make_item_list
      @data = $game_party.all_items.select {|item| include?(item) }
      @data.push(nil) if include?(nil)
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select(@data.index($game_party.last_item.object) || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      item = @data[index]
      if item
         rect = item_rect(index)
         rect.width -= 4
         draw_item_name(item, rect.x, rect.y, enable?(item))
        # draw_item_number(rect, item)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item Number
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
      draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help      
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      make_item_list
      create_contents
      draw_all_items
  end
   
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------         
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_command
      create_button
      create_help_window
      create_item_window
      create_weapon_window
      create_armor_window
      create_key_window
      create_actor_window
      set_initial_visible
  end
   
  #--------------------------------------------------------------------------
  # ● Create Actor Window
  #--------------------------------------------------------------------------
  def create_actor_window
      @actor_window = Members_Windows_Status.new
      @actor_window.set_handler(:ok,     method(:on_actor_ok))
      @actor_window.set_handler(:cancel, method(:on_actor_cancel))
      @actor_window.opacity = 0      
      @actor_window.x = -10
      @actor_window.y = 36
      @actor_window_slide_range = [@actor_window.x, -@actor_window.width]
      @actor_window.x = @actor_window_slide_range[1]
      @actor_window.visible = true
      @actor_window_index_old = @actor_window.index
      create_members_window
      create_actor_status
      update_active_window
      update_command_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Create Members Window
  #--------------------------------------------------------------------------  
  def create_members_window
      index = 0
      @members_status = []      
      for actor in $game_party.members
          @members_status.push(Members_Menu.new(actor,index))
          index += 1
      end   
  end
   
  #--------------------------------------------------------------------------
  # ● Create Actor Status
  #--------------------------------------------------------------------------  
  def create_actor_status
      @actor_status = Actor_Menu_Status.new(@actor)
  end  
   
  #--------------------------------------------------------------------------
  # ● Create Item Window
  #--------------------------------------------------------------------------
  def create_item_window
      @item_window = Window_ItemList_Item_1.new(162,92,225,240)  
      @item_window.help_window = @help_window
      @item_window.set_handler(:ok,     method(:on_item_ok))
      @item_window.set_handler(:cancel, method(:on_item_cancel))
      @item_window.category = :item
      @item_window.active = true
      @item_window.refresh
      @item_window.index = 0
      @item_window.opacity = 0      
      @item_window_2 = Window_ItemList_Item_2.new(162,92,225,240)  
      @item_window_2.help_window = @help_window
      @item_window_2.set_handler(:ok,     method(:on_item_ok))
      @item_window_2.set_handler(:cancel, method(:on_item_cancel))
      @item_window_2.category = :item
      @item_window_2.active = true
      @item_window_2.refresh
      @item_window_2.index = 0
      @item_window_2.opacity = 0      
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Weapon Window
  #--------------------------------------------------------------------------
  def create_weapon_window
      @weapon_window = Window_ItemList_Z.new(162,92,225,240)  
      @weapon_window.help_window = @help_window
      @weapon_window.set_handler(:ok,     method(:on_item_ok))
      @weapon_window.set_handler(:cancel, method(:on_item_cancel))
      @weapon_window.category = :weapon
      @weapon_window.active = true
      @weapon_window.refresh
      @weapon_window.index = 0
      @weapon_window.opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Armor Window
  #--------------------------------------------------------------------------
  def create_armor_window
      @armor_window = Window_ItemList_Z.new(162,92,225,240)  
      @armor_window.help_window = @help_window
      @armor_window.set_handler(:ok,     method(:on_item_ok))
      @armor_window.set_handler(:cancel, method(:on_item_cancel))
      @armor_window.category = :armor
      @armor_window.active = true
      @armor_window.refresh
      @armor_window.index = 0
      @armor_window.opacity = 0
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Key Window
  #--------------------------------------------------------------------------
  def create_key_window
      @key_window = Window_ItemList_Z.new(162,92,225,240)  
      @key_window.help_window = @help_window
      @key_window.set_handler(:ok,     method(:on_item_ok))
      @key_window.set_handler(:cancel, method(:on_item_cancel))
      @key_window.category = :key_item
      @key_window.active = true
      @key_window.refresh
      @key_window.index = 0
      @key_window.opacity = 0
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Help Window
  #--------------------------------------------------------------------------              
  def create_help_window
      @help_window = Window_Help.new
      @help_window.x = 0
      @help_window.y = Graphics.height - @help_window.height
      @help_window.opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_item_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end  

  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_item_menu[1]
      @layout.z = 3
  end
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Create Command
  #--------------------------------------------------------------------------   
  def create_command
      @command_sprites = []
      index = 0      
      for i in 0...4
          @command_sprites.push(Layout_Window_Sprite.new(nil, index) )
          index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Button
  #--------------------------------------------------------------------------   
  def create_button
      @button_sprites = []
      index = 0      
      for i in 0...4
          @button_sprites.push(Item_Button_Sprite.new(nil, index) )
          index += 1
      end
  end      
  
  #--------------------------------------------------------------------------
  # ● Set Initial Visible
  #--------------------------------------------------------------------------            
  def set_initial_visible
      @item_window.visible = false
      @item_window_2.visible = false
      @weapon_window.visible = false
      @armor_window.visible = false
      @key_window.visible = false  
  end  
  
end

#==============================================================================
# ■ Layout Window Sprite
#==============================================================================
class Layout_Window_Sprite < Sprite
  include MOG_MENU_ITEM
  attr_accessor :index
  attr_accessor :position
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil,index)
      super(viewport)
      @index = index
      self.bitmap = Cache.menu_item("Item_Window" + @index.to_s)
      self.z = 10
      @org_pos = [COMMAND_POSITION[0],COMMAND_POSITION[1]]
      @slide_max = @org_pos[0] + 24
      @center = (544 - self.bitmap.width) - (544 / 2) + (self.bitmap.width / 2)
      @left = -self.bitmap.width
      @right = 544
      @position = 0
      @direction = 0
      @org_pos = [@left ,COMMAND_POSITION[1]]
      self.x = @org_pos[0]
      self.y = @org_pos[1]
      self.visible = false if @index > 0
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose_sprite
      self.bitmap.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                     
  def update_command(index)
      slide_speed = 30
      if @index == index
         if self.x < @center
            self.x += slide_speed
            self.x = @center if self.x >= @center
         elsif self.x > @center
            self.x -= slide_speed
            self.x = @center if self.x <= @center
         end
       else   
          if @direction == -1
             self.x -= slide_speed if self.x > @left
          else
             self.x += slide_speed if self.x < @right
          end   
      end  
  end   

#--------------------------------------------------------------------------
# ● New P
#--------------------------------------------------------------------------  
  def newp(index,direction)
      now_command = index
      if direction == -1
         pre_command = index + 1
         pre_command = 0 if pre_command > 3
      else   
         pre_command = index - 1
         pre_command = 3 if pre_command < 0
        end
      if index == @index
         self.visible = true
         self.x = @right if direction == -1
         self.x = @left if direction == 1
      elsif pre_command ==  @index
         self.visible = true
      else   
         self.visible = false
      end   
      @direction = direction
  end
  
end

#==============================================================================
# ■ Item Button Sprite
#==============================================================================
class Item_Button_Sprite < Sprite
  include MOG_MENU_ITEM
  attr_accessor :index
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil,index)
      super(viewport)
      @index = index
      self.bitmap = Cache.menu_item("Button" + @index.to_s)
      self.z = 12
      self.ox = self.bitmap.width / 2
      self.oy = self.bitmap.height / 2
      @org_pos = [(BUTTON_SPACE * @index) + BUTTON_POSITION[0],BUTTON_POSITION[1]]
      @slide_max = @org_pos[1] + 24
      @next_pos = [@org_pos[0],@org_pos[1]]
      self.x = @org_pos[0]
      self.y = @org_pos[1] - 128 - (128 * @index)
      @zoom_duration = [0,0,false]
      @active = false
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose_sprite
      self.bitmap.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                     
  def update_command(index)
      if @index == index
        # self.y += 2
        # self.y = @slide_max if self.y > @slide_max
         @next_pos[1] =@slide_max
         self.opacity += 15
         @active = true
      else
        # self.y -= 2
        # self.y = @org_pos[1] if self.y < @org_pos[1]
         @next_pos[1] = @org_pos[1]
        self.opacity -= 15 if self.opacity > 160
         @active = false
      end
      update_slide(1,self.y,@next_pos[1])
      update_zoom
  end   

  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,cp,np)
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp if type == 0
      self.y = cp if type == 1
  end  
  
#--------------------------------------------------------------------------
# ● Update Zoom
#--------------------------------------------------------------------------                       
  def update_zoom
      if @active
         if !@zoom_duration[2]
            update_zoom_in
            @zoom_duration = [0,0,true] if self.zoom_x == 1.00  
         else  
            update_zoom_effect
         end
      else
         @zoom_duration[2] = false   
         update_zoom_in
      end  
  end   
  
#--------------------------------------------------------------------------
# ● Update Zoom Out
#--------------------------------------------------------------------------                        
  def update_zoom_out
      return if self.zoom_x == 1.00
      self.zoom_x += 0.03
      self.zoom_y += 0.03
      if self.zoom_x >= 1.00
            self.zoom_x = 1.00
            self.zoom_y = 1.00
      end   
   end   
  
#--------------------------------------------------------------------------
# ● Update Zoom In
#--------------------------------------------------------------------------                           
  def update_zoom_in
      return if self.zoom_x == 1.00
      self.zoom_x -= 0.03
      self.zoom_y -= 0.03
      if self.zoom_x <= 1.00
         self.zoom_x = 1.00
         self.zoom_y = 1.00
      end   
  end      
         
#--------------------------------------------------------------------------
# ● Update Zoom_effect
#--------------------------------------------------------------------------                        
def update_zoom_effect
     @zoom_duration[0] += 1
     return if @zoom_duration[0] < 1
     @zoom_duration[0] = 0
     @zoom_duration[1] += 1
     case @zoom_duration[1]
          when 1..30
             self.zoom_x += 0.005
             self.zoom_y += 0.005                 
          when 31..60
             self.zoom_x -= 0.005
             self.zoom_y -= 0.005           
          when 61..999  
          @zoom_duration[1] = 0
          self.zoom_x = 1.00
          self.zoom_y = 1.00
     end
end      
  
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_command_sprites
      dispose_button_sprites
      dispose_windows
      dispose_members_status
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
   
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end
   
  #--------------------------------------------------------------------------
  # ● Dispose Command Sprites
  #--------------------------------------------------------------------------     
  def dispose_command_sprites
      return if @command_sprites == nil
      @command_sprites.each {|sprite| sprite.dispose_sprite }
      @command_sprites = nil
  end   

  #--------------------------------------------------------------------------
  # ● Dispose Button Sprites
  #--------------------------------------------------------------------------     
  def dispose_button_sprites
      return if @button_sprites == nil
      @button_sprites.each {|sprite| sprite.dispose_sprite }
      @button_sprites = nil
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose Members Status
  #--------------------------------------------------------------------------            
  def dispose_members_status
      return if @members_status == nil
      @members_status.each {|sprite| sprite.dispose }
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Winndows
  #--------------------------------------------------------------------------         
  def dispose_windows
      return if @item_window == nil
      @item_window.dispose
      @item_window_2.dispose
      @weapon_window.dispose
      @armor_window.dispose
      @key_window.dispose
      @actor_window.dispose
      @actor_status.dispose
      @help_window.dispose
  end  
  
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles
      update_command_sprites
      update_button_sprites
      update_windows
      update_members_status
  end

  #--------------------------------------------------------------------------
  # ● Update Members Status
  #--------------------------------------------------------------------------            
  def update_members_status
      @members_status.each {|sprite| sprite.update(@actor_window.active,@actor_window.index) }
  end
      
  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end

  #--------------------------------------------------------------------------
  # ● Update Command Sprites
  #--------------------------------------------------------------------------     
  def update_command_sprites
      return if @command_sprites == nil
      for i in @command_sprites
          i.update_command(@command_index)
          if i.index == 0
             @item_window.x = i.x
             @item_window.visible = i.visible
             @item_window_2.x = i.x
             @item_window_2.visible = i.visible            
           elsif i.index == 1
             @weapon_window.x = i.x
             @weapon_window.visible = i.visible            
           elsif i.index == 2
             @armor_window.x = i.x
             @armor_window.visible = i.visible
           elsif i.index == 3
             @key_window.x = i.x
             @key_window.visible = i.visible               
         end
      end      
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Button Sprites
  #--------------------------------------------------------------------------     
  def update_button_sprites
      return if @button_sprites == nil
      @button_sprites.each {|sprite| sprite.update_command(@command_index) }
  end     
  
  #--------------------------------------------------------------------------
  # ● Update Winndow
  #--------------------------------------------------------------------------      
  def update_windows
      return if @item_window == nil
      @item_window_2.index = @item_window.index
      @item_window.update
      @weapon_window.update   
      @armor_window.update
      @key_window.update         
      @actor_window.update      
      update_actor_window_slide
      update_actor_window2_slide
  end
  
  #--------------------------------------------------------------------------
  # ● Update Actor Window Slide
  #--------------------------------------------------------------------------  
  def update_actor_window_slide
      if @actor_window.active
         if @actor_window.x < @actor_window_slide_range[0]
            @actor_window.x += 15
            @actor_window.contents_opacity += 23
            if @actor_window.x >= @actor_window_slide_range[0]
               @actor_window.x = @actor_window_slide_range[0]
               @actor_window.contents_opacity = 255
            end  
         end  
      else         
         if @actor_window.x >= @actor_window_slide_range[1]
            @actor_window.x -= 15
            @actor_window.contents_opacity -= 3
            if @actor_window.x <= @actor_window_slide_range[1]
               @actor_window.x = @actor_window_slide_range[1]
               @actor_window.contents_opacity = 0
            end         
         end
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Actor Window Slide
  #--------------------------------------------------------------------------  
  def update_actor_window2_slide
      @actor_status.update(@actor_window.active,@actor)
  end   
  
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_command   
      update_sprites
  end
   
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
      if @actor_window.active
         update_target_select         
      else
         update_main_command
         update_active_window
      end  
  end

  #--------------------------------------------------------------------------
  # ● Update Active Window
  #--------------------------------------------------------------------------        
  def update_active_window
      @item_window_2.active = false
      if @command_index == 0
         @item_window.active = true
         @weapon_window.active = false
         @armor_window.active = false
         @key_window.active = false
      elsif @command_index == 1           
         @item_window.active = false
         @weapon_window.active = true
         @armor_window.active = false
         @key_window.active = false
      elsif @command_index == 2   
         @item_window.active = false
         @weapon_window.active = false
         @armor_window.active = true
         @key_window.active = false
      elsif @command_index == 3
         @item_window.active = false
         @weapon_window.active = false
         @armor_window.active = false
         @key_window.active = true
      end         
  end
     
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_main_command
      @wait_time -= 1 if @wait_time > 0
      if Input.trigger?(:LEFT)
         move_command_index(-1)
      elsif Input.trigger?(:RIGHT)
         move_command_index(1)
      elsif Input.trigger?(:B)
         return_scene
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
  end
  
  #--------------------------------------------------------------------------
  # ● Cancel_Selection
  #--------------------------------------------------------------------------         
  def cancel_selection
      Sound.play_cancel
      @phase = 0
  end
  
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------   
  def move_command_index(value)
      return if @wait_time > 0
      @wait_time = 7
      pre_index = @command_index
      @command_index += value
      @command_index = 0 if @command_index > 3
      @command_index = 3 if @command_index < 0
      for i in @command_sprites
          i.newp(@command_index,value)
      end         
      Sound.play_cursor
  end      
  
  #--------------------------------------------------------------------------
  # ● ON Category OK
  #--------------------------------------------------------------------------
  def on_category_ok
      if @command_index == 0
         @item_window.activate
         @item_window.select_last
      elsif @command_index == 1   
         @weapon_window.activate
         @weapon_window.select_last         
      elsif @command_index == 2   
         @armor_window.activate
         @armor_window.select_last
      elsif @command_index == 3   
         @key_window.activate
         @key_window.select_last
      end
      refresh_actor_status  
  end

  #--------------------------------------------------------------------------
  # ● ON Item OK
  #--------------------------------------------------------------------------
  def on_item_ok
      $game_party.last_item.object = item
      determine_item
  end
  
  #--------------------------------------------------------------------------
  # ● ON Item Cancel
  #--------------------------------------------------------------------------
  def on_item_cancel
     @item_window.unselect
  end
  
  #--------------------------------------------------------------------------
  # ● Play SE For Item
  #--------------------------------------------------------------------------
  def play_se_for_item
      Sound.play_use_item
  end  
  
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      if @command_index == 0
         @item_window.item
      elsif @command_index == 1   
         @weapon_window.item   
      elsif @command_index == 2   
         @armor_window.item
      elsif @command_index == 3   
         @key_window.item         
      end        
  end
  
  #--------------------------------------------------------------------------
  # ● User
  #--------------------------------------------------------------------------
  def user
      $game_party.movable_members.max_by {|member| member.pha }
  end
  
  #--------------------------------------------------------------------------
  # ● Cursor Left
  #--------------------------------------------------------------------------
  def cursor_left?
      @item_window.index % 2 == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Show Sub Window
  #--------------------------------------------------------------------------
  def show_sub_window(window)
    window.show.activate
  end

  #--------------------------------------------------------------------------
  # ● Hide Sub Window
  #--------------------------------------------------------------------------
  def hide_sub_window(window)
      window.deactivate
      activate_item_window
  end

  #--------------------------------------------------------------------------
  # ● ON Actor OK
  #--------------------------------------------------------------------------
  def on_actor_ok
      if item_usable?
         use_item
         refresh_window
      else
        Sound.play_buzzer
      end
  end

  #--------------------------------------------------------------------------
  # ● Refresh Window
  #--------------------------------------------------------------------------  
  def refresh_window
      if @command_index == 0
         old_item = @item_window.item
         @item_window.refresh
#         set_actor_for_members_menu
         if @item_window.item  == nil
            @item_window.index -= 1
            @item_window.index = 0 if @item_window.index < 0
            @item_window.update
         end
         if old_item != @item_window.item
            on_actor_cancel
            cancel_selection
            @item_window_2.refresh
            @item_window.update_help
         end
      elsif @command_index == 1   
         @weapon_window.refresh
      elsif @command_index == 2   
         @armor_window.refresh
      elsif @command_index == 3   
         @key_window.refresh      
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Set Actor for Members Menu
  #--------------------------------------------------------------------------   
  def set_actor_for_members_menu
      index = 0
      for actor in $game_party.members
          @members_status[index].set_actor(actor)
          index += 1
      end  
  end
         
  #--------------------------------------------------------------------------
  # ● ON Actor Cancel
  #--------------------------------------------------------------------------
  def on_actor_cancel
      hide_sub_window(@actor_window)
  end

  #--------------------------------------------------------------------------
  # ● Determine Item
  #--------------------------------------------------------------------------
  def determine_item
      if item.for_friend?
         show_sub_window(@actor_window)
         @actor_window.select_for_item(item)
         $game_temp.item_scope = @item_window.item.scope rescue nil
      else
         use_item
         activate_item_window
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Activate Item Window
  #--------------------------------------------------------------------------
  def activate_item_window
      if @command_index == 0
         @item_window.refresh
         @item_window.activate
      elsif @command_index == 1   
         @weapon_window.refresh
         @weapon_window.activate
      elsif @command_index == 2   
         @armor_window.refresh
         @armor_window.activate
      elsif @command_index == 3   
         @key_window.refresh     
         @key_window.activate
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Item Target Actors
  #--------------------------------------------------------------------------
  def item_target_actors
      if !item.for_friend?
        []
      elsif item.for_all?
        $game_party.members
      else
        [$game_party.members[@actor_window.index]]
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Item Usable?
  #--------------------------------------------------------------------------
  def item_usable?
      user.usable?(item) && item_effects_valid?
  end
  
  #--------------------------------------------------------------------------
  # ● Item Effects Valid?
  #--------------------------------------------------------------------------
  def item_effects_valid?
      item_target_actors.any? do |target|
           target.item_test(user, item)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Use Item to Actors
  #--------------------------------------------------------------------------
  def use_item_to_actors
      item_target_actors.each do |target|
        item.repeats.times { target.item_apply(user, item) }
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Use Item
  #--------------------------------------------------------------------------
  def use_item
      play_se_for_item
      user.use_item(item)
      use_item_to_actors
      check_common_event
      check_gameover
      @actor_window.refresh
  end

  #--------------------------------------------------------------------------
  # ● Check Common Event
  #--------------------------------------------------------------------------
  def check_common_event
      SceneManager.goto(Scene_Map) if $game_temp.common_event_reserved?
  end
  
  #--------------------------------------------------------------------------
  # ● Update Target Select
  #--------------------------------------------------------------------------  
  def update_target_select
      @actor = $game_party.members[@actor_window.index]
      if Input.trigger?(:B)         
         cancel_selection
      end      
  end  
  
end


#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Skill Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_skill_menu
      @pre_cache_skill_menu = []
      @pre_cache_skill_menu.push(Cache.menu_skill("Background"))
      @pre_cache_skill_menu.push(Cache.menu_skill("Layout"))
      @pre_cache_skill_menu.push(Cache.menu_skill("Type_Layout"))
      @pre_cache_skill_menu.push(Cache.menu_skill("List_Layout"))
      @pre_cache_skill_menu.push(Cache.menu_skill("Actor_Layout"))

  end   
   
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  include MOG_MENU_SKILL
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @actor = $game_temp.actor_menu_temp
      @index_max = (@actor.added_skill_types.size - 1)
      @index_max = 0 if @index_max < 0      
      @phase = 0
      @press_time = 0
      @press_lag = 0
      @scene_active = @actor.added_skill_types.size > 0 ? true : false
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Actor Skill Status
#==============================================================================
class Actor_Skill_Status
  include MOG_ACTOR_SKILL_STATUS
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      @actor = actor
      set_old_parameter
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------   
  def create_sprites
      @meter_image = $game_temp.pre_cache_actor_menu[6]
      @meter_cw = @meter_image.width
      @meter_ch = @meter_image.height / 2   
      @parameter_number = $game_temp.pre_cache_actor_menu[2]
      @parameter_cw = @parameter_number.width / 10
      @parameter_ch = @parameter_number.height
      @opac = 0
      create_layout
      create_parameter
      create_face
      create_name
      create_hp_meter
      create_mp_meter
      create_states
      set_position(0,[email protected] - 48)
  end
   
  #--------------------------------------------------------------------------
  # ● Set Old Parameter
  #--------------------------------------------------------------------------  
  def set_old_parameter
      @par = [] if @par == nil
      @par.clear
      @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.level]
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_parameter
      dispose_face
      dispose_name
      dispose_hp_meter
      dispose_mp_meter
      dispose_states
  end

  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      @layout.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------      
  def dispose_parameter
      @parameter.bitmap.dispose
      @parameter.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------   
  def dispose_face
      @face.bitmap.dispose if @face.bitmap != nil
      @face.dispose
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Meter
  #--------------------------------------------------------------------------      
  def dispose_hp_meter
      @hp_meter.bitmap.dispose
      @hp_meter.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose MP Meter
  #--------------------------------------------------------------------------      
  def dispose_mp_meter
      @mp_meter.bitmap.dispose
      @mp_meter.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      @name.bitmap.dispose
      @name.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose States
  #--------------------------------------------------------------------------            
   def dispose_states
       return if @status == nil
       @status.bitmap.dispose
       @status.dispose
       if @actor_status != nil
          @actor_status.dispose
          @actor_status = nil
       end   
    end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_skill_menu[4]
      @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]]
      @layout.x = @org_pos[0]
      @layout.y = @org_pos[1]
      @layout.z = 10
      #@layout.opacity = 0
  end

  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------
  def create_parameter
      @parameter = Sprite.new
      @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height)
      @org_pos_par = [@org_pos[0] + PAR_POSITION[0],
                      @org_pos[1] + PAR_POSITION[1]]
      @parameter.x = @org_pos_par[0]
      @parameter.y = @org_pos_par[1]
      @parameter.z = 12
#      @parameter.opacity = 0
      refresh_parameter
  end  
  
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------  
  def create_hp_meter
      @hp_meter_old = [-1,-1]
      @hp_meter = Sprite.new
      @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @org_pos_hp = [@org_pos[0] + HP_METER_POSITION[0],
                     @org_pos[1] + HP_METER_POSITION[1]]      
      @hp_meter.x = @org_pos_hp[0]
      @hp_meter.y = @org_pos_hp[1]
      @hp_meter.z = 11
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh HP Meter
  #--------------------------------------------------------------------------   
  def refresh_hp_meter
      @hp_meter_old[0] = @actor.hp
      @hp_meter_old[1] = @actor.mhp
      @hp_meter.bitmap.clear
      width_range = @meter_cw * @actor.hp / @actor.mhp
      m_rect = Rect.new(0,0,width_range,@meter_ch)
      @hp_meter.bitmap.blt(0,0,@meter_image,m_rect)
  end
  
  #--------------------------------------------------------------------------
  # ● Create MP Meter
  #--------------------------------------------------------------------------  
  def create_mp_meter
      @mp_meter_old = [-1,-1]
      @mp_meter = Sprite.new
      @mp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @org_pos_mp = [@org_pos[0] + MP_METER_POSITION[0],
                     @org_pos[1] + MP_METER_POSITION[1]]      
      @mp_meter.x = @org_pos_mp[0]
      @mp_meter.y = @org_pos_mp[1]
      @mp_meter.z = 11
  end  
  
  #--------------------------------------------------------------------------
  # ● Create_States
  #--------------------------------------------------------------------------      
  def create_states
      @status_old = nil
      @status_flow = [-24,0]   
      @status = Sprite.new
      @status.bitmap = Bitmap.new(24,24)
      @org_pos_states = [@org_pos[0] + STATES_POSITION[0],
                         @org_pos[1] + STATES_POSITION[1]]      
      @status.x = @org_pos_states[0] + 1
      @status.y = @org_pos_states[1]
      @status.z = 11
  end      

  #--------------------------------------------------------------------------
  # * Refresh States
  #--------------------------------------------------------------------------        
  def refresh_states
      check_icon_image
      @status_old = @actor.states
      @status_flow = [0,0]
      @actor_status.dispose if @actor_status != nil
      @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24
      @actor_status = Bitmap.new(@states_size,24)
      index = 0
      for i in @actor.states
         rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24)
         @actor_status.blt(26 * index , 0, @icon_image, rect)
         index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # * Flow_Status
  #--------------------------------------------------------------------------         
  def flow_states
      return if @actor_status == nil
      @status.bitmap.clear
      return if @actor.states.size == 0
      st_src_rect = Rect.new(@status_flow[0],0, 24,24)
      @status.bitmap.blt(0,0, @actor_status, st_src_rect)
      if STATES_SCROLLING_ANIMATION
         @status_flow[0] += 1
         @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2
      else   
         @status_flow[1] += 1 unless @actor.states.size <= 1
         if @status_flow[1] > 30
            @status_flow[1] = 0
            @status_flow[0] += 26
            @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0)
         end   
     end   
  end        
  
  #--------------------------------------------------------------------------
  # * Check Icon Image
  #--------------------------------------------------------------------------         
  def check_icon_image
      if @icon_image == nil or @icon_image.disposed?
         @icon_image = Cache.system("Iconset")
      end   
  end   
      
  
  #--------------------------------------------------------------------------
  # ● Refresh MP Meter
  #--------------------------------------------------------------------------   
  def refresh_mp_meter
      @mp_meter_old[0] = @actor.mp
      @mp_meter_old[1] = @actor.mmp
      @mp_meter.bitmap.clear
      width_range = @meter_cw * @actor.mp / @actor.mmp rescue nil
      width_range = 0 if width_range == nil
      m_rect = Rect.new(0,@meter_ch,width_range,@meter_ch)
      @mp_meter.bitmap.blt(0,0,@meter_image,m_rect)
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------   
  def refresh_parameter
      set_old_parameter   
      @parameter.bitmap.clear
      
      value = @actor.level
      x = 112
      y = 8
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
     
      value = @actor.hp
      x = 218
      y = 2
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
  
      value = @actor.mp
      x = 238
      y = 22
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------     
  def refresh_number(sprite,image,value,number_cw,number_ch,x,y)
      number = value.abs.to_s.split(//)
      x2 = -number_cw * number.size
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          sprite.bitmap.blt(x + x2 + (number_cw  *  i), y, image, nsrc_rect)        
      end      
      
  end

  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------  
  def create_face
      @face = Sprite.new
      @org_pos_face = [@org_pos[0] + FACE_POSITION[0],
                       @org_pos[1] + FACE_POSITION[1]]
      @face.x = @org_pos_face[0]
      @face.y = @org_pos_face[1]
      @face.z = 11
   #   @face.opacity = 0
      refresh_face
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------   
  def refresh_face
      face_name = "Face" + @actor.id.to_s
      @face.bitmap = Cache.menu(face_name.to_s)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------   
  def create_name
      @name = Sprite.new
      @name.bitmap = Bitmap.new(140,32)
      @name.bitmap.font.size = FONT_SIZE
      @name.bitmap.font.bold = FONT_BOLD
      @org_pos_name = [@org_pos[0] + NAME_POSITION[0],
                       @org_pos[1] + NAME_POSITION[1]]
      @name.x = @org_pos_name[0]
      @name.y = @org_pos_name[1]
      @name.z = 11
     #@name.opacity = 0
      refresh_name     
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------      
  def refresh_name
      @name.bitmap.clear
      @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0)
  end  
  
  #--------------------------------------------------------------------------
  # ● Set Actor
  #--------------------------------------------------------------------------        
  def set_actor(actor)
      @actor = actor
  end
  
  #--------------------------------------------------------------------------
  # ● Can Refresh HP Meter
  #--------------------------------------------------------------------------         
  def can_refresh_hp_meter?
      return true if @hp_meter_old[0] != @actor.hp
      return true if @hp_meter_old[1] != @actor.mhp
      return false
  end
     
  #--------------------------------------------------------------------------
  # ● Can Refresh MP Meter
  #--------------------------------------------------------------------------         
  def can_refresh_mp_meter?
      return true if @mp_meter_old[0] != @actor.mp
      return true if @mp_meter_old[1] != @actor.mmp
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Parameter
  #--------------------------------------------------------------------------
  def can_refresh_parameter?
      return true if @par[0] != @actor.hp
      return true if @par[1] != @actor.mhp
      return true if @par[2] != @actor.mp
      return true if @par[3] != @actor.mmp
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------      
  def update_position
      update_slide(0,@layout,@layout.x,@org_pos[0])
      update_slide(1,@layout,@layout.y,@org_pos[1])
      update_slide(0,@parameter,@parameter.x,@org_pos_par[0])
      update_slide(1,@parameter,@parameter.y,@org_pos_par[1])
      update_slide(0,@hp_meter,@hp_meter.x,@org_pos_hp[0])
      update_slide(1,@hp_meter,@hp_meter.y,@org_pos_hp[1])  
      update_slide(0,@mp_meter,@mp_meter.x,@org_pos_mp[0])
      update_slide(1,@mp_meter,@mp_meter.y,@org_pos_mp[1])        
      update_slide(0,@face,@face.x,@org_pos_face[0])
      update_slide(1,@face,@face.y,@org_pos_face[1])        
      update_slide(0,@name,@name.x,@org_pos_name[0])
      update_slide(1,@name,@name.y,@org_pos_name[1])      
      update_slide(0,@status,@status.x,@org_pos_states[0])
      update_slide(1,@status,@status.y,@org_pos_states[1])         
  end

#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,cp,np)
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Opacity
  #--------------------------------------------------------------------------  
  def update_opacity
      @opac += 10
      @opac = 255 if @opac > 255
      set_opacity(@opac)
  end
  
  #--------------------------------------------------------------------------
  # ● Set Opacity
  #--------------------------------------------------------------------------   
  def set_opacity(opac)
      @layout.opacity = opac
      @layout.opacity = opac
      @parameter.opacity = opac
      @parameter.opacity = opac
      @hp_meter.opacity = opac
      @hp_meter.opacity = opac
      @mp_meter.opacity = opac
      @mp_meter.opacity = opac
      @face.opacity = opac
      @face.opacity = opac
      @name.opacity = opac
      @name.opacity = opac
      @status.opacity = opac
  end   

  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------      
  def set_position(pos_x,pos_y)
      @layout.x = @org_pos[0] + pos_x
      @layout.y = @org_pos[1] + pos_y
      @parameter.x = @org_pos_par[0] + pos_x
      @parameter.y = @org_pos_par[1] + pos_y
      @hp_meter.x = @org_pos_hp[0] + pos_x
      @hp_meter.y = @org_pos_hp[1] + pos_y
      @mp_meter.x = @org_pos_mp[0] + pos_x
      @mp_meter.y = @org_pos_mp[1] + pos_y
      @face.x = @org_pos_face[0] + pos_x
      @face.y = @org_pos_face[1] + pos_y
      @name.x = @org_pos_name[0] + pos_x
      @name.y = @org_pos_name[1] + pos_y
      @status.x = @org_pos_states[0] + pos_x
      @status.y = @org_pos_states[1] + pos_y
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      refresh_hp_meter if can_refresh_hp_meter?
      refresh_mp_meter if can_refresh_mp_meter?
      refresh_parameter if can_refresh_parameter?
      refresh_states if @status_old != @actor.states
      update_opacity
      update_position
      flow_states      
  end
  
end

#==============================================================================
# ■ Window_SkillCommand
#==============================================================================
class Window_SkillCommand_2 < Window_Command
  
  attr_reader   :skill_window
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y)
    @actor = nil
    @index_max = 0
  end

  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
    return 140
  end
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      @index_max = (@actor.added_skill_types.size - 1)
      @index_max = 0 if @index_max < 0
      refresh
      select_last
  end
  
  #--------------------------------------------------------------------------
  # ● Visible Line Number
  #--------------------------------------------------------------------------
  def visible_line_number
      return 4
  end
  
  #--------------------------------------------------------------------------
  # ● Make Command List
  #--------------------------------------------------------------------------
  def make_command_list
      return unless @actor
         @actor.added_skill_types.sort.each do |stype_id|
         name = $data_system.skill_types[stype_id]
         add_command(name, :skill, true, stype_id)
      end
  end

  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
      super
      @skill_window.stype_id = current_ext if @skill_window
     # update_index
  end

  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update_index
      return if @index_max <= 0
      if Input.trigger?(:RIGHT)
         add_index(1)
      elsif Input.trigger?(:LEFT)   
         add_index(-1)
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Add Index
  #--------------------------------------------------------------------------   
  def add_index(value)
      Sound.play_cursor
      @index += value
      @index = 0 if @index > @index_max
      @index = @index_max if @index < 0
  end
  
  #--------------------------------------------------------------------------
  # ● Skill Window
  #--------------------------------------------------------------------------
  def skill_window=(skill_window)
      @skill_window = skill_window
      update
  end  
  
  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      skill = @actor.last_skill.object
      if skill
         select_ext(skill.stype_id)
      else
         select(0)
      end
  end
   
end

#==============================================================================
# ■ Window_SkillList
#==============================================================================
class Window_SkillList_Menu < Window_Selectable
  
  attr_accessor :windows_index

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @stype_id = 0
      @data = []
      @windows_index = 0
      self.opacity = 0
      @actor = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Setup
  #--------------------------------------------------------------------------  
  def setup(actor,skill_type,index)
      @actor = actor
      @stype_id = skill_type
      @windows_index = index
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Stype ID
  #--------------------------------------------------------------------------
  def stype_id=(stype_id)
  end
  
  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end

  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @data ? @data.size : 1
  end

  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled
  #--------------------------------------------------------------------------
  def current_item_enabled?
      enable?(@data[index])
  end

  #--------------------------------------------------------------------------
  # ● Include
  #--------------------------------------------------------------------------
  def include?(item)
      item && item.stype_id == @stype_id
  end

  #--------------------------------------------------------------------------
  # ● Enable
  #--------------------------------------------------------------------------
  def enable?(item)
      @actor && @actor.usable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Male Item List
  #--------------------------------------------------------------------------
  def make_item_list
      @data = @actor ? @actor.skills.select {|skill| include?(skill) } : []
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select(@data.index(@actor.last_skill.object) || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      self.contents.font.size = 18
      self.contents.font.bold = true
      skill = @data[index]
      if skill
         rect = item_rect(index)
         rect.width -= 4
         draw_item_name(skill, rect.x, rect.y, enable?(skill),110)
         draw_skill_cost(rect, skill)
      end
  end

  #--------------------------------------------------------------------------
  # ● Draw Skill Cost
  #--------------------------------------------------------------------------
  def draw_skill_cost(rect, skill)
      if @actor.skill_tp_cost(skill) > 0
         change_color(tp_cost_color, enable?(skill))
         draw_text(rect, @actor.skill_tp_cost(skill), 2)
      elsif @actor.skill_mp_cost(skill) > 0
         change_color(mp_cost_color, enable?(skill))
         draw_text(rect, @actor.skill_mp_cost(skill), 2)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      @help_window.set_item(item)
  end

  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      make_item_list
      create_contents
      draw_all_items
  end
  
end

#==============================================================================
# ■ Scene Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------         
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_actor_status
      create_help_window
      create_command_window
      create_type_layout
      create_item_window
      create_list_layout
      create_actor_window
      create_type_name
      @command_window.active = true        
  end
  
  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_skill_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end  

  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_skill_menu[1]
      @layout.z = 3
  end
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Create Actor Status
  #--------------------------------------------------------------------------   
  def create_actor_status
      @actor_skill_status = Actor_Skill_Status.new(@actor)
  end  

  #--------------------------------------------------------------------------
  # ● Create Help Window
  #--------------------------------------------------------------------------              
  def create_help_window
      @help_window = Window_Help.new
      @help_window.x = 0
      @help_window.y = Graphics.height - @help_window.height
      @help_window.opacity = 0
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
      @command_window = Window_SkillCommand_2.new(0, 84)
      @command_window.help_window = @help_window
      @command_window.actor = @actor
      @command_window.set_handler(:skill,    method(:command_skill))
      @command_window.set_handler(:pagedown, method(:next_actor))
      @command_window.set_handler(:pageup,   method(:prev_actor))
      @command_window.active = false
      @command_window.opacity = 0
      @command_window.index = 0
      @command_window.visible = @scene_active
      @skill_list_slide_range = [@command_window.x, -(@command_window.x + @command_window.width)]
      @command_window.x = @skill_list_slide_range[1] - 80
      @command_window.opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Type Layout
  #--------------------------------------------------------------------------
  def create_type_layout
      @type_layout = Sprite.new
      @type_layout.bitmap = $game_temp.pre_cache_skill_menu[2]
      @type_layout.z = @command_window.z - 1
      @type_layout.x = @command_window.x
      @type_layout.y = @command_window.y - 30
      @type_layout.opacity = 0      
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Item Window
  #--------------------------------------------------------------------------
  def create_item_window
      @skill_window = []
      index = 0
      window_max = @actor.added_skill_types.size
      window_max = 1 if window_max == 0
      for item in 0...window_max
          @skill_window.push(Window_SkillList_Menu.new(170,95,205,240))
          @skill_window[index].setup(@actor,@actor.added_skill_types[index],index)
          @skill_window[index].help_window = @help_window
          @skill_window[index].set_handler(:ok,     method(:on_item_ok))
          @skill_window[index].set_handler(:cancel, method(:on_item_cancel))
          @skill_window[index].active = false
          @skill_window[index].index = -1
          @skill_window[index].opacity = 0
          @skill_window[index].contents_opacity = 0
          @item_slide_range = [@skill_window[index].x, @skill_window[index].x + 50]
          @skill_window[index].x = @item_slide_range[1]
          index += 1
      end  
      @item_pre_index = @skill_window[@command_window.index].index
      @old_command_index = @skill_window[@command_window.index].index
  end  
  
  #--------------------------------------------------------------------------
  # ● Create List Layout
  #--------------------------------------------------------------------------  
  def create_list_layout
      @list_layout = Sprite.new
      @list_layout.bitmap = $game_temp.pre_cache_skill_menu[3]
      @list_layout.z = @skill_window[@command_window.index].z - 1
      @list_layout.x = @item_slide_range[0] - 4
      @list_layout.y = @skill_window[@command_window.index].y - 20
      @list_layout.opacity = 0
      @list_layout_slide_range = [@list_layout.x,@list_layout.x + 50]
      @list_layout.x = @list_layout_slide_range[1]
  end
  
  #--------------------------------------------------------------------------
  # ● Create Actor Window
  #--------------------------------------------------------------------------
  def create_actor_window
      @actor_window = Members_Windows_Status.new
      @actor_window.set_handler(:ok,     method(:on_actor_ok))
      @actor_window.set_handler(:cancel, method(:on_actor_cancel))
      @actor_window.opacity = 0
      @actor_window.x = -10
      @actor_window.y = 36
      @actor_window_slide_range = [@actor_window.x, -@actor_window.width]
      @actor_window.x = @actor_window_slide_range[1]
      @actor_window.visible = true
      @actor_window_index_old = @actor_window.index
      create_members_window
      update_active
  end
  
  #--------------------------------------------------------------------------
  # ● Create Members Window
  #--------------------------------------------------------------------------  
  def create_members_window
      @actor_status = Actor_Menu_Status.new(@actor)
      index = 0
      @members_status = []      
      for actor in $game_party.members
          @members_status.push(Members_Menu.new(actor,index))
          index += 1
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Type Name
  #--------------------------------------------------------------------------  
  def create_type_name
      @type_name = Sprite.new
      @type_name.x = 260
      @type_name.y = 60
      @type_name.z = @list_layout.z + 2
      @type_name.bitmap = Bitmap.new(100,32)
      @type_name.bitmap.font.size = 18
      @type_name.bitmap.font.bold = true
      @type_name.opacity = 0
      refresh_type_name
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Type Name
  #--------------------------------------------------------------------------   
  def refresh_type_name
     @type_name.bitmap.clear
     return if !@scene_active
     stype_id = @actor.added_skill_types[@command_window.index]
     type_name = $data_system.skill_types[stype_id]
     @type_name.bitmap.draw_text(0,0,100,32,type_name,2)
  end
  
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_list_layout
      dispose_particles
      dispose_windows
      dispose_members_status
      dispose_type_name
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
   
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end   
  
#--------------------------------------------------------------------------
# ● Dispose Window
#--------------------------------------------------------------------------     
def dispose_windows
     return if @command_window == nil
     @skill_window.each {|sprite| sprite.dispose }
     @command_window.dispose
     @actor_window.dispose
     @help_window.dispose
end
   
#--------------------------------------------------------------------------
# ● Dispose List Layout
#--------------------------------------------------------------------------      
def dispose_list_layout
     return if @list_layout == nil
     @list_layout.dispose
     @type_layout.dispose
     @list_layout = nil
end
     
  #--------------------------------------------------------------------------
  # ● Dispose Members Status
  #--------------------------------------------------------------------------            
  def dispose_members_status
      return if @members_status == nil
      @actor_status.dispose
      @actor_skill_status.dispose
      @members_status.each {|sprite| sprite.dispose }
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose Type Name
  #--------------------------------------------------------------------------   
  def dispose_type_name
      @type_name.bitmap.dispose
      @type_name.dispose
  end  
  
end

#==============================================================================
# ■ Scene Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles     
      update_actor_status
      update_slide_item
      update_members_status
      update_windows
  end

  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
  
  #--------------------------------------------------------------------------
  # ● Update Windows
  #--------------------------------------------------------------------------   
  def update_windows
      @press_lag -= 1 if @press_lag > 0
      return if @command_window == nil
      for skw in @skill_window
          skw.update unless @press_lag > 0
          if skw.windows_index == @command_window.index
             skw.active = true
             if @phase == 0
                skw.index = 0 if skw.index < 0 or skw.index >= skw.item_max
             end   
             skw.visible = true
          else   
             skw.visible = false
             skw.active = false
          end  
      end
      #@skill_window[@command_window.index].update
      @command_window.update   
      @actor_window.update
      update_actor_window_slide
      update_skill_list_slide
  end
  
  #--------------------------------------------------------------------------
  # ● Update Skill List Slide
  #--------------------------------------------------------------------------      
  def update_skill_list_slide
      return if @phase == 999
      if @actor_window.active or !@command_window.active
         if @command_window.x > @skill_list_slide_range[1]
            @command_window.x -= 15
            @command_window.x = @skill_list_slide_range[1] if @command_window.x < @skill_list_slide_range[1]
         end  
      else
         if @command_window.x < @skill_list_slide_range[0]
            @command_window.x += 15
            @command_window.x = @skill_list_slide_range[0] if @command_window.x > @skill_list_slide_range[0]
         end         
      end  
      @type_layout.x = @command_window.x
  end
      
  #--------------------------------------------------------------------------
  # ● Update Actor Window Slide
  #--------------------------------------------------------------------------  
  def update_actor_window_slide
      if @actor_window.active
         if @actor_window.x < @actor_window_slide_range[0]
            @actor_window.x += 15
            @actor_window.contents_opacity += 23
            if @actor_window.x >= @actor_window_slide_range[0]
               @actor_window.x = @actor_window_slide_range[0]
               @actor_window.contents_opacity = 255
            end  
         end  
      else         
         if @actor_window.x >= @actor_window_slide_range[1]
            @actor_window.x -= 15
            @actor_window.contents_opacity -= 3
            if @actor_window.x <= @actor_window_slide_range[1]
               @actor_window.x = @actor_window_slide_range[1]
               @actor_window.contents_opacity = 0
            end         
         end
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Actor Status
  #--------------------------------------------------------------------------               
  def update_actor_status
      refresh_actor_status(true) if @actor_window_index_old != @actor_window.index
  end  
   
  #--------------------------------------------------------------------------
  # ● Refresh Actor Status
  #--------------------------------------------------------------------------               
  def refresh_actor_status(reset = false)
#      @actor = $game_party.members[@actor_window.index]
#      @actor_window_index_old = @actor_window.index
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Slide Item
  #--------------------------------------------------------------------------  
  def update_slide_item
      if @phase == 0
         @command_window.contents_opacity += 10
      else   
         @command_window.contents_opacity -= 10 if @command_window.contents_opacity > 160
      end  
      @type_layout.opacity = @command_window.contents_opacity
      @type_name.opacity = @skill_window[@command_window.index].contents_opacity
      if @phase == 1
         @skill_window[@command_window.index].contents_opacity += 5
         @list_layout.opacity += 5
      else   
         @skill_window[@command_window.index].contents_opacity -= 10 if @skill_window[@command_window.index].contents_opacity > 165
         @list_layout.opacity -= 10 if @list_layout.opacity > 160
      end  
      if @skill_window[@command_window.index].x > @item_slide_range[0]
         @skill_window[@command_window.index].x -= 3
         @list_layout.x -= 3
         if @skill_window[@command_window.index].x <= @item_slide_range[0]
            @skill_window[@command_window.index].x = @item_slide_range[0]
            @list_layout.x = @list_layout_slide_range[0]
         end  
      end  
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Members Status
  #--------------------------------------------------------------------------            
  def update_members_status
      for members in @members_status
          members.update(@actor_window.active,@actor_window.index)
          @actor_2 = members.actor if members.current_actor
      end  
      @actor_2 = @actor if @actor_2 == nil
      @actor_skill_status.update
      @actor_status.update(@actor_window.active,@actor_2)
      #@members_status.each {|sprite| sprite.update(@actor_window.active,@actor_window.index) }
  end  
  
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      unless @skill_window[@command_window.index].index < 0
          @item_pre_index = @skill_window[@command_window.index].index
      end   
      update_command
      update_sprites
  end
   
  #--------------------------------------------------------------------------
  # ● Show Sub Window
  #--------------------------------------------------------------------------
  def show_sub_window(window)
      window.show.activate
  end
  #--------------------------------------------------------------------------
  # ● Hide Sub Window
  #--------------------------------------------------------------------------
  def hide_sub_window(window)
      window.hide.deactivate
      activate_item_window     
  end
  
  #--------------------------------------------------------------------------
  # ● Determine Item
  #--------------------------------------------------------------------------
  def determine_item
      if item.for_friend?         
         @phase = 2
         show_sub_window(@actor_window)
         @actor_window.select_for_item(item)   
         $game_temp.item_scope = @skill_window[@command_window.index].item.scope rescue nil
      else
         use_item
         activate_item_window
      end
  end  
  
  #--------------------------------------------------------------------------
  # ● ON Item OK
  #--------------------------------------------------------------------------
  def on_item_ok
      return if @press_time > 1
      @actor.last_skill.object = item
      determine_item
  end
  
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
    @skill_window[@command_window.index].item
  end  
  
  #--------------------------------------------------------------------------
  # ● Use Item
  #--------------------------------------------------------------------------
  def use_item
      super
      @skill_window[@command_window.index].refresh if can_refresh_item_window?
  end  
  
  #--------------------------------------------------------------------------
  # ● Activate Item Window
  #--------------------------------------------------------------------------
  def activate_item_window   
    @skill_window[@command_window.index].refresh if can_refresh_item_window?
    @skill_window[@command_window.index].activate
  end  
  
  #--------------------------------------------------------------------------
  # ● On Item Cancel
  #--------------------------------------------------------------------------
  def on_item_cancel
      @skill_window[@command_window.index].unselect
      @command_window.activate
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Item Window
  #--------------------------------------------------------------------------  
  def can_refresh_item_window?
      return true if @actor.mp < @skill_window[@command_window.index].item.mp_cost
      return true if @actor.tp < @skill_window[@command_window.index].item.tp_cost
      return false
  end
      
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
      @skill_window[@command_window.index].index = @item_pre_index        
      if @phase == 0
         update_main_command
      elsif @phase == 1
         update_item_window
      elsif @phase == 2        
         update_target_window
      end        
      update_active
  end

  #--------------------------------------------------------------------------
  # ● Command Skill
  #--------------------------------------------------------------------------
  def command_skill
      @skill_window[@command_window.index].activate
      @skill_window[@command_window.index].select_last
   # @item_window.activate
   # @item_window.select_last
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Active
  #--------------------------------------------------------------------------      
  def update_active
      if @phase == 0
         @skill_window[@command_window.index].active = false
         @command_window.active = true
         @actor_window.active = false
      elsif @phase == 1
         @skill_window[@command_window.index].active = true
         @command_window.active = false
         @actor_window.active = false
      elsif @phase == 2
         @skill_window[@command_window.index].active = false
         @command_window.active = false
         @actor_window.active = true
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_main_command
      reset_item_index
      if Input.trigger?(:C) and @scene_active
         Sound.play_ok
         @phase = 1
         @press_time = 2
         @press_lag = 2
         @skill_window[@command_window.index].index = 0 if @skill_window[@command_window.index].index == -1
      elsif Input.trigger?(:B)
         return_scene
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
    end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      @phase = 999
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Skill)
  end
  
  #--------------------------------------------------------------------------
  # ● Reset Item Index
  #--------------------------------------------------------------------------            
  def reset_item_index
       return if @old_command_index == @command_window.index
       return if @command_window.index == -1
       @old_command_index = @command_window.index
       refresh_type_name
       reset_item_position
  end  
  
  #--------------------------------------------------------------------------
  # ● Reset Item Position
  #--------------------------------------------------------------------------              
  def reset_item_position
      @skill_window[@command_window.index].x = @item_slide_range[1]
      @skill_window[@command_window.index].contents_opacity = 160
      @list_layout.x = @list_layout_slide_range[1]
      @list_layout.opacity = 160
  end  
  
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update Item Window
  #--------------------------------------------------------------------------               
  def update_item_window
      @press_time -= 1 if @press_time > 0
      update_item_command
      update_index_type
  end
  
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_item_command
      if Input.trigger?(:B)
         @phase = 0
         Sound.play_cancel
      end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update_index_type
      return if @index_max <= 0
      return if @command_window == nil
      if Input.trigger?(:RIGHT)
         add_index(1)
      elsif Input.trigger?(:LEFT)   
         add_index(-1)
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Add Index
  #--------------------------------------------------------------------------   
  def add_index(value)
      Sound.play_cursor      
      @command_window.index += value
      @command_window.index = 0 if @command_window.index > @index_max
      @command_window.index = @index_max if @command_window.index < 0
      reset_item_index
  end   
  
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update Item Window
  #--------------------------------------------------------------------------               
  def update_target_window
      update_target_command
  end
  
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_target_command
      if Input.trigger?(:B)
         @phase = 1
         @skill_window[@command_window.index].index = @item_pre_index
       end  
  end  
  
end


#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Skill Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_equip_menu
      @pre_cache_equip_menu = []
      @pre_cache_equip_menu.push(Cache.menu_equip("Background"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Layout_U"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Layout_R"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Layout_D"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Layout_L"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Par_Number"))
  end   
   
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Equip
  include MOG_MENU_EQUIP
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @actor = $game_temp.actor_menu_temp
      @actor_old = @actor
      @phase = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Window_EquipStatus
#==============================================================================
class Window_EquipStatus < Window_Base
  
  #--------------------------------------------------------------------------
  # ● Initializee
  #--------------------------------------------------------------------------
  def initialize(x, y)
      super(x, y, window_width, window_height)
      @actor = nil
      @temp_actor = nil
      self.visible = false
  end
  
  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
      return 208
  end

  #--------------------------------------------------------------------------
  # ● Window Height
  #--------------------------------------------------------------------------
  def window_height
      return 296
  end

  #--------------------------------------------------------------------------
  # ● Visible Line Number
  #--------------------------------------------------------------------------
  def visible_line_number
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
  end

  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      contents.clear
  end

  #--------------------------------------------------------------------------
  # ● Set Temp Actor
  #--------------------------------------------------------------------------
  def set_temp_actor(temp_actor)
      return if @temp_actor == temp_actor
      @temp_actor = temp_actor
      $game_temp.temp_actor_equip = @temp_actor
  end

end

#==============================================================================
# ■ Window_EquipCommand
#==============================================================================
class Window_EquipCommand < Window_HorzCommand

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width)
      @window_width = width
      super(x, y)
  end
  
  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
      @window_width
  end

  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 3
  end

  #--------------------------------------------------------------------------
  # ● Make Command List
  #--------------------------------------------------------------------------
  def make_command_list
      add_command(Vocab::equip2,   :equip)
      add_command(Vocab::optimize, :optimize)
      add_command(Vocab::clear,    :clear)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------  
  def draw_item(index)
  end  
  
end

#==============================================================================
# ■ Window_EquipSlot
#==============================================================================
class Window_EquipSlot < Window_Selectable

  attr_reader   :status_window        
  attr_reader   :item_window

  include MOG_MENU_EQUIP
  
  #--------------------------------------------------------------------------
  # ● Set Equip Font
  #--------------------------------------------------------------------------         
  def set_font_equip
      return if self.disposed?
      return if self.contents == nil
      self.contents.font.size = FONT_SIZE
      self.contents.font.bold = FONT_BOLD
  end  
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width)
      super(x, y, width, window_height)
      @actor = nil   
      refresh
  end

  #--------------------------------------------------------------------------
  # ● Window Height
  #--------------------------------------------------------------------------
  def window_height
      fitting_height(visible_line_number)
  end
  
  #--------------------------------------------------------------------------
  # ● Visible Line Number
  #--------------------------------------------------------------------------
  def visible_line_number
      return 5
  end
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
      super
      @item_window.slot_id = index if @item_window
  end
  
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @actor ? @actor.equip_slots.size : 0
  end

  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @actor ? @actor.equips[index] : nil
  end

  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      return unless @actor
      rect = item_rect_for_text(index)
      change_color(system_color, enable?(index))
      set_font_equip
      draw_item_name(@actor.equips[index], rect.x + 92, rect.y, enable?(index))
  end
  
  #--------------------------------------------------------------------------
  # ● Slot Name
  #--------------------------------------------------------------------------
  def slot_name(index)
      @actor ? Vocab::etype(@actor.equip_slots[index]) : ""
  end

  #--------------------------------------------------------------------------
  # ● Enable
  #--------------------------------------------------------------------------
  def enable?(index)
      @actor ? @actor.equip_change_ok?(index) : false
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled
  #--------------------------------------------------------------------------
  def current_item_enabled?
    enable?(index)
  end
  
  #--------------------------------------------------------------------------
  # ● Status  Window
  #--------------------------------------------------------------------------
  def status_window=(status_window)
      @status_window = status_window
      call_update_help
  end

  #--------------------------------------------------------------------------
  # ● Item Window
  #--------------------------------------------------------------------------
  def item_window=(item_window)
      @item_window = item_window
      update
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      super
      @help_window.set_item(item) if @help_window
      $game_temp.temp_actor_equip = nil if @status_window
  end
  
end

#==============================================================================
# ■ Window_EquipItem
#==============================================================================
class Window_EquipItem_Menu < Window_ItemList
  
  attr_reader   :status_window   
  attr_accessor :windows_index
  
  include MOG_MENU_EQUIP
  
  #--------------------------------------------------------------------------
  # ● Set Equip Font
  #--------------------------------------------------------------------------         
  def set_font_equip
      return if self.disposed?
      return if self.contents == nil
      self.contents.font.size = FONT_SIZE
      self.contents.font.bold = FONT_BOLD
  end  
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @actor = nil
      @slot_id = 0
      @windows_index = 0
      self.visible = false
      self.opacity = 0
  end
  
  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end  
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Setup
  #--------------------------------------------------------------------------  
  def setup(actor,equip_type,index)
      @actor = actor
      @slot_id = equip_type
      @windows_index = index      
      refresh
  end  
  
  #--------------------------------------------------------------------------
  # ● Slot ID
  #--------------------------------------------------------------------------
  def slot_id=(slot_id)
  end
  
  #--------------------------------------------------------------------------
  # ● Include?
  #--------------------------------------------------------------------------
  def include?(item)
      return true if item == nil
      return false unless item.is_a?(RPG::EquipItem)
      return false if @slot_id < 0
      return false if item.etype_id != @actor.equip_slots[@slot_id]
      return @actor.equippable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Enable?
  #--------------------------------------------------------------------------
  def enable?(item)
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
  end
  
  #--------------------------------------------------------------------------
  # ● Status Window
  #--------------------------------------------------------------------------
  def status_window=(status_window)
      @status_window = status_window
      call_update_help
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      super
      if @actor && @status_window
         temp_actor = Marshal.load(Marshal.dump(@actor))
         temp_actor.force_change_equip(@slot_id, item)
         $game_temp.temp_actor_equip = temp_actor
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      item = @data[index]
      if item
          set_font_equip
          rect = item_rect(index)
          rect.width -= 4
          draw_item_name(item, rect.x, rect.y, enable?(item))
          draw_item_number(rect, item)
      end
  end      
  
  #--------------------------------------------------------------------------
  # ● Draw Item Number
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
      draw_text(rect, sprintf(": %2d", $game_party.item_number(item)), 2)
  end  
  
end

#==============================================================================
# ■ Actor Menu Status
#==============================================================================
class Actor_Equip_Status
  
  include MOG_EQUIP_STATUS  
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      @actor = actor
      @actor_old = @actor
      $game_temp.temp_actor_equip = nil
      @old_temp_actor = $game_temp.temp_actor_equip
      set_old_parameter
      create_sprites
  end

  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------  
  def create_sprites
      @parameter_number = $game_temp.pre_cache_equip_menu[5]
      @parameter_cw = @parameter_number.width / 11
      @parameter_ch = @parameter_number.height / 3
      create_layout
      create_face
      create_parameter
      create_name
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_face
      dispose_parameter
      dispose_name
  end

  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      @layout.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------   
  def dispose_face
      @face.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------      
  def dispose_parameter
      @parameter.bitmap.dispose
      @parameter.dispose
  end

  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      @name.bitmap.dispose
      @name.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_equip_menu[4]
      @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]]
      @layout.x = @org_pos[0] - 150
      @layout.y = @org_pos[1]
      @layout.z = 10
      @layout.opacity = 0
      @slide_range = (@org_pos[0] - 150)
  end

  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------
  def create_parameter
      @parameter = Sprite.new
      @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height)
      @org_pos_par = [@org_pos[0] + PAR_POSITION[0],
                      @org_pos[1] + PAR_POSITION[1]]
      @parameter.x = @org_pos_par[0] - 150
      @parameter.y = @org_pos_par[1]
      @parameter.z = 11
      @parameter.opacity = 0
      refresh_parameter
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------  
  def create_face
      @face = Sprite.new
      @org_pos_face = [@org_pos[0] + FACE_POSITION[0],
                       @org_pos[1] + FACE_POSITION[1]]
      @face.x = @org_pos_face[0] - 150
      @face.y = @org_pos_face[1]
      @face.z = 11
      @face.opacity = 0
      refresh_face
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------   
  def create_name
      @name = Sprite.new
      @name.bitmap = Bitmap.new(140,32)
      @name.bitmap.font.size = FONT_SIZE
      @name.bitmap.font.bold = FONT_BOLD
      @org_pos_name = [@org_pos[0] + NAME_POSITION[0],
                       @org_pos[1] + NAME_POSITION[1]]
      @name.x = @org_pos_name[0] - 150
      @name.y = @org_pos_name[1]
      @name.z = 11
      @name.opacity = 0
      refresh_name     
  end  
  
  #--------------------------------------------------------------------------
  # ● Set Old Parameter
  #--------------------------------------------------------------------------  
  def set_old_parameter
      @par = [] if @par == nil
      @par.clear
      @par = [
      @actor.param(0),@actor.param(1),@actor.param(2),@actor.param(3),
      @actor.param(4),@actor.param(5),@actor.param(6),@actor.param(7),
      @old_temp_actor
      ]
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Parameter
  #--------------------------------------------------------------------------
  def can_refresh_parameter?
      return true if @par[0] != @actor.param(0)
      return true if @par[1] != @actor.param(1)
      return true if @par[2] != @actor.param(2)
      return true if @par[3] != @actor.param(3)
      return true if @par[4] != @actor.param(4)
      return true if @par[5] != @actor.param(5)
      return true if @par[6] != @actor.param(6)
      return true if @par[7] != @actor.param(7)
      return true if @old_temp_actor != $game_temp.temp_actor_equip
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------      
  def refresh_name   
      @name.bitmap.clear
      @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------   
  def refresh_parameter
      set_old_parameter
      @parameter.bitmap.clear
      @old_temp_actor = $game_temp.temp_actor_equip
      x = 180      
      for p in 0...8
          y = 24 * p
          refresh_number(@parameter,@parameter_number,p,@parameter_cw,@parameter_ch,x,y,0)
      end      
      if $game_temp.temp_actor_equip != nil
         x = 180 - (@parameter_cw * 7)
         for p in 0...8
             y = 24 * p
             refresh_number(@parameter,@parameter_number,p,@parameter_cw,@parameter_ch,x,y,1)
         end     
     end
  end
   
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------     
  def refresh_number(sprite,image,p,number_cw,number_ch,x,y,type)
      value = @actor.param(p)
      new_value = 0
      ch = 0
      if type == 1         
         if $game_temp.temp_actor_equip != nil
            new_value = $game_temp.temp_actor_equip.param(p)
         end         
         d_value = new_value - value
         if d_value < 0
            ch = 2
         elsif d_value > 0
            ch = 1
         else
            ch = 0
         end   
         value = new_value
      end
      draw_arrow(sprite,image,number_cw,number_ch,x,y,ch)
      draw_number(sprite,image,value,number_cw,number_ch,x,y,ch)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Arrow
  #--------------------------------------------------------------------------        
  def draw_arrow(sprite,image,number_cw,number_ch,x,y,ch)
      nsrc_rect = Rect.new(number_cw * 10, number_ch * ch , number_cw , number_ch)
      sprite.bitmap.blt(x + number_cw, y, image, nsrc_rect)     
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Number
  #--------------------------------------------------------------------------      
  def draw_number(sprite,image,value,number_cw,number_ch,x,y,ch)
      number = value.truncate.abs.to_s.split(//)
      x2 = -number_cw * number.size
      for i in 0..number.size  - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, number_ch * ch , number_cw , number_ch)
          sprite.bitmap.blt(x + x2 + (number_cw  *  i), y, image, nsrc_rect)        
      end      
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------  
  def refresh_face
      face_name = "Face" + @actor.id.to_s
      @face.bitmap = Cache.menu(face_name.to_s)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Move
  #--------------------------------------------------------------------------  
  def update_move
      update_slide(0,@layout,@layout.x,@org_pos[0])
      update_slide(1,@layout,@layout.y,@org_pos[1])      
      update_slide(0,@parameter,@parameter.x,@org_pos_par[0])
      update_slide(1,@parameter,@parameter.y,@org_pos_par[1])
      update_slide(0,@face,@face.x,@org_pos_face[0])
      update_slide(1,@face,@face.y,@org_pos_face[1])
      update_slide(0,@name,@name.x,@org_pos_name[0])
      update_slide(1,@name,@name.y,@org_pos_name[1])
  end

#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,cp,np)
      sprite.opacity += 5
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end      
  
  #--------------------------------------------------------------------------
  # ● Refresh All
  #--------------------------------------------------------------------------  
  def refresh_all(actor)      
      @actor = actor
      refresh_parameter
      refresh_face
      refresh_name
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update(actor)
      update_move
      refresh_all(actor) if actor != @actor
      refresh_parameter if can_refresh_parameter?
  end      
  
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_help_window
      create_status_window
      create_command_window
      create_slot_window
      create_item_window
      create_actor_status
      set_sprite_position
  end
  
  #--------------------------------------------------------------------------
  # ● Set Sprite Position
  #--------------------------------------------------------------------------  
  def set_sprite_position
      @status_window.opacity = 0
      @command_window.opacity = 0
      @slot_window.opacity = 0
      @help_window.opacity = 0
      @status_window.contents_opacity = 0
      @command_window.contents_opacity = 0
      @slot_window.contents_opacity = 0
      @help_window.contents_opacity = 0      
      @layout2.opacity = 0
      @layout3.opacity = 0
      @layout4.opacity = 0
      @org_pos_help = [@help_window.x,@help_window.y]
      @help_window.x = @org_pos_help[0]
      @help_window.y = @org_pos_help[1] + 150     
      @org_pos_com = [@command_window.x,@command_window.y]
      @command_window.x = @org_pos_com[0]
      @command_window.y = @org_pos_com[1] - 150
      @org_pos_slot = [@slot_window.x,@slot_window.y]
      @slot_window.x = @org_pos_slot[0] + 150
      @slot_window.y = @org_pos_slot[1]      
      @layout2.y = -150
      @layout3.x = 150
      @layout4.y = 150      
  end
  
  #--------------------------------------------------------------------------
  # ● Create Actor Status
  #--------------------------------------------------------------------------  
  def create_actor_status
      @actor_status = Actor_Equip_Status.new(@actor)
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_equip_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout     
      @layout2 = Sprite.new
      @layout2.bitmap = $game_temp.pre_cache_equip_menu[1]
      @layout2.z = 3
      @layout3 = Sprite.new
      @layout3.bitmap = $game_temp.pre_cache_equip_menu[2]
      @layout3.z = 3
      @layout4 = Sprite.new
      @layout4.bitmap = $game_temp.pre_cache_equip_menu[3]
      @layout4.z = 3
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Help Window
  #--------------------------------------------------------------------------              
  def create_help_window
      @help_window = Window_Help.new
      @help_window.x = 0
      @help_window.y = Graphics.height - @help_window.height
  end     
  
  #--------------------------------------------------------------------------
  # ● Create Status Window
  #--------------------------------------------------------------------------
  def create_status_window
      @status_window = Window_EquipStatus.new(0, @help_window.height)
      @status_window.viewport = @viewport
      @status_window.actor = @actor
      @status_window.y = 48
  end

  #--------------------------------------------------------------------------
  # ● Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
      @command_window = Window_EquipCommand.new(208, 0, 336)
      @command_window.help_window = @help_window
      @command_window.set_handler(:equip,    method(:command_equip))
      @command_window.set_handler(:optimize, method(:command_optimize))
      @command_window.set_handler(:clear,    method(:command_clear))
      @command_window.set_handler(:cancel,   method(:return_scene))
      @command_window.set_handler(:pagedown, method(:next_actor))
      @command_window.set_handler(:pageup,   method(:prev_actor))
  end
  
  #--------------------------------------------------------------------------
  # ● Create Slot Window
  #--------------------------------------------------------------------------
  def create_slot_window
      wx = @status_window.width
      wy = @command_window.y + @command_window.height + 5
      ww = Graphics.width - @status_window.width
      @slot_window = Window_EquipSlot.new(wx, wy, ww)
      @slot_window.help_window = @help_window
      @slot_window.status_window = @status_window
      @slot_window.actor = @actor
      @slot_window.set_handler(:ok,       method(:on_slot_ok))
      @slot_window.set_handler(:cancel,   method(:on_slot_cancel))
      @slot_window.set_handler(:pagedown, method(:next_actor))
      @slot_window.set_handler(:pageup,   method(:prev_actor))  
  end
  
  #--------------------------------------------------------------------------
  # ● Create Item Window
  #--------------------------------------------------------------------------
  def create_item_window
      @equip_window = []
      index = 0
      window_max = 5
      for item in 0...window_max     
          wx = @slot_window.x
          wy = @slot_window.y + @slot_window.height + 5
          ww = @slot_window.width
          wh = @slot_window.height - 5
          @equip_window.push(Window_EquipItem_Menu.new(wx, wy, ww, wh))
          @equip_window[item].setup(@actor,item, index)
          @equip_window[item].visible = false
          @equip_window[item].help_window = @help_window
          @equip_window[item].status_window = @status_window
          @equip_window[item].actor = @actor
          @equip_window[item].set_handler(:ok,     method(:on_item_ok))
          @equip_window[item].set_handler(:cancel, method(:on_item_cancel))
          @equip_window[item].opacity = 0
          @org_pos_equip = [@equip_window[item].x,@equip_window[item].y]
          index += 1
       end     
  
   end
   
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_window
      dispose_actor_status
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout2 == nil
      @layout2.dispose
      @layout3.dispose
      @layout4.dispose
      @layout2 = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end     
  
  #--------------------------------------------------------------------------
  # ● Dispose Window
  #--------------------------------------------------------------------------         
  def dispose_window
      @status_window.dispose
      @command_window.dispose
      @slot_window.dispose
      @equip_window.each {|sprite| sprite.dispose }
      @help_window.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Actor Status
  #--------------------------------------------------------------------------  
  def dispose_actor_status
      return if @actor_status == nil
      @actor_status.dispose
  end   
  
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip   

  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites
      update_actor_status
      update_background
      update_particles
      update_window
      update_move
  end
  
  #--------------------------------------------------------------------------
  # ● Update Move
  #--------------------------------------------------------------------------
  def update_move
   
      update_slide(0,@command_window,@org_pos_com[0],0)
      update_slide(1,@command_window,@org_pos_com[1],0)
      
      update_slide(0,@help_window,@org_pos_help[0],0)
      update_slide(1,@help_window,@org_pos_help[1],0)      
   
      update_slide(0,@slot_window,@org_pos_slot[0],0)
      update_slide(1,@slot_window,@org_pos_slot[1],0)        
      
      update_slide(0,@layout2,0,1)
      update_slide(1,@layout2,0,1)
      
      update_slide(0,@layout3,0,1)
      update_slide(1,@layout3,0,1)      
      
      update_slide(0,@layout4,0,1)
      update_slide(1,@layout4,0,1)      
      
  end
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np,op_type)
      if op_type == 0
         sprite.contents_opacity += 5
      else
         sprite.opacity += 5
      end
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Actor Status
  #--------------------------------------------------------------------------            
  def update_actor_status
      return if @actor_status == nil
      @actor_status.update(@actor)
  end
   
  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Window
  #--------------------------------------------------------------------------            
  def update_window
      @status_window.update
      @command_window.update
      @slot_window.update
      for equip in @equip_window
          update_slide(0,equip,@org_pos_equip[0],0)
          update_slide(1,equip,@org_pos_equip[1],0)           
          if equip.windows_index == @slot_window.index
             equip.visible = true
             equip.update  
          else
             equip.visible = false
          end
      end  
  end
  
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_sprites
      update_command
  end
  
  #--------------------------------------------------------------------------
  # ● Command Equip
  #--------------------------------------------------------------------------
  def command_equip
      @slot_window.activate
      @slot_window.select(0)
  end

  #--------------------------------------------------------------------------
  # ● Command Optimize
  #--------------------------------------------------------------------------
  def command_optimize
      Sound.play_equip
      @actor.optimize_equipments
      @status_window.refresh
      @slot_window.refresh
      @command_window.activate
  end
  
  #--------------------------------------------------------------------------
  # ● Command Clear
  #--------------------------------------------------------------------------
  def command_clear
      Sound.play_equip
      @actor.clear_equipments
      @status_window.refresh
      @slot_window.refresh
      @command_window.activate
  end
  
  #--------------------------------------------------------------------------
  # ● On Slot OK
  #--------------------------------------------------------------------------
  def on_slot_ok
      @equip_window[@slot_window.index].activate
      @equip_window[@slot_window.index].select(0)
  end
  
  #--------------------------------------------------------------------------
  # ● On Slot Cancel
  #--------------------------------------------------------------------------
  def on_slot_cancel
      @slot_window.unselect
      @command_window.activate
  end
  
  #--------------------------------------------------------------------------
  # ● On Item OK
  #--------------------------------------------------------------------------
  def on_item_ok
      Sound.play_equip
      @actor.change_equip(@slot_window.index, @equip_window[@slot_window.index].item)
      @slot_window.activate
      @slot_window.refresh
      @equip_window.each do |i| i.refresh; i.index = 0; i.unselect end
  end
  
  #--------------------------------------------------------------------------
  # ● On Item Cancel
  #--------------------------------------------------------------------------
  def on_item_cancel
      @slot_window.activate
      @equip_window[@slot_window.index].unselect
  end
  
  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
    end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Equip)
  end  
  
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip

  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
   
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Status Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_status_menu
      @pre_cache_status_menu = []
      @pre_cache_status_menu.push(Cache.menu_status("Background"))
      @pre_cache_status_menu.push(Cache.menu_status("Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status
  include MOG_MENU_STATUS
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @actor = $game_temp.actor_menu_temp
      @actor_old = @actor
      @phase = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Window_Status
#==============================================================================
class Window_Status < Window_Selectable
  include MOG_MENU_STATUS
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      super(-16, -16, Graphics.width + 32, Graphics.height + 32)
      @actor = actor
      self.z = 10
      refresh
      activate
  end
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      contents.clear
      draw_description
      self.contents.font.size = 18
      self.contents.font.bold = true
      draw_actor_name
      draw_equipments
      draw_exp_info
      draw_parameters      
      draw_actor_hp_mp_tp
  end

  #--------------------------------------------------------------------------
  # ● Draw Actor Name
  #--------------------------------------------------------------------------  
  def draw_actor_name
      self.contents.font.size = 16
      text = @actor.class.name
      draw_text(240,185,100,32, text.to_s,1)      
      self.contents.font.size = 20   
      text = @actor.name
      draw_text(125,50,120,32, text.to_s,1)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Parameters
  #--------------------------------------------------------------------------
  def draw_parameters
      par = @actor.atk
      draw_text(43,112,80,32, par.to_s,2)
      par = @actor.def
      draw_text(43,146,80,32, par.to_s,2)
      par = @actor.mat
      draw_text(162 ,112,80,32, par.to_s,2)      
      par = @actor.mdf
      draw_text(162,146,80,32, par.to_s,2)      
      par = @actor.agi
      draw_text(282,112,80,32, par.to_s,2)         
      par = @actor.luk
      draw_text(282,146,80,32, par.to_s,2)
  end   
     
  #--------------------------------------------------------------------------
  # ● Draw Actor HP MP TP
  #--------------------------------------------------------------------------  
  def draw_actor_hp_mp_tp
      self.contents.font.size = 16
      par = @actor.hp.truncate
      draw_text(5,80,80,32, par.to_s,2)      
      par = @actor.mhp.truncate
      draw_text(50,80,80,32, par.to_s,2)           
      par = @actor.mp.truncate
      draw_text(123,80,80,32, par.to_s,2)      
      par = @actor.mmp.truncate
      draw_text(168,80,80,32, par.to_s,2)        
      par = @actor.tp.truncate
      draw_text(244,80,80,32, par.to_s,2)      
      par = @actor.max_tp.truncate
      draw_text(282,80,80,32, par.to_s,2)      
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Exp Info
  #--------------------------------------------------------------------------
  def draw_exp_info
      draw_text(200,10,64,32,@actor.level.to_s,1)
      s1 = @actor.max_level? ? "----------" : @actor.exp
      s2 = @actor.max_level? ? "----------" : @actor.next_level_exp - @actor.exp
      draw_text(300,10, 80, 32,s1.to_s, 1)
      draw_text(460,10, 80, 32,s2.to_s, 1)
  end

  #--------------------------------------------------------------------------
  # ● Draw Equipments
  #--------------------------------------------------------------------------
  def draw_equipments
      self.contents.font.size = 16
      item = @actor.equips[0]
      draw_item_name(item, 20, 220,true,140)
      item = @actor.equips[1]
      draw_item_name(item, 20, 220 + 43,true,140)
      item = @actor.equips[2]
      draw_item_name(item, 20, 220 + 86,true,140)      
      item = @actor.equips[3]
      draw_item_name(item, 196, 242,true,140)      
      item = @actor.equips[4]
      draw_item_name(item, 196, 242 + 43,true,140)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Description
  #--------------------------------------------------------------------------
  def draw_description
      draw_text_ex(20, height - 96,@actor.description)
  end

  #--------------------------------------------------------------------------
  # ● Next Actor
  #--------------------------------------------------------------------------
  def next_actor
      $game_temp.actor_menu_temp = $game_party.menu_actor_next
      on_actor_change
  end
  #--------------------------------------------------------------------------
  # ● Prev Actor
  #--------------------------------------------------------------------------
  def prev_actor
      $game_temp.actor_menu_temp = $game_party.menu_actor_prev
      on_actor_change
  end  
  
  #--------------------------------------------------------------------------
  # ● On Actor Change
  #--------------------------------------------------------------------------
  def on_actor_change
      Sound.play_cursor
      SceneManager.goto(Scene_Status)
  end  
  
end

module MOG_STATUS_PARAMETER
  PICTURE_POS = [-105,0]
  METER_POSITION = [53,101]
  STATES_POSITION = [21,46]
  STATES_SCROLLING_ANIMATION = false
  MAX_PARAMETER_VALUE = 999
end
#==============================================================================
# ■ Status Parameter
#==============================================================================
class Status_Parameter
  
  include MOG_STATUS_PARAMETER
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      @actor = actor
      create_picture
      create_states
      create_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Create Picture
  #--------------------------------------------------------------------------   
  def create_picture
      @picture = Sprite.new
      pic_name = "Actor_S" + @actor.id.to_s
      @picture.bitmap = Cache.menu_status(pic_name.to_s)
      @picture.ox = @picture.bitmap.width / 2
      pos = [Graphics.width,Graphics.height - @picture.bitmap.height]
      @pos_org_pic = [PICTURE_POS[0] + pos[0] ,PICTURE_POS[1] + pos[1]]
      @picture.x = @pos_org_pic[0]
      @picture.y = @pos_org_pic[1] + 150
      @picture.opacity = 0
      @picture.z = 3
  end  
  
  #--------------------------------------------------------------------------
  # ● Create_States
  #--------------------------------------------------------------------------      
  def create_states
      @status_old = nil
      @status_flow = [-24,0]   
      @status = Sprite.new
      @status.bitmap = Bitmap.new(24,24)
      @org_pos_states = [STATES_POSITION[0],STATES_POSITION[1]]      
      @status.x = @org_pos_states[0] + 150
      @status.y = @org_pos_states[1]
      @status.z = 11
      @status.opacity = 0
  end      

  #--------------------------------------------------------------------------
  # * Refresh States
  #--------------------------------------------------------------------------        
  def refresh_states
      check_icon_image
      @status_old = @actor.states
      @status_flow = [0,0]
      @actor_status.dispose if @actor_status != nil
      @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24
      @actor_status = Bitmap.new(@states_size,24)
      index = 0
      for i in @actor.states
         rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24)
         @actor_status.blt(26 * index , 0, @icon_image, rect)
         index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # * Flow_Status
  #--------------------------------------------------------------------------         
  def flow_states
      return if @actor_status == nil
      @status.bitmap.clear
      return if @actor.states.size == 0
      st_src_rect = Rect.new(@status_flow[0],0, 24,24)
      @status.bitmap.blt(0,0, @actor_status, st_src_rect)
      if STATES_SCROLLING_ANIMATION
         @status_flow[0] += 1
         @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2
      else   
         @status_flow[1] += 1 unless @actor.states.size <= 1
         if @status_flow[1] > 30
            @status_flow[1] = 0
            @status_flow[0] += 26
            @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0)
         end   
     end   
  end        
  
  #--------------------------------------------------------------------------
  # * Check Icon Image
  #--------------------------------------------------------------------------         
  def check_icon_image
      if @icon_image == nil or @icon_image.disposed?
         @icon_image = Cache.system("Iconset")
      end   
  end   
  
  #--------------------------------------------------------------------------
  # * Create Meter
  #--------------------------------------------------------------------------            
  def create_meter
      @meter_image = Cache.menu_status("Par_Meter")
      @meter_cw = @meter_image.width / 3
      @meter_ch = @meter_image.height / 4
      @meter = Sprite.new
      @meter.bitmap = Bitmap.new(380,140)
      @org_pos_meter = [METER_POSITION[0],METER_POSITION[1]]      
      @meter.x = @org_pos_meter[0] + 150
      @meter.y = @org_pos_meter[1]
      @meter.z = 11  
      @meter.opacity = 0
      @meter_flow = [0,@meter_cw * 2]      
      refresh_meter
  end  
  
  #--------------------------------------------------------------------------
  # * Refresh Meter
  #--------------------------------------------------------------------------            
  def refresh_meter
      @meter.bitmap.clear
      max_par = MAX_PARAMETER_VALUE
      value = @actor.hp
      value_max = @actor.mhp
      pos = [0,0]
      draw_meter(value,value_max,0,pos[0],pos[1])
      value = @actor.mp
      value_max = @actor.mmp
      pos = [120,0]
      draw_meter(value,value_max,1,pos[0],pos[1])
      value = @actor.tp
      value_max = @actor.max_tp
      pos = [240,0]
      draw_meter(value,value_max,2,pos[0],pos[1])         
      value = @actor.atk
      value_max = max_par
      pos = [0,34]
      draw_meter(value,value_max,3,pos[0],pos[1])      
      value = @actor.mat
      value_max = max_par
      pos = [120,34]
      draw_meter(value,value_max,3,pos[0],pos[1])         
      value = @actor.agi
      value_max = max_par
      pos = [240,34]
      draw_meter(value,value_max,3,pos[0],pos[1])      
      value = @actor.def
      value_max = max_par
      pos = [0,68]
      draw_meter(value,value_max,3,pos[0],pos[1])      
      value = @actor.mdf
      value_max = max_par
      pos = [120,68]
      draw_meter(value,value_max,3,pos[0],pos[1])         
      value = @actor.luk
      value_max = max_par
      pos = [240,68]
      draw_meter(value,value_max,3,pos[0],pos[1])      
      @meter_flow[0] += 5
      @meter_flow[0] = 0 if @meter_flow[0] > @meter_flow[1]
  end
  
  #--------------------------------------------------------------------------
  # * Draw Meter
  #--------------------------------------------------------------------------              
  def draw_meter(value,value_max,type,x,y)
      value_max = 1 if value_max <= 0
      range = @meter_cw * value.truncate / value_max.truncate
      ch = @meter_ch * type
      meter_scr = Rect.new(@meter_flow[0],ch,range,@meter_ch)
      @meter.bitmap.blt(x,y,@meter_image,meter_scr)
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_picture
      dispose_states
      dispose_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Picture
  #--------------------------------------------------------------------------   
  def dispose_picture
      @picture.bitmap.dispose
      @picture.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose States
  #--------------------------------------------------------------------------            
   def dispose_states
       return if @status == nil
       @status.bitmap.dispose
       @status.dispose
       if @actor_status != nil
          @actor_status.dispose
          @actor_status = nil
       end   
   end     
  
  #--------------------------------------------------------------------------
  # ● Dispose Meter
  #--------------------------------------------------------------------------            
   def dispose_meter
       return if @meter == nil
       @meter.bitmap.dispose
       @meter.dispose
   end     
     
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      update_slide(0,@picture,@pos_org_pic[0])
      update_slide(1,@picture,@pos_org_pic[1])
      update_slide(0,@status,@org_pos_states[0])
      update_slide(1,@status,@org_pos_states[1])   
      update_slide(0,@meter,@org_pos_meter[0])
      update_slide(1,@meter,@org_pos_meter[1])         
      refresh_states if @status_old != @actor.states
      refresh_meter
      flow_states      
  end
  
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np)
      sprite.opacity += 5
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   
  
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_status_window
      create_parameter
  end

  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_status_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout     
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_status_menu[1]
      @layout.z = 9
      @layout.x = -150
      @layout.opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
   
  #--------------------------------------------------------------------------
  # ● Create Status Window
  #--------------------------------------------------------------------------  
  def create_status_window
      @status_window = Window_Status.new(@actor)
      @status_window.set_handler(:cancel,   method(:return_scene))
      @status_window.set_handler(:pagedown, method(:next_actor))
      @status_window.set_handler(:pageup,   method(:prev_actor))
      @org_pos_win = [@status_window.x,@status_window.y]
      @status_window.x += 150
      @status_window.opacity = 0
      @status_window.contents_opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------   
  def create_parameter
      @parameter = Status_Parameter.new(@actor)
  end
  
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_status_window
      dispose_parameter
   end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end     
  
  #--------------------------------------------------------------------------
  # ● Dispose Status Window
  #--------------------------------------------------------------------------  
  def dispose_status_window
      return if @status_window == nil
      @status_window.dispose
  end  

  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------   
  def dispose_parameter
      return if @parameter == nil
      @parameter.dispose
  end  
  
end

#==============================================================================
# ■ Scene Status
#==============================================================================
class Scene_Status
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles     
      update_status_window
      update_parameter
      update_move
  end

  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------  
  def update_status_window
      return if @status_window == nil
      @status_window.update
  end
   
  #--------------------------------------------------------------------------
  # ● Update Move
  #--------------------------------------------------------------------------      
  def update_move
      update_slide(0,@status_window,@org_pos_win[0],0)
      update_slide(1,@status_window,@org_pos_win[1],0)
      update_slide(0,@layout,0,1)
      update_slide(1,@layout,0,1)     
  end  
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np,opa)
      if opa == 0
         sprite.contents_opacity += 5
      else   
         sprite.opacity += 5
      end  
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Parameter
  #--------------------------------------------------------------------------   
  def update_parameter
      return if @parameter == nil
      @parameter.update
  end   
  
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_sprites
      update_command
  end

  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
  end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      Sound.play_cursor
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Status)
  end  
  
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status

  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
      update_next_actor
  end
  
  #--------------------------------------------------------------------------
  # ● Update Next Actor
  #--------------------------------------------------------------------------        
  def update_next_actor
      if Input.trigger?(:RIGHT)
         @status_window.next_actor
       elsif Input.trigger?(:LEFT)
         @status_window.prev_actor
      end
  end
  
end



#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Party Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_party_menu
      @pre_cache_party_menu = []
      @pre_cache_party_menu.push(Cache.menu_party("Background"))
      @pre_cache_party_menu.push(Cache.menu_party("Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  include MOG_MENU_PARTY
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @phase = 0
      @actor = $game_party.members[0]
      @actor_old = @actor
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Actor Menu Status Party
#==============================================================================
class Actor_Menu_Status_Party
  
  include MOG_ACTOR_MENU_PARTY
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
      @active = false
      @max_members = $game_party.max_battle_members
      @max_members = $game_party.members.size if @max_members > $game_party.members.size
      create_sprites
  end

  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------  
  def create_sprites
      @face = []
      @face_org = []
      @name = []
      @name_org = []
      @actor_id = []
      space = 70
      index = 0
      for actor in $game_party.members  
         @face.push(Sprite.new)
         @face_org[index] = [FACE_POSITION[0],FACE_POSITION[1] + space * index]
         @face[index].x = @face_org[index][0] + 150 + (150 * index)
         @face[index].y = @face_org[index][1]
         @face[index].z = 10   
         @name.push(Sprite.new)
         @name[index].bitmap = Bitmap.new(200,120)
         @name[index].bitmap.font.size = FONT_SIZE
         @name[index].bitmap.font.bold = FONT_BOLD
         @name_org[index] = [NAME_POSITION[0],NAME_POSITION[1] + space * index]
         @name[index].x = @name_org[index][0] + 150 + (150 * index)
         @name[index].y = @name_org[index][1]
         @name[index].z = 11
         @actor_id[index] = actor.id
         index += 1
         break if index >= @max_members
      end
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Position
  #--------------------------------------------------------------------------   
  def refresh_position(actor,index)
      @actor_id[index] = actor.id
      @face[index].x = @face_org[index][0] + 150 + (150 * index)
      @name[index].x = @name_org[index][0] + 150 + (150 * index)   
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  def dispose
      @face.each {|sprite| sprite.dispose }
      @name.each {|sprite| sprite.bitmap.dispose }
      @name.each {|sprite| sprite.dispose }
  end
   
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------      
  def refresh
      index = 0
      for actor in $game_party.members  
          face_name = "Face_B" + actor.id.to_s
          @face[index].bitmap = Cache.menu(face_name.to_s)
          @name[index].bitmap.clear
          @name[index].bitmap.draw_text(100,28,64,32,"LV " + actor.level.to_s,0)
          aname = actor.name
          @name[index].bitmap.draw_text(0,0,100,32,aname.to_s,0)
          refresh_position(actor,index) if @actor_id[index] != actor.id
          index += 1
          break if index >= @max_members
      end
  end
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np)
      sprite.opacity += 5
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end      
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update(actor)
      for index in [email protected]
          update_slide(0,@face[index],@face_org[index][0])
          update_slide(1,@face[index],@face_org[index][1])
          update_slide(0,@name[index],@name_org[index][0])
          update_slide(1,@name[index],@name_org[index][1])
      end      
  end      
  
end

#==============================================================================
# ■ Window_MenuStatus Party
#==============================================================================
class Window_MenuStatus_Party < Window_Selectable
  attr_reader   :pending_index           
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y)
      super(x, y, window_width, window_height)
      @pending_index = -1
      self.opacity = 0
      self.contents.font.bold = true
      self.contents.font.size = 18
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
      Graphics.width - 160
  end

  #--------------------------------------------------------------------------
  # ● Window Height
  #--------------------------------------------------------------------------
  def window_height
      Graphics.height
  end
  
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      $game_party.members.size
  end

  #--------------------------------------------------------------------------
  # ● Item Height
  #--------------------------------------------------------------------------
  def item_height
    (height - standard_padding * 2) / 4
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    actor = $game_party.members[index]
    enabled = $game_party.battle_members.include?(actor)
    rect = item_rect(index)
    draw_item_background(index)
    draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)
    self.contents.font.color = Color.new(255,155,55,255)
    draw_text(rect.x + 60,rect.y + 23,64,32,"LV",2)
    draw_text(rect.x + 60,rect.y + 43,64,32,"HP",2)
    draw_text(rect.x + 60,rect.y + 63,64,32,"MP",2)
   
    draw_text(rect.x + 140,rect.y + 23,64,32,"Atk",2)
    draw_text(rect.x + 140,rect.y + 43,64,32,"Def",2)
    draw_text(rect.x + 140,rect.y + 63,64,32,"Agi",2)   
   
    draw_text(rect.x + 220,rect.y + 23,64,32,"Mag",2)
    draw_text(rect.x + 220,rect.y + 43,64,32,"Mdf",2)
    draw_text(rect.x + 220,rect.y + 63,64,32,"Luk",2)      
   
    self.contents.font.color = Color.new(255,255,255,255)
    draw_text(rect.x + 105,rect.y,105,32,actor.name,0)

    draw_text(rect.x + 105,rect.y + 23,64,32,actor.level,2)
    draw_text(rect.x + 105,rect.y + 43,64,32,actor.mhp,2)
    draw_text(rect.x + 105,rect.y + 63,64,32,actor.mmp,2)   
   
   
    draw_text(rect.x + 185,rect.y + 23,64,32,actor.atk,2)
    draw_text(rect.x + 185,rect.y + 43,64,32,actor.def,2)
    draw_text(rect.x + 185,rect.y + 63,64,32,actor.agi,2)   
   
    draw_text(rect.x + 265,rect.y + 23,64,32,actor.mat,2)
    draw_text(rect.x + 265,rect.y + 43,64,32,actor.mdf,2)
    draw_text(rect.x + 265,rect.y + 63,64,32,actor.luk,2)      
   
  end
  
  
  #--------------------------------------------------------------------------
  # ● Draw Item Background
  #--------------------------------------------------------------------------
  def draw_item_background(index)
      if index == @pending_index
        contents.fill_rect(item_rect(index), pending_color)
      end
  end

  #--------------------------------------------------------------------------
  # ● Process OK
  #--------------------------------------------------------------------------
  def process_ok
      super
      $game_party.menu_actor = $game_party.members[index]
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select($game_party.menu_actor.index || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Pending Index
  #--------------------------------------------------------------------------
  def pending_index=(index)
      last_pending_index = @pending_index
      @pending_index = index
      redraw_item(@pending_index)
      redraw_item(last_pending_index)
  end
end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_status_window
      create_actor_menu
  end
  
  #--------------------------------------------------------------------------
  # ● Create Status Window
  #--------------------------------------------------------------------------
  def create_status_window
      @status_window = Window_MenuStatus_Party.new(0, 0)
      command_formation
  end  

  #--------------------------------------------------------------------------
  # ● Create Actor Menu
  #--------------------------------------------------------------------------  
  def create_actor_menu
      @actor_status = Actor_Menu_Status_Party.new   
  end
  
  #--------------------------------------------------------------------------
  # ● Command Personal
  #--------------------------------------------------------------------------
  def command_personal
    @status_window.select_last
    @status_window.activate
    @status_window.set_handler(:ok,     method(:on_personal_ok))
    @status_window.set_handler(:cancel, method(:on_personal_cancel))
  end
  
  #--------------------------------------------------------------------------
  # ● Command Formation
  #--------------------------------------------------------------------------
  def command_formation
    @status_window.index = 0
    @old_index = @status_window.index
    @status_window.activate
    @status_window.set_handler(:ok,     method(:on_formation_ok))
    @status_window.set_handler(:cancel, method(:on_formation_cancel))
  end

  #--------------------------------------------------------------------------
  # ● On Personal Cancel
  #--------------------------------------------------------------------------
  def on_personal_cancel
      @status_window.unselect
  end
  
  #--------------------------------------------------------------------------
  # ● On Formation OK
  #--------------------------------------------------------------------------
  def on_formation_ok   
      if @status_window.pending_index >= 0
        $game_party.swap_order(@status_window.index,
                               @status_window.pending_index)
        @status_window.pending_index = -1
        @status_window.redraw_item(@status_window.index)
        @actor_status.refresh
      else
        @status_window.pending_index = @status_window.index        
      end
      @status_window.activate
  end
  
  #--------------------------------------------------------------------------
  # ● On Formation Cancel
  #--------------------------------------------------------------------------
  def on_formation_cancel
      if @status_window.pending_index >= 0
         @status_window.pending_index = -1
         @status_window.activate         
      else
         return_scene
      end
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_party_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout     
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_party_menu[1]
      @layout.z = 3
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
   
end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_status_window
      dispose_actor_menu
   end

  #--------------------------------------------------------------------------
  # ● Dispose Status Window
  #--------------------------------------------------------------------------           
   def dispose_status_window
       @status_window.dispose
   end
     
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end     

#--------------------------------------------------------------------------
# ● Dispose Actor Menu
#--------------------------------------------------------------------------   
def dispose_actor_menu
     return if @actor_status == nil
     @actor_status.dispose
end   

end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles
      update_status_window
  end
  
  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
  
  #--------------------------------------------------------------------------
  # ● Update Status Window
  #--------------------------------------------------------------------------   
  def update_status_window
      return if @status_window == nil
      @status_window.update
      update_slide(0,@status_window,0)
      update_slide(1,@status_window,0)
      @actor = $game_party.members[@status_window.index]
      @actor_status.update(@actor)
  end

#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np)
      sprite.contents_opacity += 5
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   

end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_sprites
      update_command
  end

  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
  end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Status)
  end  
  
end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party

  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
   
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache File Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_file_menu
      @pre_cache_file_menu = []
      @pre_cache_file_menu.push(Cache.menu_save("Background"))
      @pre_cache_file_menu.push(Cache.menu_save("Layout"))
      @pre_cache_file_menu.push(Cache.menu_save("File_Mode"))
      @pre_cache_file_menu.push(Cache.menu_save("File_layout_1"))
      @pre_cache_file_menu.push(Cache.menu_save("File_layout_2"))
      @pre_cache_file_menu.push(Cache.menu_save("File_layout_3"))
      @pre_cache_file_menu.push(Cache.menu_save("Character_Floor"))
      @pre_cache_file_menu.push(Cache.menu_save("File_Number"))
  end   
   
end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp

  attr_accessor :scene_save
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_scene_file_initialize initialize
  def initialize
      mog_scene_file_initialize
      @scene_save = false  
  end
  
end
   
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
  
  #--------------------------------------------------------------------------
  # ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index)     
  #--------------------------------------------------------------------------
  # X - Posição na horizontal
  # Y - Posição na vertical
  # VALUE - Valor Numérico
  # FILE_NAME - Nome do arquivo
  # ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita  
  # SPACE - Espaço entre os números.
  # FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter.
  # FRAME_INDEX - Definição do quadro a ser utilizado.
  #--------------------------------------------------------------------------  
  def draw_picture_number_file(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0)     
      number_image = $game_temp.pre_cache_file_menu[7]
      frame_max = 1 if frame_max < 1
      frame_index = frame_max -1 if frame_index > frame_max -1
      align = 2 if align > 2
      cw = number_image.width / 10
      ch = number_image.height / frame_max
      h = ch * frame_index
      number = value.abs.to_s.split(//)
      case align
         when 0
            plus_x = (-cw + space) * number.size
         when 1
            plus_x = (-cw + space) * number.size
            plus_x /= 2
         when 2  
            plus_x = 0
      end
      for r in 0..number.size - 1      
          number_abs = number[r].to_i
          number_rect = Rect.new(cw * number_abs, h, cw, ch)
          self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect)        
      end   
  end
   
  #--------------------------------------------------------------------------
  # ● Draw Help Layout
  #--------------------------------------------------------------------------
  def draw_face_save(name,x,y,type)
      if type == 0
         image_name = name + "_0"
      elsif type == 1
         image_name = name + "_1"         
      else  
         image_name = name + "_2"
      end
      image = Cache.face(image_name)   
      cw = image.width  
      ch = image.height
      src_rect = Rect.new(0, 0, cw, ch)   
      self.contents.blt(x , y , image, src_rect)  
      image.dispose
  end   
   
  #--------------------------------------------------------------------------
  # ● draw_parameter_layout
  #--------------------------------------------------------------------------  
  def draw_parameter_layout(x,y)
      image = $game_temp.pre_cache_file_menu[3]
      cw = image.width  
      ch = image.height
      src_rect = Rect.new(0, 0, cw, ch)   
      self.contents.blt(x , y , image, src_rect)     
  end   
  
  #--------------------------------------------------------------------------
  # ● draw_parameter_layout2
  #--------------------------------------------------------------------------  
  def draw_parameter_layout2(x,y,type)
      if type == 0
         image = $game_temp.pre_cache_file_menu[4]
      else   
         image = $game_temp.pre_cache_file_menu[5]
      end  
      cw = image.width  
      ch = image.height
      src_rect = Rect.new(0, 0, cw, ch)   
      self.contents.blt(x , y , image, src_rect)     
  end      
  
  #--------------------------------------------------------------------------
  # ● draw_character_floor
  #--------------------------------------------------------------------------  
  def draw_character_floor(x,y)
      image = $game_temp.pre_cache_file_menu[6]
      cw = image.width  
      ch = image.height
      src_rect = Rect.new(0, 0, cw, ch)   
      self.contents.blt(x , y , image, src_rect)   
  end
  
end  

#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager

  #--------------------------------------------------------------------------
  # ● Make Save Header
  #--------------------------------------------------------------------------  
  def self.make_save_header
      header = {}
      header[:characters] = $game_party.characters_for_savefile
      header[:playtime_s] = $game_system.playtime_s
      header[:playtime] = $game_system.playtime
      header[:map_name] = $game_map.display_name
      header[:members] = $game_party.members
      header
  end  
   
end  

#==============================================================================
# ■ Scene Save
#==============================================================================
class Scene_Save < Scene_File

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
      $game_temp.scene_save = true
      super
  end  

end  

#==============================================================================
# ■ Scene Load
#==============================================================================
class Scene_Load < Scene_File

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
      $game_temp.scene_save = false
      super
  end  

end

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File
  include MOG_MENU_SAVE
  
#--------------------------------------------------------------------------
# ● Main
#--------------------------------------------------------------------------         
def main
     $game_temp.execute_pre_cache_file_menu
     create_sprites
     Graphics.transition(10)
     execute_loop
     execute_dispose
end   

#--------------------------------------------------------------------------
# ● Execute Loop
#--------------------------------------------------------------------------           
def execute_loop
     loop do
          Graphics.update
          Input.update
          update
          if SceneManager.scene != self
              break
          end
     end
end   

end

#==============================================================================
# ■ Window_SaveFile
#==============================================================================
class Window_SaveFile_A < Window_Base
  attr_reader   :filename               
  attr_reader   :file_exist               
  attr_reader   :time_stamp              
  attr_reader   :selected                 
  attr_reader   :file_index
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(file_index, filename)
      super(0, 0,720, 140)
      self.opacity = 0
      @file_index = file_index
      @filename = filename
      load_gamedata
      refresh
      @selected = false
  end
  
  #--------------------------------------------------------------------------
  # ● load_gamedata
  #--------------------------------------------------------------------------
  def load_gamedata
    @time_stamp = Time.at(0)
    @file_exist = FileTest.exist?(@filename)
    if @file_exist
       header = DataManager.load_header(@file_index)
       if header == nil
          @file_exist = false
          return
       end  
       @characters = header[:characters]
       @total_sec = header[:playtime]
       @mapname = header[:map_name]
       @members = header[:members]
    end
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      self.contents.clear
      self.contents.font.color = normal_color
      xp = 96
      ex = 60   
      if @file_exist
         if @total_sec == nil
            draw_parameter_layout2(0,50,0)
            draw_parameter_layout(-10 + xp,0)
            value = @file_index + 1
            draw_picture_number_file(13 + xp, 32,value, "File_Number_01",1,0,3,0)           
            self.contents.draw_text(140, 50, 450, 32, "Error! - Please, dont't use your old Save Files...", 0)
            return
        end  
        draw_parameter_layout2(0,50,0)
        draw_parameter_layout(-10 + xp,0)
        value = @file_index + 1
        draw_picture_number_file(13 + xp, 32,value, "File_Number_01",1,0,3,0)
        draw_party_characters(180 + xp, 75,ex)
        draw_playtime(495, 20, contents.width - 4, 2)
        draw_map_location( 400 + xp,64)
        draw_level(185 + xp,85,ex)
        draw_face_save(40 + xp,0)
      else  
        draw_parameter_layout2(0,50,1)
        draw_parameter_layout(-10 + xp,0)
        value = @file_index + 1
        draw_picture_number_file(13 + xp, 32,value, "File_Number_01",1,0,3,0)      
         self.contents.draw_text(260, 50, 120, 32, "No Data", 1)
      end
    end
   
  #--------------------------------------------------------------------------
  # ● draw_face
  #--------------------------------------------------------------------------
  def draw_face_save(x,y)
     draw_actor_face(@members[0], x, y)
  end
  
  #--------------------------------------------------------------------------
  # ● draw_level
  #--------------------------------------------------------------------------
  def draw_level(x,y,ex)
      self.contents.font.color = normal_color   
      for i in [email protected]
        break if i > 3
        level = @members.level
        draw_picture_number_file(x + (ex  * i) , y ,level, "File_Number_01",1,0,3,1)
      end        
  end
  
  #--------------------------------------------------------------------------
  # ● draw_map_location
  #--------------------------------------------------------------------------
  def draw_map_location(x,y)
      self.contents.font.bold = true
      self.contents.font.size = 20
      self.contents.font.italic = true
      self.contents.draw_text(x, y, 125, 32, @mapname.to_s, 0)
  end
  #--------------------------------------------------------------------------
  # ● draw_party_characters
  #--------------------------------------------------------------------------
  def draw_party_characters(x, y,ex)
      for i in [email protected]
        break if i > 3
        name = @characters[0]
        index = @characters[1]
        draw_character_floor(- 35 + x + i * ex,y - 20)      
        draw_character(name, index, x + i * ex, y)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● draw_playtime
  #--------------------------------------------------------------------------
  def draw_playtime(x, y, width, align)
      hour = @total_sec / 60 / 60
      min = @total_sec / 60 % 60
      sec = @total_sec % 60
      time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
      draw_picture_number_file(x + 18 * 0, y ,0, "File_Number_01",0,0,3,0) if hour < 10
      draw_picture_number_file(x + 18 * 1, y ,hour, "File_Number_01",0,0,3,0)
      draw_picture_number_file(x + 18 * 3, y ,0, "File_Number_01",0,0,3,0) if min < 10
      draw_picture_number_file(x + 18 * 4, y ,min, "File_Number_01",0,0,3,0)
      draw_picture_number_file(x + 18 * 6, y ,0, "File_Number_01",0,0,3,0) if sec < 10
      draw_picture_number_file(x + 18 * 7, y ,sec , "File_Number_01",0,0,3,0)     
  end

  #--------------------------------------------------------------------------
  # ● selected
  #--------------------------------------------------------------------------
  def selected=(selected)
      @selected = selected
  end
end

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      @saving = $game_temp.scene_save
      @file_max = FILES_MAX
      @file_max = 1 if FILES_MAX < 1
      create_background
      create_layout
      create_savefile_windows
      create_particles
      @index = DataManager.last_savefile_index
      @check_prev_index = true
      @savefile_windows[@index].selected = true   
  end  

  #--------------------------------------------------------------------------
  # ● Create Background
  #--------------------------------------------------------------------------            
  def create_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_file_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   

  #--------------------------------------------------------------------------
  # ● Create_Layout
  #--------------------------------------------------------------------------  
  def create_layout
      @layout_01 = Sprite.new  
      @layout_01.bitmap = $game_temp.pre_cache_file_menu[1]
      @layout_01.z = 1      
      @layout_01.blend_type = 1      
      @save_image = $game_temp.pre_cache_file_menu[2]
      @layout_02 = Sprite.new  
      @layout_02.bitmap = Bitmap.new(@save_image.width,@save_image.height)
      cw = @save_image.width
      ch = @save_image.height / 2
      if @saving
         h = 0
      else  
         h = ch
      end  
      src_rect = Rect.new(0, h, cw, ch)
      @layout_02.bitmap.blt(0,0, @save_image, src_rect)      
      @layout_02.z = 3
      @layout_02.y = 370
   end

  #--------------------------------------------------------------------------
  # ● Create Save File Window
  #--------------------------------------------------------------------------
  def create_savefile_windows
      @pw_pos = [-160,32]
      @aw_pos = [-96,160]
      @nw_pos = [-32,288]
      @savefile_windows = []
      for i in 0...@file_max
          @savefile_windows = Window_SaveFile_A.new(i, DataManager.make_filename(i))
          @savefile_windows.z = 2
          @savefile_windows.visible = false
          @savefile_windows.x = 400
      end
      check_active_window
      @item_max = @file_max
  end
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
   
end

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File

  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------
  def execute_dispose
      return if @background == nil
      Graphics.freeze
      dispose_background
      dispose_particles
      dispose_layout
      dispose_item_windows
  end
   
#--------------------------------------------------------------------------
# ● Dispose Layout
#--------------------------------------------------------------------------  
def dispose_layout
     @layout_01.dispose
     @layout_02.bitmap.dispose
     @layout_02.dispose  
end
   
#--------------------------------------------------------------------------
# ● Dispose Background
#--------------------------------------------------------------------------
def dispose_background
     @background.dispose
     @background = nil   
end
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end   
  
  #--------------------------------------------------------------------------
  # ● Dispose of Save File Window
  #--------------------------------------------------------------------------
  def dispose_item_windows
      for window in @savefile_windows
          window.dispose
      end
  end  

end

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File  
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------
  def update_sprites
      check_start_index
      update_savefile_windows      
      update_background
      update_particles      
  end

  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
   
  #--------------------------------------------------------------------------
  # ● check_start_index
  #--------------------------------------------------------------------------
  def check_start_index
      return if @check_prev_index == false
      @check_prev_index = false
      check_active_window   
  end  
   
  #--------------------------------------------------------------------------
  # ● check_active_window   
  #--------------------------------------------------------------------------
  def check_active_window   
      @index = 0 if @index == nil
      for i in 0...@file_max  
        @pw = @index - 1
        @pw = 0 if @pw > @file_max - 1
        @pw = @file_max- 1 if @pw < 0        
        @aw = @index
        @nw = @index + 1
        @nw = 0 if @nw > @file_max - 1
        @nw = @file_max - 1  if @nw < 0
        case @savefile_windows.file_index
           when @pw,@nw
                @savefile_windows.visible = true
                @savefile_windows.contents_opacity = 80
           when @aw  
                @savefile_windows.visible = true
                @savefile_windows.contents_opacity = 255
           else
                @savefile_windows.visible = false
        end
      end         
  end
   
  #--------------------------------------------------------------------------
  # ● Update Save File Window
  #--------------------------------------------------------------------------
  def update_savefile_windows
      update_slide_window
      for window in @savefile_windows
        window.update
      end
  end
  
  #--------------------------------------------------------------------------
  # ● update_slide_window
  #--------------------------------------------------------------------------  
  def update_slide_window
      slide_window_x(@pw,@pw_pos[0])
      slide_window_x(@aw,@aw_pos[0])
      slide_window_x(@nw,@nw_pos[0])
      slide_window_y(@pw,@pw_pos[1])
      slide_window_y(@aw,@aw_pos[1])
      slide_window_y(@nw,@nw_pos[1])
  end
   
  #--------------------------------------------------------------------------
  # ● slide_window_x
  #--------------------------------------------------------------------------   
  def slide_window_x(i,x_pos)
      if @savefile_windows.x < x_pos
         @savefile_windows.x += 15
         @savefile_windows.x = x_pos if @savefile_windows.x > x_pos
      end  
      if @savefile_windows.x > x_pos
         @savefile_windows.x -= 15
         @savefile_windows.x = x_pos if @savefile_windows.x < x_pos        
       end            
  end   
     
  #--------------------------------------------------------------------------
  # ● slide_window_y
  #--------------------------------------------------------------------------   
  def slide_window_y(i,y_pos)
      if @savefile_windows.y < y_pos
         @savefile_windows.y += 15
         @savefile_windows.y = y_pos if @savefile_windows.y > y_pos
      end  
      if @savefile_windows.y > y_pos
         @savefile_windows.y -= 15
         @savefile_windows.y = y_pos if @savefile_windows.y < y_pos        
       end            
  end   
     
  #--------------------------------------------------------------------------
  # ● reset_position
  #--------------------------------------------------------------------------     
  def reset_position(diretion)
      check_active_window      
      case diretion
         when 0
            @savefile_windows[@pw].y = -64
            @savefile_windows[@pw].x = 0
         when 1  
            @savefile_windows[@nw].y = 440
            @savefile_windows[@nw].x = 0
      end        
  end   
  
end  

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File  
  
  #--------------------------------------------------------------------------
  # ● Frame Update
  #--------------------------------------------------------------------------
  def update
      update_sprites
      update_command      
  end
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------
  def update_command
      if Input.trigger?(Input::C)
         on_savefile_ok
      elsif Input.trigger?(Input::B)
         Sound.play_cancel
         return_scene
      else
        last_index = @index
        if Input.trigger?(Input::DOWN)
           execute_index(1)
           if @file_max > 2
              reset_position(1)
           else
              reset_position(0)
           end  
        end
        if Input.trigger?(Input::UP)
           execute_index(-1)
           reset_position(0)
        end
        if @index != last_index
           Sound.play_cursor
           @savefile_windows[last_index].selected = false
           @savefile_windows[@index].selected = true
        end      
      end
  end

  #--------------------------------------------------------------------------
  # ● Execute Index
  #--------------------------------------------------------------------------  
  def execute_index(value)
      @index += value
      @index = @index >= @file_max ? 0 : @index < 0 ? (@file_max - 1) : @index
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache End Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_end_menu
      @pre_cache_end_menu = []
      @pre_cache_end_menu.push(Cache.menu_end("Background"))
      @pre_cache_end_menu.push(Cache.menu_end("Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  include MOG_MENU_END
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @phase = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_command_window
  end

  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_end_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout     
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_end_menu[1]
      @layout.z = 3
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
   
  #--------------------------------------------------------------------------
  # ● Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
      @command_window = Window_GameEnd.new
      @command_window.set_handler(:to_title, method(:command_to_title))
      @command_window.set_handler(:shutdown, method(:command_shutdown))
      @command_window.set_handler(:cancel,   method(:return_scene))
  end  
  
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_command_window
   end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
   
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end     
  
  #--------------------------------------------------------------------------
  # ● Dispose Command Window
  #--------------------------------------------------------------------------
  def dispose_command_window
      return if @command_window == nil
      @command_window.dispose
  end     

end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles     
      update_command_window
  end

  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end

  #--------------------------------------------------------------------------
  # ● Update Command Window
  #--------------------------------------------------------------------------
  def update_command_window
      return if @command_window == nil
      @command_window.update
  end      
  
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_sprites
      update_command
  end

  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
  end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Status)
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command   
  end  
  
end
作者: adahs    时间: 2020-3-24 16:38
修改这几段的draw_text吧,括号前两位是x,y坐标
因为这是我自己工程的mog,行数和你的可能不太一样

作者: mollyko    时间: 2020-3-24 16:55
adahs 发表于 2020-3-24 16:38
修改这几段的draw_text吧,括号前两位是x,y坐标
因为这是我自己工程的mog,行数和你的可能不太一样
...

好的!谢谢!我去试试!
作者: 15120066641    时间: 2024-12-12 21:48
您好,mog菜单的工程还有吗,能给个链接吗谢谢了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1