RMXP

RMXP 크로노트리거 메뉴 관련 오류.

by Lighna posted Jun 08, 2012
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
크로노트리거 메뉴가 마음에들어서 게임에 적용시켜 사용하고 있었습니다만,

자작스크립트중에 지정된 키를 누르면 액터를 바꿀 수 있는 스크립트랑 기능이 겹치고, 오류가 생길여지가 있기에

원래 크로노트리거 메뉴스크립트에 포함되어있는 'Exchange'항목을 지우려고 시도해보았습니다.

결과적으로 지운 것은 성공한듯 합니다...만 링메뉴를 돌리다보면 처음에는 멀쩡했는데, 갑자기 뒷부분의

항목이 겹치는 재앙이 일어납니다...;

 

자력으로 해결해보고자 했습니다만 생각보다 복잡해서..ㅡㅠ

 

도움주시면 감사하겠습니다.

 

 



 
이랬던 메뉴가................
 
 
이런식으로 되어버리는 재앙이..!
 
 
 
----------------------------------------------------
아래는 해당 스크립트입니다.
----------------------------------------------------
#==============================================================================
# ** Window_RingMenu
#------------------------------------------------------------------------------
#  This window deals with displaying menu choices with icons.
#==============================================================================
class Window_RingMenu < Window_Base
 
  MODE_START = 1
  MODE_WAIT = 2
  MODE_MOVER = 3
  MODE_MOVEL = 4
  attr_accessor :index
  #------------------------------------------------------------------------------
  # * Initialize
  #------------------------------------------------------------------------------
  def initialize(cmds, icons, radius = 64, start_spd = 20, speed =5 , center_x = nil, center_y = nil)
    super(15, 0, 640, 480)
    self.contents = Bitmap.new(width-32, height-32)
    self.opacity = 0
    self.z = 300000
    @index = 0
    @commands = cmds
    @items = icons
    @item_max = @commands.size
    @disabled = Array.new(@item_max, false)
    @radius = radius
    @startspd = start_spd
    @speed = speed
   
    # Sets Center Coordinates to player Center by Default
    center_x = 274#$game_player.screen_x - 30 if center_x == nil
    center_y = 207#$game_player.screen_y - 48 if center_y == nil
    self.contents = Bitmap.new(width-32, height-32)
    @cx = center_x
    @cy = center_y
    setup_move_start
    refresh
  end
 
  #------------------------------------------------------------------------------
  # * Update
  #------------------------------------------------------------------------------
  def update
    super
    refresh
  end
 
  #------------------------------------------------------------------------------
  # * Refresh
  #------------------------------------------------------------------------------
  def refresh
    self.contents.clear
    case @mode
    when MODE_START
      refresh_start
    when MODE_WAIT
      refresh_wait
    when MODE_MOVER
      refresh_move(1)
    when MODE_MOVEL
      refresh_move(0)
    end
   
    # Draw Menu Option
    rect = Rect.new(0, 206, self.contents.width-32, 32)
    self.contents.draw_text(rect, @commands[@index],1)
   
  end
 
  #------------------------------------------------------------------------------
  # * Refresh Start
  #------------------------------------------------------------------------------
  def refresh_start
    d1 = 2.0 * Math::PI / @item_max
    d2 = 1.0 * Math::PI / @startspd
    r = @radius - 1.0 * @radius * @steps / @startspd
    for i in 0...@item_max
      j = i - @index
      d = d1 * j + d2 * @steps
      x = @cx + ( r * Math.sin( d ) ).to_i
      y = @cy - ( r * Math.cos( d ) ).to_i
      draw_item(x, y, i)
    end
    @steps -= 1
    if @steps < 1
      @mode = MODE_WAIT
    end
  end
 
  #------------------------------------------------------------------------------
  # * Refresh Wait
  #------------------------------------------------------------------------------
  def refresh_wait
    d = 2.0 * Math::PI / @item_max
    for i in 0...@item_max
      j = i - @index
      x = @cx + ( @radius * Math.sin( d * j ) ).to_i
      y = @cy - ( @radius * Math.cos( d * j ) ).to_i
      draw_item(x, y, i)
    end
  end
 
  #------------------------------------------------------------------------------
  # * Refresh Move
  #------------------------------------------------------------------------------
  def refresh_move( mode )
    d1 = 2.0 * Math::PI / @item_max
    d2 = d1 / @speed
    d2 *= -1 if mode != 0
    for i in 0...@item_max
      j = i - @index
      d = d1 * j + d2 * @steps
      x = @cx + ( @radius * Math.sin( d ) ).to_i
      y = @cy - ( @radius * Math.cos( d ) ).to_i
      draw_item(x, y, i)
    end
    @steps -= 1
    if @steps < 1
      @mode = MODE_WAIT
    end
  end
 
  #------------------------------------------------------------------------------
  # * Draw Item (include disabled icon)
  #------------------------------------------------------------------------------
  def draw_item(x, y, i)
    rect = Rect.new(0, 0, @items[i].width, @items[i].height)
    if @index == i
      self.contents.blt( x, y, @items[i], rect )
      if @disabled[@index]
        self.contents.blt( x, y, $disabled_icon, rect )
      end
    else
      self.contents.blt( x, y, @items[i], rect, 128 )
    end
  end
 
  #------------------------------------------------------------------------------
  # * Disable Item
  #------------------------------------------------------------------------------
  def disable_item(index)
    @disabled[index] = true
  end
 
  #------------------------------------------------------------------------------
  # * Setup Move Start
  #------------------------------------------------------------------------------
  def setup_move_start
    @mode = MODE_START
    @steps = @startspd
    if $se_startup != nil and $se_startup != ""
      Audio.se_play("Audio/SE/" + $se_startup, 80, 100)
    end
  end
 
  #------------------------------------------------------------------------------
  # * Setup Move Move
  #------------------------------------------------------------------------------
  def setup_move_move(mode)
    if mode == MODE_MOVER
      @index -= 1
      @index = @items.size - 1 if @index < 0
    elsif mode == MODE_MOVEL
      @index += 1
      @index = 0 if @index >= @items.size
    else
      return
    end
    @mode = mode
    @steps = @speed
  end
 
  #------------------------------------------------------------------------------
  # * Animation
  #------------------------------------------------------------------------------
  def animation?
    return @mode != MODE_WAIT
  end
end
 
#===============================================================================
# * Module CT_pictures
#-------------------------------------------------------------------------------
# The name of Pictures and Icons used in the
# menu are stored here
#-------------------------------------------------------------------------------
# ~Instructions
# Look at the picture and the icon folder to see the examples.
# Just replace them with other pictures if you like too, just make sure
# they are named like the ones before ore you change their names.
#===============================================================================
module CT_Pictures
  pack = 1                                     #graphic pack selection
#Menu Icons
Icon_1 = "Chrono Trigger CMS - item2"  #equip button
Icon_2 = "Chrono Trigger CMS - menu0"                        #item button
Icon_3 = "Chrono Trigger CMS - menu1"                         #skill button
Icon_4 = "Chrono Trigger CMS - change party"                        #change party member button
Icon_5 = "Chrono Trigger CMS - menu4"                          #save button
Icon_6 = "Chrono Trigger CMS - menu5"                         #quit button
Weapon_alternative = "Chrono Trigger CMS - item1"            #alternative Icon if your character has no Weapon equipped
Shield_alternative = "Chrono Trigger CMS - menu2"            #alternative Icon if your character has no Shield equipped
#Menu Pictures
BG_Picture = "Graphic Pack #{pack}/ct background"                   #background picture that is shown in every part of the menu
Playtime_bg = "Graphic Pack #{pack}/playtime background"            #background picture that is shown behind the playtime
Actor_bg = "Graphic Pack #{pack}/ct actor window"                   #background box that shows the actual selected party member in the equip menu
Actor_bg_inactive = "Graphic Pack #{pack}/ct actor window inactive" #background picture of the left equip window
Equip_bg = "Graphic Pack #{pack}/ct equip bg"                       #background picture of the right equip window
Item_Equip_bg = "Graphic Pack #{pack}/item equip background"        #background picture of the weapon selection of the equip menu
Item_bg = "Graphic Pack #{pack}/item background"                    #background picture of the item menu
Target_bg = "Graphic Pack #{pack}/target background"                #background picture of the target menu
Skill_bg = "Graphic Pack #{pack}/skill background"                  #background picture of the skill menu
Ex_bg = "Graphic Pack #{pack}/exchange background"                  #background picture of the exchange menu
Save_bg = "Graphic Pack #{pack}/save background"                    #background picture of the save menu
End_bg = "Graphic Pack #{pack}/end background"                      #background picture of the quit menu
Cursor = "Graphic Pack #{pack}/cursor"                              #icon of the cursor
end
 
#==============================================================================
# ■ Cursor Script
#------------------------------------------------------------------------------
#  Script to display a cursor instead of a highlight box
#   by squall
#   squall@rmxp.ch
#==============================================================================
#==============================================================================
# ■ Cursor_Sprite
#==============================================================================
class Sprite_Cursor < Sprite
  #--------------------------------------------------------------------------
  # ● instances
  #--------------------------------------------------------------------------
  attr_accessor :true_x
  attr_accessor :true_y
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------
  def initialize(x = 0, y = 0)
    super()
    self.x = @true_x = x
    self.y = @true_y = y
    self.z += 1000
    self.bitmap = RPG::Cache.picture(CT_Pictures::Cursor) rescue Bitmap.new(32, 32)
  end
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------
  def update
    super
   
    if self.y < @true_y
      n = (@true_y - self.y) / 3
      n = 1 if n == 0
      self.y += n
    elsif self.y > @true_y
      n = (self.y - @true_y) / 3
      n = 1 if n == 0
      self.y -= n
    end
    if self.x < @true_x
      n = (@true_x - self.x) / 3
      n = 1 if n == 0
      self.x += n
    elsif self.x > @true_x
      n = (self.x - @true_x) / 3
      n = 1 if n == 0
      self.x -= n
    end
  end
end
#==============================================================================
# ■ Window_Selectable
#==============================================================================
class Window_Selectable < Window_Base
  #--------------------------------------------------------------------------
  # ● instances
  #--------------------------------------------------------------------------
  attr_reader   :index
  attr_reader   :help_window
  attr_accessor :cursor
  alias update_cursor_moves update
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @item_max = 1
    @column_max = 1
    @index = 0
    @cursor = Sprite_Cursor.new(x, y)
    unless $scene.is_a?(Scene_Menu)
      @cursor.opacity = 0
    end
    update_cursor
  end
  #--------------------------------------------------------------------------
  # ● x=
  #--------------------------------------------------------------------------
  def x=(x)
    super
    @cursor.x = x if !@cursor.nil?
  end
  #--------------------------------------------------------------------------
  # ● y=
  #--------------------------------------------------------------------------
  def y=(y)
    super
    @cursor.y = y if !@cursor.nil?
  end
  #--------------------------------------------------------------------------
  # ● visible=
  #--------------------------------------------------------------------------
  def visible=(visible)
    super
    if !@cursor.nil? and visible == false
      @cursor.visible = false
    end
  end
  #--------------------------------------------------------------------------
  # ● dispose
  #--------------------------------------------------------------------------
  def dispose
    @cursor.dispose
    super
  end
  #--------------------------------------------------------------------------
  # ● update_cursor_rect
  #--------------------------------------------------------------------------
  def update_cursor_rect
    row = @index / @column_max
    if row < self.top_row
      self.top_row = row
    end
    if row > self.top_row + (self.page_row_max - 1)
      self.top_row = row - (self.page_row_max - 1)
    end
    cursor_width = self.width / @column_max - 32
    x = @index % @column_max * (cursor_width + 32)
    y = @index / @column_max * 32 - self.oy
    if $scene.is_a?(Scene_Menu)
      self.cursor_rect.set(x, y, 0, 0)
    else
      self.cursor_rect.set(x, y, cursor_width, 32)
    end
  end
  #--------------------------------------------------------------------------
  # ● update_cursor
  #--------------------------------------------------------------------------
  def update_cursor
    @cursor.true_x = self.cursor_rect.x + self.x - 8
    @cursor.true_y = self.cursor_rect.y + self.y + 16
    @cursor.update
    @cursor.visible = self.visible
  end
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------
  def update
    update_cursor_moves
    update_cursor
  end
end
 
#==============================================================================
# ** Chrono Trigger CMS
#------------------------------------------------------------------------------
# Raziel
# 2006-09-09
# Version 1.25
#------------------------------------------------------------------------------
# Thanks to
# ~ Squall/Selwyn for his Cursor Script
# ~ RPG Advocate for his Party Members change script
# ~ MeisMe for fixing some bugs and helping me
# ~ Squaresoft for the pictures
# ~ Der VVulfman for the Ring Menu script
#==============================================================================
# ~Instructions
#  Icons of the characters are used in the save menu.
#  Make sure you put them in the icon folder and name them
#  like you name your character file, for example the icon for
#  Arshes would be 001-Fighter01

#  For the chapter function, just use $game_system = "desired filename"
#  in a call script command and then the savefile will have the name
#  you choose.
#==============================================================================
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs menu screen processing.
#==============================================================================
class Scene_Menu
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Make command window
    @back_ground = Sprite.new
    @back_ground.bitmap = RPG::Cache.picture(CT_Pictures::BG_Picture)
    @skill_background = Sprite.new
    @skill_background.bitmap = RPG::Cache.picture(CT_Pictures::Skill_bg)
    @item_background = Sprite.new
    @item_background.bitmap = RPG::Cache.picture(CT_Pictures::Item_bg)
    @save_background = Sprite.new
    @save_background.bitmap = RPG::Cache.picture(CT_Pictures::Save_bg)
    @end_background = Sprite.new
    @end_background.bitmap = RPG::Cache.picture(CT_Pictures::End_bg)
    @equip_item_background = Sprite.new
    @equip_item_background.bitmap = RPG::Cache.picture(CT_Pictures::Item_Equip_bg)
    @playtime_background = Sprite.new
    @playtime_background.bitmap = RPG::Cache.picture(CT_Pictures::Playtime_bg)
    @playtime_background.x = 0
    @playtime_background.y = 384
    @playtime_background.z = 9999
    @end_background.x, @end_background.y = 229, 156
    @item_background.x , @item_background.y = 48, 36
    @skill_background.x , @skill_background.y = 48, 36
    @rm_window = Window_Base.new(235,150,160,170)
    @rm_window.z = 250
    rm_text = []
    rm_text[0] = $data_system.words.equip
    rm_text[1] = $data_system.words.item
    rm_text[2] = $data_system.words.skill
    rm_text[3] = "Save"
    rm_text[4] = "Quit"
    rm_icons = []
    rm_icons[0] = RPG::Cache.icon(CT_Pictures::Icon_1)
    rm_icons[1] = RPG::Cache.icon(CT_Pictures::Icon_2)
    rm_icons[2] = RPG::Cache.icon(CT_Pictures::Icon_3)
    rm_icons[3] = RPG::Cache.icon(CT_Pictures::Icon_5)
    rm_icons[4] = RPG::Cache.icon(CT_Pictures::Icon_6)
    @command_window = Window_RingMenu.new(rm_text, rm_icons,64, 10 ,5)
    $disabled_icon = RPG::Cache.icon("")
    @command_window.index = @menu_index
    @actor_window = Window_Actors.new
    @new_equip = Window_NewEquip.new
    $game_temp.equip_window = @new_equip
    @item_window = Window_Item.new
    @help_window = Window_Help.new
    @playtime_window = Window_PlayTime.new
    @item_window.help_window = @help_window
    @help_window.opacity, @item_window.opacity = 0, 0
    @help_window.x, @help_window.y = 48, 45
    @equip_item_background.x, @equip_item_background.y = 46, 37
    @target_window = Window_Target.new
    @actor_skillwindow = Window_SkillActor.new
    @target_cursor = []
    @target_cursor_skill = []
    @switch_cursor = []
    @equip_item = []
    @switch = 0
    @target_cursor[0] = Sprite_Cursor.new(306, 196)
    @target_cursor[1] = Sprite_Cursor.new(306, 276)
    @target_cursor[2] = Sprite_Cursor.new(306, 356)
    @target_cursor_skill[0] = Sprite_Cursor.new(306, 121)
    @target_cursor_skill[1] = Sprite_Cursor.new(306, 201)
    @target_cursor_skill[2] = Sprite_Cursor.new(306, 281)
    @switch_cursor[0] = Sprite_Cursor.new(182, 15)
    @switch_cursor[1] = Sprite_Cursor.new(182, 125)
    @switch_cursor[2] = Sprite_Cursor.new(182, 235)
    @switch_cursor[3] = Sprite_Cursor.new(182, 345)
    @equip_item[0] = Window_EquipItem2.new(0)
    @equip_item[1] = Window_EquipItem2.new(1)
    @equip_item[2] = Window_EquipItem2.new(2)
    @equip_item[3] = Window_EquipItem2.new(3)
    @equip_item[4] = Window_EquipItem2.new(4)
    @equip_description = Window_EquipDescription.new
    @counter = 0
    @end_window = Window_End.new
    @end_window.x = 320 - @end_window.width / 2
    @end_window.y = 220 - @end_window.height / 2
    @end_window.opacity = 0
    @savefile_windows = []
    for i in 0..2
      @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
    end
    @file_index = $game_temp.last_file_index
    @savefile_windows[@file_index].selected = true
    @save_status = Window_SaveStatus.new
    @skill_actor_window2 = []
    @skill_window = []
    unless $game_party.actors[0] == nil
      @skill_actor_window2[0] = Window_SkillActor2.new($game_party.actors[0])
      @skill_window[0] = Window_Skill.new($game_party.actors[0])
    end
    unless $game_party.actors[1] == nil
      @skill_actor_window2[1] = Window_SkillActor2.new($game_party.actors[1])
      @skill_window[1] = Window_Skill.new($game_party.actors[1])
    end
    unless $game_party.actors[2] == nil
      @skill_actor_window2[2] = Window_SkillActor2.new($game_party.actors[2])
      @skill_window[2] = Window_Skill.new($game_party.actors[2])
    end
    unless $game_party.actors[3] == nil
      @skill_actor_window2[3] = Window_SkillActor2.new($game_party.actors[3])
      @skill_window[3] = Window_Skill.new($game_party.actors[3])
    end
    @item_window.visible = false
    @help_window.visible = false
    @item_background.visible = false
    @target_window.visible = false
    @skill_background.visible = false
    @actor_skillwindow.visible = false
    @save_background.visible = false
    @save_status.visible = false
    @end_window.visible = false
    @end_background.visible = false
    @equip_item_background.visible = false
    @equip_description.visible = false
    for i in 0..2
      @target_cursor[i].visible = false
      @target_cursor_skill[i].visible = false
      @savefile_windows[i].visible = false
      @switch_cursor[i].visible = false
      @switch_cursor[3].visible = false
    end
    for i in 0..4
      @equip_item[i].active = false
      @equip_item[i].visible = false
    end
    for i in 0...$game_party.actors.size
      @skill_window[i].visible = false
      @skill_window[i].active = false
      @skill_window[i].width = 300
      @skill_actor_window2[i].visible = false
      @skill_actor_window2[i].active = false
    end
    @item_window.active = false
    @target_window.active = false
    @actor_skillwindow.active = false
    @end_window.active = false
    for i in 0..2
      @savefile_windows[i].active = false
    end
    #refresh
    equip_refresh
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @back_ground.dispose
    @actor_window.dispose
    @command_window.dispose
    @new_equip.dispose
    @item_window.dispose
    @help_window.dispose
    @item_background.dispose
    @target_window.dispose
    @skill_background.dispose
    @actor_skillwindow.dispose
    @save_background.dispose
    @save_status.dispose
    @end_window.dispose
    @end_background.dispose
    @switch_cursor[3].dispose
    @equip_item_background.dispose
    @equip_description.dispose
    @playtime_window.dispose
    @playtime_background.dispose
    @rm_window.dispose
    for i in @skill_actor_window2
      i.dispose
    end
    for i in @skill_window
      i.dispose
    end
    for i in @savefile_windows
      i.dispose
    end
    for i in @target_cursor
      i.dispose
    end
    for i in @target_cursor_skill
      i.dispose
    end
    for i in @switch_cursor
      i.dispose
    end
    for i in @equip_item
      i.dispose
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @actor_window.update
    @command_window.update
    @new_equip.update
    @item_window.update
    @help_window.update
    @target_window.update
    @actor_skillwindow.update
    @save_status.update
    @end_window.update
    @equip_description.update
    @playtime_window.update
    equip_refresh
    for i in @savefile_windows
      i.update
    end
    for i in @skill_window
      i.update
    end
    for i in @skill_actor_window2
      i.update
    end
    for i in @equip_item
      i.update
    end
    if @command_window.active
      # If command window is active: call update_command
      update_command
    elsif @actor_window.active
      # If actor window is active: call update_actor
      update_actor
    elsif @new_equip.active
      # If new equip window is active: call update_equip
      update_equip
    elsif @equip_item[@new_equip.index].active
      # If item equip window is active: call update_equipitem
      update_equipitem
    elsif @item_window.active
      # If item window is active: call update_item
      update_item
    elsif @target_window.active
      # If target window is active: call update_target
      update_target
    elsif @actor_skillwindow.active
      # If actor skill window is active: call update_actor_skill
      update_actor_skill
    elsif @skill_window[@actor_skillwindow.index].active
      # If skill window is active: call update_skill
      update_skill
    elsif @savefile_windows[@file_index].active
      # If savefile window is active: call update_savefile
      update_savefile
    elsif @end_window.active
      # If end window is active: call update_end
      update_end
    end
    $game_temp.save_index = @file_index
    $game_temp.skill_index = @skill_window[@actor_skillwindow.index].index
    $game_temp.equip_index = @new_equip.index
    @rm_window.visible = @command_window.visible
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    case @command_window.index
    when 0
      @actor_window.visible = true
      @new_equip.visible = true
      @item_window.visible = false
      @item_background.visible = false
      @end_window.visible = false
      @end_background.visible = false
    when 1
      @actor_window.visible = false
      @new_equip.visible = false
      @skill_background.visible = false
      @actor_skillwindow.visible = false
      @item_window.visible = true
      @item_background.visible = true
      @help_window.y = 45
    when 2
      @item_window.visible = false
      @item_background.visible = false
      @skill_background.visible = true
      @actor_skillwindow.visible = true
      @help_window.y = 385
    when 3
      @end_window.visible = false
      @end_background.visible = false
    for i in 0..2
      @savefile_windows[i].visible = true
    end
    @save_background.visible = true
    @save_status.visible = true
    when 4
    for i in 0..2
      @savefile_windows[i].visible = false
    end
    @actor_window.visible = false
    @new_equip.visible = false
    @save_background.visible = false
    @save_status.visible = false
    @end_window.visible = true
    @end_background.visible = true
    end
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      @playtime_background.visible = false
      @playtime_window.visible = false
      # Branch by command window cursor position
      case @command_window.index
      when 0  # equip/status
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @command_window.visible = false
        @actor_window.active = true
        @actor_window.index = 0
      when 1  # item
        # Make item window active
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @command_window.visible = false
        @item_window.active = true
        @item_window.index = 0
      when 2  # skills
        $game_system.se_play($data_system.decision_se)
        @command_window.visible = false
        @command_window.active = false
        @actor_skillwindow.active = true
        @actor_skillwindow.index = 0
      when 3 #save
        if $game_system.save_disabled
        $game_system.se_play($data_system.buzzer_se)
        return
      end
        $game_system.se_play($data_system.decision_se)
        @command_window.visible = false
        @command_window.active = false
        @file_index = 0
        for i in 0..2
          @savefile_windows[i].active = true
          @savefile_windows[i].selected = false
        end
        @savefile_windows[0].selected = true
      when 4 #quit
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @command_window.visible = false
        @end_window.active = true
      end
      return
    end
    return if @command_window.animation?
    if Input.press?(Input::UP) or Input.press?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      @command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
      return
    end
    if Input.press?(Input::DOWN) or Input.press?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      @command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Make File Name
  #     file_index : save file index (0-2)
  #--------------------------------------------------------------------------
  def make_filename(file_index)
    return "Save#{file_index + 1}.rxdata"
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when end window is active)
  #--------------------------------------------------------------------------
  def update_end
    # If B button was pressed
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @end_window.active = false
      @end_window.index = 0
      @command_window.visible = true
      @command_window.active = true
      @playtime_background.visible = true
      @playtime_window.visible = true
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      case @end_window.index
      when 0
        $scene = Scene_Title.new
      when 1
        $scene = nil
      when 2
        @end_window.active = false
        @command_window.visible = true
        @command_window.active = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when save window is active)
  #--------------------------------------------------------------------------
  def update_savefile
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Call method: on_decision (defined by the subclasses)
      on_decision(make_filename(@file_index))
      $game_temp.last_file_index = @file_index
      return
    end
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Call method: on_cancel (defined by the subclasses)
      on_cancel
      return
    end
    # If the down directional button was pressed
    if Input.repeat?(Input::DOWN)
      # If the down directional button pressed down is not a repeat,
      # or cursor position is more in front than 3
      unless @file_index == 2
      if Input.trigger?(Input::DOWN)
        # Play cursor SE
        $game_system.se_play($data_system.cursor_se)
        # Move cursor down
        @savefile_windows[@file_index].selected = false
        @file_index = (@file_index + 1)# % 3
        @savefile_windows[@file_index].selected = true
        return
      end
      end
    # If the up directional button was pressed
    elsif Input.repeat?(Input::UP)
      # If the up directional button pressed down is not a repeat、
      # or cursor position is more in back than 0
      unless @file_index == 0
        if Input.trigger?(Input::UP)
          # Play cursor SE
          $game_system.se_play($data_system.cursor_se)
          # Move cursor up
          @savefile_windows[@file_index].selected = false
          @file_index = (@file_index - 1)# % 3
          @savefile_windows[@file_index].selected = true
          return
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Decision Processing
  #--------------------------------------------------------------------------
  def on_decision(filename)
    # Play save SE
    $game_system.se_play($data_system.save_se)
    # Write save data
    file = File.open(filename, "wb")
    write_save_data(file)
    file.close
    # If called from event
    if $game_temp.save_calling
      # Clear save call flag
      $game_temp.save_calling = false
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    for i in 0..2
      @savefile_windows[i].active = false
      @savefile_windows[i].selected = false
    end
    @savefile_windows[0].selected = true
    @playtime_background.visible = true
    @playtime_window.visible = true
    # Switch to map screen
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # * Cancel Processing
  #--------------------------------------------------------------------------
  def on_cancel
    # Play cancel SE
    $game_system.se_play($data_system.cancel_se)
    # If called from event
    if $game_temp.save_calling
      # Clear save call flag
      $game_temp.save_calling = false
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    # Switch to menu screen
    for i in 0..2
      @savefile_windows[i].active = false
      @savefile_windows[i].selected = false
    end
    @savefile_windows[0].selected = true
    @save_status.refresh
    @command_window.visible = true
    @command_window.active = true
    @command_window.index = 4
    @playtime_background.visible = true
    @playtime_window.visible = true
  end
  #--------------------------------------------------------------------------
  # * Write Save Data
  #     file : write file object (opened)
  #--------------------------------------------------------------------------
  def write_save_data(file)
    # Make character data for drawing save file
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      characters.push([actor.character_name, actor.character_hue])
    end
    # Write character data for drawing save file
    Marshal.dump(characters, file)
    # Wrire frame count for measuring play time
    Marshal.dump(Graphics.frame_count, file)
    # Increase save count by 1
    $game_system.save_count += 1
    # Save magic number
    # (A random value will be written each time saving with editor)
    $game_system.magic_number = $data_system.magic_number
    # Write each type of game object
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when equip window is active)
  #--------------------------------------------------------------------------
  def update_equip
    for i in 0..4
      @equip_item[i].visible = false
    end
    @equip_item[@new_equip.index].visible = true
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      @new_equip.index = 0
      @new_equip.active = false
      @actor_window.active = true
      @actor_window.visible = true
      @equip_item_background.visible = false
      @equip_description.visible = false
      for i in 0..4
        @equip_item[i].visible = false
      end
      @item_window.refresh
      @target_window.refresh
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      @actor = $game_party.actors[$game_temp.cms_index]
      if @actor.equip_fix?(@new_equip.index)
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Play decission SE
      $game_system.se_play($data_system.decision_se)
      @new_equip.active = false
      @equip_item[@new_equip.index].active = true
      @equip_item[@new_equip.index].index = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when equip window is refreshed)
  #--------------------------------------------------------------------------
   def equip_refresh
    if @new_equip.active
      # Erase parameters for after equipment change
      @new_equip.set_new_parameters(nil, nil, nil, nil, nil, nil, nil)
    end
    if @equip_item[@new_equip.index].active
      @actor = $game_party.actors[$game_temp.cms_index]
      # Get currently selected item
      item1 = $game_temp.equip_window.item
      item2 = @equip_item[@new_equip.index].item
      # Change equipment
      @actor.equip($game_temp.equip_index, item2 == nil ? 0 : item2.id)
      # Get parameters for after equipment change
      new_str = @actor.str
      new_atk = @actor.atk
      new_int = @actor.int
      new_agi = @actor.agi
      new_pdef = @actor.pdef
      new_mdef = @actor.mdef
      new_dex = @actor.dex
      # Return equipment
      @actor.equip($game_temp.equip_index, item1 == nil ? 0 : item1.id)
      # Draw in left window
      $game_temp.equip_window.set_new_parameters(new_str, new_atk, new_int, new_agi, new_pdef, new_mdef, new_dex)
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when equip item window is active)
  #--------------------------------------------------------------------------
  def update_equipitem
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Activate right window
      @equip_item[@new_equip.index].active = false
      @equip_item[@new_equip.index].index = 0
      @new_equip.active = true
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Play equip SE
      $game_system.se_play($data_system.equip_se)
      # Get currently selected data on the item window
      item = @equip_item[@new_equip.index].item
      # Change equipment
      @actor.equip(@new_equip.index, item == nil ? 0 : item.id)
      # Activate right window
      @new_equip.active = true
      @equip_item[@new_equip.index].active = false
      @equip_item[@new_equip.index].index = 0
      # Remake right window and item window contents
      @new_equip.refresh
      @equip_item[@new_equip.index].refresh
      @equip_description.refresh
      @actor_window.refresh
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when actor window is active)
  #--------------------------------------------------------------------------
  def update_actor
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      @actor_window.active = false
      @actor_window.index = 0
      @command_window.visible = true
      @command_window.active = true
      @playtime_background.visible = true
      @playtime_window.visible = true
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Play decisiion SE
      $game_system.se_play($data_system.decision_se)
      @actor_window.active = false
      @actor_window.visible = false
      @equip_item[0].visible = true
      @new_equip.active = true
      @equip_item_background.visible = true
      @equip_description.visible = true
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when actor skill window is active)
  #--------------------------------------------------------------------------
  def update_actor_skill
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      @actor_skillwindow.active = false
      @actor_skillwindow.index = 0
      @command_window.visible = true
      @command_window.active = true
      @command_window.index = 2
      @playtime_background.visible = true
      @playtime_window.visible = true
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      @actor_skillwindow.active = false
      @skill_window[@actor_skillwindow.index].help_window = @help_window
      @skill_window[@actor_skillwindow.index].visible = true
      @skill_window[@actor_skillwindow.index].active = true
      @skill_window[@actor_skillwindow.index].index = 0
      @actor_skillwindow.visible = false
      @skill_actor_window2[@actor_skillwindow.index].visible = true
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when item window is active)
  #--------------------------------------------------------------------------
  def update_item
    # If B button was pressed
    if @target_window.visible == false
      for i in 0...$game_party.actors.size - 1
        @target_cursor[i].visible = false
      end
    end
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to menu screen
      @item_window.visible = false
      @item_window.active = false
      @command_window.visible = true
      @command_window.active = true
      @help_window.visible = false
      @playtime_background.visible = true
      @playtime_window.visible = true
      @item_window.index = 0
      @command_window.index = 1
      return
    # If C button was pressed
    elsif Input.trigger?(Input::C)
      # Get currently selected data on the item window
      @item = @item_window.item
      # If not a use item
      unless @item.is_a?(RPG::Item)
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # If it can't be used
      unless $game_party.item_can_use?(@item.id)
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      # If effect scope is an ally
      if @item.scope >= 3
        # Activate target window
        @item_window.active = false
        @target_window.visible = true
        @target_window.active = true
        @target_window.y = 0
        # Set cursor position to effect scope (single / all)
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      # If effect scope is other than an ally
      else
        # If command event ID is valid
        if @item.common_event_id > 0
          # Command event call reservation
          $game_temp.common_event_id = @item.common_event_id
          # Play item use SE
          $game_system.se_play(@item.menu_se)
          # If consumable
          if @item.consumable
            # Decrease used items by 1
            $game_party.lose_item(@item.id, 1)
            # Draw item window item
            @item_window.draw_item(@item_window.index)
          end
          # Switch to map screen
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when skill window is active)
  #--------------------------------------------------------------------------
  def update_skill
    if @target_window.visible == false
      for i in 0...$game_party.actors.size - 1
        @target_cursor_skill[i].visible = false
      end
    end
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      @skill_window[@actor_skillwindow.index].visible = false
      @skill_window[@actor_skillwindow.index].active = false
      @skill_window[@actor_skillwindow.index].index = 0
      @help_window.visible = false
      @skill_actor_window2[@actor_skillwindow.index].visible = false
      @actor_skillwindow.visible = true
      @actor_skillwindow.active = true
      # If C button was pressed
    elsif Input.trigger?(Input::C)
      @actor = $game_party.actors[@actor_skillwindow.index]
      # Get currently selected data on the skill window
      @skill = @skill_window[@actor_skillwindow.index].skill
      # If unable to use
      if @skill == nil or not @actor.skill_can_use?(@skill.id)
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      # If effect scope is ally
      if @skill.scope >= 3
        # Activate target window
        @skill_window[@actor_skillwindow.index].active = false
        @skill_window[@actor_skillwindow.index].visible = false
        @target_window.visible = true
        @target_window.active = true
        @target_window.y = -75
        # Set cursor position to effect scope (single / all)
        if @skill.scope == 4 || @skill.scope == 6
          @target_window.index = -1
        elsif @skill.scope == 7
          @target_window.index = @actor_index - 10
        else
          @target_window.index = 0
        end
      # If effect scope is other than ally
      else
        # If common event ID is valid
        if @skill.common_event_id > 0
          # Common event call reservation
          $game_temp.common_event_id = @skill.common_event_id
          # Play use skill SE
          $game_system.se_play(@skill.menu_se)
          # Use up SP
          @actor.sp -= @skill.sp_cost
          # Remake each window content
          @status_window.refresh
          @skill_window[@actor_skillwindow.index].refresh
          @target_window.refresh
          # Switch to map screen
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when target window is active)
  #--------------------------------------------------------------------------
  def update_target
    if @item_window.visible
      if @target_window.index < 0
        for i in 0...$game_party.actors.size - 1
          @target_cursor[i].visible = true
        end
      end
      # If B button was pressed
      if Input.trigger?(Input::B)
        # Play cancel SE
        $game_system.se_play($data_system.cancel_se)
        # If unable to use because items ran out
        unless $game_party.item_can_use?(@item.id)
          # Remake item window contents
          @item_window.refresh
        end
        # Erase target window
        @item_window.active = true
        @target_window.visible = false
        @target_window.active = false
        return
      end
      # If C button was pressed
      if Input.trigger?(Input::C)
        # If items are used up
        if $game_party.item_number(@item.id) == 0
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # If target is all
        if @target_window.index == -1
          # Apply item effects to entire party
          used = false
          for i in $game_party.actors
            used |= i.item_effect(@item)
          end
        end
        # If single target
        if @target_window.index >= 0
          # Apply item use effects to target actor
          target = $game_party.actors[@target_window.index]
          used = target.item_effect(@item)
        end
        # If an item was used
        if used
          # Play item use SE
          $game_system.se_play(@item.menu_se)
          # If consumable
          if @item.consumable
            # Decrease used items by 1
            $game_party.lose_item(@item.id, 1)
            # Redraw item window item
            @item_window.draw_item(@item_window.index)
          end
          # Remake target window contents
          @target_window.refresh
          @actor_skillwindow.refresh
          @skill_actor_window2[@actor_skillwindow.index].refresh
          # If all party members are dead
          if $game_party.all_dead?
            # Switch to game over screen
            $scene = Scene_Gameover.new
            return
          end
          # If common event ID is valid
          if @item.common_event_id > 0
            # Common event call reservation
            $game_temp.common_event_id = @item.common_event_id
            # Switch to map screen
            $scene = Scene_Map.new
            return
          end
        end
        # If item wasn't used
        unless used
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
        end
        return
      end
    else
      if @target_window.index < 0
        for i in 0...$game_party.actors.size - 1
          @target_cursor_skill[i].visible = true
        end
      end
      # If B button was pressed
      if Input.trigger?(Input::B)
        # Play cancel SE
        $game_system.se_play($data_system.cancel_se)
        # Erase target window
        @skill_window[@actor_skillwindow.index].active = true
        @skill_window[@actor_skillwindow.index].visible = true
        @target_window.visible = false
        @target_window.active = false
        return
      end
      # If C button was pressed
      if Input.trigger?(Input::C)
        # If unable to use because SP ran out
        unless @actor.skill_can_use?(@skill.id)
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # If target is all
        if @target_window.index == -1
          # Apply skill use effects to entire party
          used = false
          for i in $game_party.actors
            used |= i.skill_effect(@actor, @skill)
          end
        end
        # If target is user
        if @target_window.index <= -2
          # Apply skill use effects to target actor
          target = $game_party.actors[@target_window.index + 10]
          used = target.skill_effect(@actor, @skill)
        end
        # If single target
        if @target_window.index >= 0
          # Apply skill use effects to target actor
          target = $game_party.actors[@target_window.index]
          used = target.skill_effect(@actor, @skill)
        end
        # If skill was used
        if used
          # Play skill use SE
          $game_system.se_play(@skill.menu_se)
          # Use up SP
          @actor.sp -= @skill.sp_cost
          # Remake each window content
          @actor_skillwindow.refresh
          @skill_window[@actor_skillwindow.index].refresh
          @skill_actor_window2[@actor_skillwindow.index].refresh
          @target_window.refresh
          # If entire party is dead
          if $game_party.all_dead?
            # Switch to game over screen
            $scene = Scene_Gameover.new
            return
         end
          # If command event ID is valid
          if @skill.common_event_id > 0
            # Command event call reservation
            $game_temp.common_event_id = @skill.common_event_id
            # Switch to map screen
            $scene = Scene_Map.new
            return
          end
        end
        # If skill wasn't used
        unless used
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
        end
        return
      end
    end
  end 
end
#==============================================================================
# ** Window_IcoonCommands
#------------------------------------------------------------------------------
#  This class performs command processing.
#==============================================================================
class Window_IconCommands < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(210, 190, 220, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.index = 0
    self.z = 200
    @column_max = 6
    @item_max = 6
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.blt(4,5,RPG::Cache.icon(CT_Pictures::Icon_1), Rect.new(0,0,24,24))
    self.contents.blt(36,5,RPG::Cache.icon(CT_Pictures::Icon_2), Rect.new(0,0,24,24))
    self.contents.blt(68,5,RPG::Cache.icon(CT_Pictures::Icon_3), Rect.new(0,0,24,24))
    self.contents.blt(100,5,RPG::Cache.icon(CT_Pictures::Icon_4), Rect.new(0,0,24,24))
    self.contents.blt(132,5,RPG::Cache.icon(CT_Pictures::Icon_5), Rect.new(0,0,24,24))
    self.contents.blt(164,5,RPG::Cache.icon(CT_Pictures::Icon_6), Rect.new(0,0,24,24))
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    self.cursor_rect.set(@index * 32, 1, 32, 32)
  end
end
#==============================================================================
# ** Window_Actors
#------------------------------------------------------------------------------
#  This class is for choosing an actor to be equipped
#==============================================================================
class Window_Actors < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(30, 21, 350, 450)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.index = 0
    self.z += 50
    self.active = false
    self.opacity = 0
    @item_max = $game_party.actors.size
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.bold = true
    self.contents.blt(0, 0, RPG::Cache.picture(CT_Pictures::Actor_bg_inactive), Rect.new(0,0,270,409))
    self.contents.blt(0, @index * 102, RPG::Cache.picture(CT_Pictures::Actor_bg), Rect.new(0,0,270,102))
    $game_temp.cms_index = @old_index = @index
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      y  = i * 102
      pow = actor.str + actor.atk
      self.contents.draw_text(14, y, 100, 32, actor.name)
      self.contents.draw_text(154, y, 100, 32, "LV #{actor.level}")
      self.contents.draw_text(60, y + 65, 100, 32, "#{pow}")
      self.contents.draw_text(210, y + 65, 100, 32, "#{actor.pdef}")
      draw_actor_hp(actor, 14, y + 20)
      draw_actor_sp(actor, 14, y + 40)
      self.contents.blt(14, y + 70, RPG::Cache.icon($data_weapons[actor.weapon_id] == nil ? CT_Pictures::Weapon_alternative : $data_weapons[actor.weapon_id].icon_name), Rect.new(0,0,24,24))
      self.contents.blt(174, y + 70, RPG::Cache.icon($data_armors[actor.armor1_id] == nil ? CT_Pictures::Shield_alternative : $data_armors[actor.armor1_id].icon_name), Rect.new(0,0,24,24))
    end
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    self.cursor_rect.set(0, @index * 102, 0, 0)
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    super
    if @old_index != @index
      refresh
      @old_index = @index
    end
  end   
end
#==============================================================================
# ** Window_NewEquip
#------------------------------------------------------------------------------
#  This window displays items the actor is currently equipped with on the
#  equipment screen, stats etc.
#==============================================================================
class Window_NewEquip < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(300, 20, 350, 450)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.index = 0
    self.active = false
    self.opacity = 0
    @item_max = 5
    @old_index = $game_temp.cms_index
    refresh
  end
  #--------------------------------------------------------------------------
  # * Item Acquisition
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.bold = true
    self.contents.blt(0, 0, RPG::Cache.picture(CT_Pictures::Equip_bg), Rect.new(0,0,270,410))
    @actor = $game_party.actors[$game_temp.cms_index]
    self.contents.draw_text(164, 10, 100, 32, @actor.name)
    draw_actor_state(@actor, 164, 42)
    self.contents.draw_text(164, 74, 100, 32, "LV #{@actor.level}")
    #self.contents.blt(20,20,RPG::Cache.picture("Faces/" + @actor.character_name), Rect.new(0,0,100,100))
    self.contents.blt(20,20, RPG::Cache.battler(@actor.battler_name, 255), Rect.new(0,0,100,100))
    @data = []
    @data.push($data_weapons[@actor.weapon_id])
    @data.push($data_armors[@actor.armor1_id])
    @data.push($data_armors[@actor.armor2_id])
    @data.push($data_armors[@actor.armor3_id])
    @data.push($data_armors[@actor.armor4_id])
    @item_max = @data.size
    self.contents.font.color = system_color
    y = 115
    self.contents.draw_text(14, 25 * 0 + y, 92, 32, $data_system.words.weapon)
    self.contents.draw_text(14, 25 * 1 + y, 92, 32, $data_system.words.armor1)
    self.contents.draw_text(14, 25 * 2 + y, 92, 32, $data_system.words.armor2)
    self.contents.draw_text(14, 25 * 3 + y, 92, 32, $data_system.words.armor3)
    self.contents.draw_text(15, 25 * 4 + y, 92, 32, $data_system.words.armor4)
    draw_item_name(@data[0], 110, 25 * 0 + y)
    draw_item_name(@data[1], 110, 25 * 1 + y)
    draw_item_name(@data[2], 110, 25 * 2 + y)
    draw_item_name(@data[3], 110, 25 * 3 + y)
    draw_item_name(@data[4], 110, 25 * 4 + y)
    self.contents.font.color = normal_color
    self.contents.draw_text(14, 250, 500, 32, $data_system.words.str)
    self.contents.draw_text(14, 270, 500, 32, $data_system.words.atk)
    self.contents.draw_text(14, 290, 500, 32, $data_system.words.int)
    self.contents.draw_text(14, 310, 500, 32, $data_system.words.dex)
    self.contents.draw_text(144, 250, 500, 32, $data_system.words.agi)
    self.contents.draw_text(144, 270, 500, 32, $data_system.words.pdef)
    self.contents.draw_text(144, 290, 500, 32, $data_system.words.mdef)
    up_color = Color.new(100, 255, 255)
    str = @actor.str.to_s
    if @new_str != nil
      str = @new_str.to_s
      @actor.str == @new_str ? self.contents.font.color = normal_color : @actor.str < @new_str ?
      self.contents.font.color = up_color : self.contents.font.color = disabled_color
    end
    self.contents.draw_text(25, 250, 100, 32, str, 2)
    atk = @actor.atk.to_s
    if @new_atk != nil
      atk = @new_atk.to_s
      @actor.atk == @new_atk ? self.contents.font.color = normal_color : @actor.atk < @new_atk ?
      self.contents.font.color = up_color : self.contents.font.color = disabled_color
    end
    self.contents.draw_text(25, 270, 100, 32, atk, 2)
    int = @actor.int.to_s
    if @new_int != nil
      int = @new_int.to_s
      @actor.int == @new_int ? self.contents.font.color = normal_color : @actor.int < @new_int ?
      self.contents.font.color = up_color : self.contents.font.color = disabled_color
    end
    self.contents.draw_text(25, 290, 100, 32, int, 2)
    agi = @actor.agi.to_s
    if @new_agi != nil
      agi = @new_agi.to_s
      @actor.agi == @new_agi ? self.contents.font.color = normal_color : @actor.agi < @new_agi ?
      self.contents.font.color = up_color : self.contents.font.color = disabled_color
    end
    self.contents.draw_text(160, 250, 100, 32, agi, 2)
    pdef = @actor.pdef.to_s
    if @new_pdef != nil
      pdef = @new_pdef.to_s
      @actor.pdef == @new_pdef ? self.contents.font.color = normal_color : @actor.pdef < @new_pdef ?
      self.contents.font.color = up_color : self.contents.font.color = disabled_color
    end
    self.contents.draw_text(160, 270, 100, 32, pdef, 2)
    mdef = @actor.mdef.to_s
    if @new_mdef != nil
      mdef = @new_mdef.to_s
      @actor.mdef == @new_mdef ? self.contents.font.color = normal_color : @actor.mdef < @new_mdef ?
      self.contents.font.color = up_color : self.contents.font.color = disabled_color
    end
    self.contents.draw_text(160, 290, 100, 32, mdef, 2)
    dex = @actor.dex.to_s
    if @new_mdef != nil
      dex = @new_dex.to_s
      @actor.dex == @new_dex ? self.contents.font.color = normal_color : @actor.dex < @new_dex ?
      self.contents.font.color = up_color : self.contents.font.color = disabled_color
    end
    self.contents.draw_text(160, 310, 100, 32, dex, 2)
    self.contents.font.color = normal_color
    self.contents.draw_text(14, 353, 500, 32, "EXP")
    self.contents.draw_text(14, 370, 500, 32, "NEXT")
    self.contents.draw_text(14, 353, 240, 32, "#{@actor.exp}",2)
    self.contents.draw_text(14, 370, 240, 32, "#{@actor.next_exp}",2)
  end
  #--------------------------------------------------------------------------
  # * Set parameters after changing equipment
  #--------------------------------------------------------------------------
  def set_new_parameters(new_str, new_atk, new_int, new_agi, new_pdef, new_mdef, new_dex)
    if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef or
      @new_str != new_str or @new_int != new_int or @new_agi != new_agi or @new_dex != new_dex
      @new_str = new_str
      @new_atk = new_atk
      @new_int = new_int
      @new_agi = new_agi
      @new_pdef = new_pdef
      @new_mdef = new_mdef
      @new_dex = new_dex
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    self.cursor_rect.set(14, @index * 25 + 115, 0, 0)
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    super
    if @old_index != $game_temp.cms_index
      refresh
      @old_index = $game_temp.cms_index
    end
  end
end
#==============================================================================
# ** Window_Item
#------------------------------------------------------------------------------
#  This window displays items in possession on the item and battle screens.
#==============================================================================
class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  def initialize
    super(48, 125, 500, 320)
    self.index = 0
    self.z = 150
    # If in battle, move window to center of screen
    # and make it semi-transparent
    if $game_temp.in_battle
      @column_max = 2
      self.y = 64
      self.x = 0
      self.y = 64
      self.width = 640
      self.height = 256
      self.back_opacity = 160
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    if $game_temp.in_battle
      x = 4 + index % 2 * (288 + 32)
      y = index / 2 * 32
    else
      self.contents.font.size = 18
      self.contents.font.bold = true
      x = 4
      y = index * 32
    end
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    if $game_temp.in_battle
      self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
      self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
    else
      self.contents.draw_text(x + 300, y, 16, 32, ":", 1)
      self.contents.draw_text(x + 316, y, 24, 32, number.to_s, 2)
    end
  end
end
#==============================================================================
# ** Window_Help
#------------------------------------------------------------------------------
#  This window shows skill and item explanations along with actor status.
#==============================================================================
class Window_Help < Window_Base
  #--------------------------------------------------------------------------
  # * Set Text
  #  text  : text string displayed in window
  #  align : alignment (0..flush left, 1..center, 2..flush right)
  #--------------------------------------------------------------------------
  def set_text(text, align = 0)
    # If at least one part of text and alignment differ from last time
    if text != @text or align != @align
      # Redraw text
      self.contents.clear
      unless $game_temp.in_battle
        self.contents.font.size = 18
        self.contents.font.bold = true
      end
      self.contents.font.color = normal_color
      self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
      @text = text
      @align = align
      @actor = nil
    end
    self.visible = true
  end
end
#==============================================================================
# ** Window_Target
#------------------------------------------------------------------------------
#  This window selects a use target for the actor on item and skill screens.
#==============================================================================
class Window_Target < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(305, 0, 336, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z += 100
    self.opacity = 0
    @item_max = $game_party.actors.size
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.bold = true
    self.contents.blt(0,101,RPG::Cache.picture(CT_Pictures::Target_bg), Rect.new(0,0,640,480))
    for i in 0...$game_party.actors.size
      x = 4
      y = i * 79 + 100
      actor = $game_party.actors[i]
      pow = actor.str + actor.atk
      draw_actor_graphic(actor, 235, y + 85)
      self.contents.font.size = 17
      self.contents.draw_text(14, y, 100, 32, actor.name)
      self.contents.draw_text(154, y, 100, 32, "LV #{actor.level}")
      self.contents.draw_text(50, y + 55, 100, 32, "#{pow}")
      self.contents.draw_text(190, y + 55, 100, 32, "#{actor.pdef}")
      draw_actor_hp(actor, 14, y + 15)
      draw_actor_sp(actor, 14, y + 30)
      self.contents.blt(14, y + 60, RPG::Cache.icon($data_weapons[actor.weapon_id] == nil ? CT_Pictures::Weapon_alternative : $data_weapons[actor.weapon_id].icon_name), Rect.new(0,0,24,24))
      self.contents.blt(154, y + 60, RPG::Cache.icon($data_armors[actor.armor1_id] == nil ? CT_Pictures::Shield_alternative : $data_armors[actor.armor1_id].icon_name), Rect.new(0,0,24,24))
    end
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    # Cursor position -1 = all choices, -2 or lower = independent choice
    # (meaning the user's own choice)
    if @index >= 0
      self.cursor_rect.set(10, @index * 82 + 100, 0, 0)
    else
      self.cursor_rect.set(10, 100, 0, 0)
    end
  end
end
#==============================================================================
# ** Window_Skill
#------------------------------------------------------------------------------
#  This window displays usable skills on the skill and battle screens.
#==============================================================================
class Window_Skill < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(310, 32, 300, 352)
    self.contents = Bitmap.new (width - 32, height - 32)
    self.index = 0
    self.opacity = 0
    @actor = actor
    @column_max = 1
    # If in battle, move window to center of screen
    # and make it semi-transparent
    if $game_temp.in_battle
      @column_max = 2
      self.opacity = 255
      self.x = 0
      self.y = 64
      self.height = 256
      self.width = 640
      self.back_opacity = 160
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    if $game_temp.in_battle
      x = 4 + index % 2 * (288 + 32)
      y = index / 2 * 32
    else
      self.contents.font.size = 18
      self.contents.font.bold = true
      x = 4
      y = index * 32
    end
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
    if $game_temp.in_battle
      self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
    end
  end
end
#==============================================================================
# ** Window_SkillActor
#------------------------------------------------------------------------------
#  This window displays selectable characters for the skill window
#==============================================================================
class Window_SkillActor < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(32,20,320,350)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.index = 0
    @column_max = 1
    @item_max = $game_party.actors.size
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.bold = true
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      x = 60
      y = i * 80
      draw_actor_graphic(actor, 30, y + 65)
      self.contents.draw_text(x, y, 150, 32, "#{actor.name}")
      self.contents.draw_text(x + 80, y, 150, 32, "LV #{actor.level}")
      draw_actor_hp(actor, x, y + 15)
      draw_actor_sp(actor, x, y + 30)
      draw_actor_state(actor, x, y + 45)
    end
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #-------------------------------------------------------------------------
  def update_cursor_rect
    self.cursor_rect.set(10, @index * 80 + 10, 0, 0)
  end
end
#==============================================================================
# ** Window_SkillActor2
#------------------------------------------------------------------------------
#  This window displays selected character for the skill window
#==============================================================================
class Window_SkillActor2 < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #   actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(32,20,320,350)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    @old_index = $game_temp.skill_index
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.size = 18
    self.contents.font.bold = true
    x = 60
    y = 0
    draw_actor_graphic(@actor, 30, y + 65)
    self.contents.draw_text(x, y, 150, 32, "#{@actor.name}")
    self.contents.draw_text(x + 80, y, 150, 32, "LV #{@actor.level}")
    draw_actor_hp(@actor, x, y + 15)
    draw_actor_sp(@actor, x, y + 30)
    draw_actor_state(@actor, x, y + 45)
    self.contents.draw_text(x + 70, y + 45, 150, 32,$data_system.words.sp + " uses ")
    unless @actor.skills[$game_temp.skill_index] == nil
      if @actor.sp < $data_skills[@actor.skills[$game_temp.skill_index]].sp_cost
        self.contents.font.color = knockout_color
      else
        self.contents.font.color = normal_color
      end
    end
    @sp_uses = @actor.skills[$game_temp.skill_index] == nil ? "" : $data_skills[@actor.skills[$game_temp.skill_index]].sp_cost.to_s
    self.contents.draw_text(x + 135, y + 45, 150, 32, @sp_uses)
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    super
    if $game_temp.skill_index != @old_index
      refresh
      @old_index = $game_temp.skill_index
    end
  end
end
#==============================================================================
# ** Window_SaveFile
#------------------------------------------------------------------------------
#  This window displays save files on the save and load screens.
#==============================================================================
class Window_SaveFile < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     file_index : save file index (0-2)
  #     filename   : file name
  #--------------------------------------------------------------------------
  def initialize(file_index, filename)
    super(42, 35 + file_index % 4 * 70, 640, 90)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    @file_index = file_index
    @filename = "Save#{@file_index + 1}.rxdata"
    @time_stamp = Time.at(0)
    @file_exist = FileTest.exist?(@filename)
    if @file_exist
      file = File.open(@filename, "r")
      @time_stamp = file.mtime
      @characters = Marshal.load(file)
      @frame_count = Marshal.load(file)
      @game_system = Marshal.load(file)
      @game_switches = Marshal.load(file)
      @game_variables = Marshal.load(file)
      @total_sec = @frame_count / Graphics.frame_rate
      file.close
    end
    refresh
    @selected = false
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.bold = true
    # Draw file number
    self.contents.font.color = normal_color
    name = "File#{@file_index + 1}"
    self.contents.draw_text(4, 0, 600, 32, name)
    @name_width = contents.text_size(name).width
    # If save file exists
    if @file_exist
      self.contents.draw_text(0, 0, 600, 32, @game_system.chapter.to_s,1)
    end
  end
end
#==============================================================================
# ** Window_SaveStatus
#------------------------------------------------------------------------------
#  This window displays stats on the save files.
#==============================================================================
class Window_SaveStatus < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0,0,640,480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    @index = $game_temp.save_index
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    filename = "Save#{$game_temp.save_index + 1}.rxdata"
    return unless FileTest.exist?(filename)
    file = File.open(filename, "r")
    @characters = Marshal.load(file)
    @frame_count = Marshal.load(file)
    @game_system = Marshal.load(file)
    @game_switches = Marshal.load(file)
    @game_variables = Marshal.load(file)
    Marshal.load(file)
    Marshal.load(file)
    Marshal.load(file)
    party = Marshal.load(file)
    Marshal.load(file)
    map = Marshal.load(file)
    self.contents.font.size = 20
    self.contents.font.bold = true
    for i in 0...party.actors.size
      actor = party.actors[i]
      x = 284
      y = i * 36 + 265
      draw_actor_name(actor, x + 40, y - 2)
      draw_actor_level(actor, x + 170, y - 2)
      self.contents.blt(x + 5, y + 10, RPG::Cache.icon(actor.character_name), Rect.new(0,0,24,24))
      self.contents.draw_text(x + 40, y + 16, 150, 32, "#{$data_system.words.hp} #{actor.hp} / #{actor.maxhp}")
      self.contents.draw_text(x + 170, y + 16, 150, 32, "#{$data_system.words.sp} #{actor.sp} / #{actor.maxsp}")
    end
    total_sec = @frame_count / Graphics.frame_rate
    hour = total_sec / 60 / 60
    min = total_sec / 60 % 60
    sec = total_sec % 60
    text = sprintf("%02d:%02d:%02d", hour, min, sec)
    map_name = load_data("Data/MapInfos.rxdata")[map.map_id].name
    self.contents.font.size = 20
    self.contents.draw_text(55, 262, 144, 32, map_name)
    self.contents.draw_text(55, 294, 144, 32, "TIME:")
    self.contents.draw_text(100, 294, 144, 32, text,2)
    self.contents.draw_text(55, 326, 144, 32, $data_system.words.gold + ":")
    self.contents.draw_text(100, 326, 144, 32, party.gold.to_s,2)
    self.contents.draw_text(55, 358, 144, 32, "Save #:")
    self.contents.draw_text(100, 358, 144, 32, @game_system.save_count.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    super
    if @index != $game_temp.save_index
      refresh
    @index = $game_temp.save_index
    end
  end
end
#==============================================================================
# ** Window_PartyChange
#------------------------------------------------------------------------------
#  This window displays changable characters.
#==============================================================================
class Window_PartyChange < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0,0,640,480)
    self.index = 0
    self.opacity = 0
    @item_max = $game_party.actors.size
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.bold = true
    self.contents.blt(x + 180, 0, RPG::Cache.picture(CT_Pictures::Ex_bg), Rect.new(0,0,270,440))
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      x = 140
      y = i * 110
      draw_actor_graphic(actor, x + 260, y + 80)
      draw_actor_name(actor,x + 80, y)
      draw_actor_level(actor, x + 160, y)
      draw_actor_hp(actor, x + 80, y + 20)
      draw_actor_sp(actor, x + 80, y + 40)
      self.contents.draw_text(x + 104, y + 72, 150, 32, (actor.str + actor.atk).to_s)
      self.contents.draw_text(x + 204, y + 72, 150, 32, actor.pdef.to_s)
      self.contents.blt(x + 80, y + 72, RPG::Cache.icon($data_weapons[actor.weapon_id] == nil ? CT_Pictures::Weapon_alternative : $data_weapons[actor.weapon_id].icon_name), Rect.new(0,0,24,24))
      self.contents.blt(x + 180, y + 72, RPG::Cache.icon($data_armors[actor.armor1_id] == nil ? CT_Pictures::Shield_alternative : $data_armors[actor.armor1_id].icon_name), Rect.new(0,0,24,24))
    end
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #-------------------------------------------------------------------------
  def update_cursor_rect
    self.cursor_rect.set(190, @index * 110, 0, 0)
  end
end
#==============================================================================
# ** Window_EquipItem
#------------------------------------------------------------------------------
#  This window displays choices when opting to change equipment on the
#  equipment screen.
#==============================================================================
class Window_EquipItem2 < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     equip_type : equip region (0-3)
  #--------------------------------------------------------------------------
  def initialize(equip_type)
    super(50, 210, 275, 240)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = $game_party.actors[$game_temp.cms_index]
    @equip_type = equip_type
    @old_actor = $game_temp.cms_index
    self.active = false
    @old_index = @index
    self.z = 400
    self.opacity = 0
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Item Acquisition
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # Add equippable weapons
    if @equip_type == 0
      weapon_set = $data_classes[@actor.class_id].weapon_set
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
          @data.push($data_weapons[i])
        end
      end
    end
    # Add equippable armor
    if @equip_type != 0
      armor_set = $data_classes[@actor.class_id].armor_set
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0 and armor_set.include?(i)
          if $data_armors[i].kind == @equip_type-1
            @data.push($data_armors[i])
          end
        end
      end
    end
    # Add blank page
    @data.push(nil)
    # Make a bit map and draw all items
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max-1
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    x = 4
    y = index * 32
    case item
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.font.color = normal_color
    self.contents.font.size = 18
    self.contents.font.bold = true
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 185, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 201, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Update
  #-------------------------------------------------------------------------
  def update
    super
    if $game_temp.cms_index != @old_actor
      @actor = $game_party.actors[$game_temp.cms_index]
      refresh
      @old_actor = $game_temp.cms_index
    end
  end
end
#==============================================================================
# ** Window_EquipDescription
#------------------------------------------------------------------------------
#  This window displays the kind of equipment
#==============================================================================
class Window_EquipDescription < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(30, 21, 320, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    @cms_index = $game_temp.cms_index
    @equip_index = $game_temp.equip_index
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.bold = true
    actor = $game_party.actors[$game_temp.cms_index]
    y  = 0
    pow = actor.str + actor.atk
    self.contents.draw_text(14, y, 100, 32, actor.name)
    self.contents.draw_text(154, y, 100, 32, "LV #{actor.level}")
    self.contents.draw_text(60, y + 65, 100, 32, "#{pow}")
    self.contents.draw_text(210, y + 65, 100, 32, "#{actor.pdef}")
    draw_actor_hp(actor, 14, y + 20)
    draw_actor_sp(actor, 14, y + 40)
    self.contents.blt(14, y + 70, RPG::Cache.icon($data_weapons[actor.weapon_id] == nil ? CT_Pictures::Weapon_alternative : $data_weapons[actor.weapon_id].icon_name), Rect.new(0,0,24,24))
    self.contents.blt(174, y + 70, RPG::Cache.icon($data_armors[actor.armor1_id] == nil ? CT_Pictures::Shield_alternative : $data_armors[actor.armor1_id].icon_name), Rect.new(0,0,24,24))
    if $game_temp.equip_index == 0
      text = $data_system.words.weapon
    else
      text = eval("$data_system.words.armor#{$game_temp.equip_index}")
    end
    self.contents.draw_text(14,122,250,32, "#{text}", 1)
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    super
    if @cms_index != $game_temp.cms_index or @equip_index != $game_temp.equip_index
      refresh
      @cms_index = $game_temp.cms_index
      @equip_index = $game_temp.equip_index
    end
  end
end
#==============================================================================
# ** Window_PlayTime
#------------------------------------------------------------------------------
#  This window displays play time on the menu screen.
#==============================================================================
class Window_PlayTime < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 384, 160, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.z = 9999
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.font.size = 18
    self.contents.font.bold = true
    self.contents.draw_text(4, 0, 120, 32, "TIME:")
    self.contents.draw_text(4, 32, 120, 32, $data_system.words.gold + ":")
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    text = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, 32, text, 2)
    self.contents.draw_text(4, 32, 120, 32, $game_party.gold.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end
#==============================================================================
# ** Window_End
#------------------------------------------------------------------------------
#  This window displays the end window.
#==============================================================================
class Window_End < Window_Selectable
  def initialize
    super(0,0,192,128)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 3
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.draw_text(4, 0, 150, 32, "To Title")
    self.contents.draw_text(4, 32, 150, 32, "Shutdown")
    self.contents.draw_text(4, 64, 150, 32, "Cancel")
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    self.cursor_rect.set(4, @index * 32, 0, 0)
  end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================
class Window_Base < Window
  def draw_item_name(item, x, y)
    if item == nil
      return
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 28, y, 110, 32, item.name)
  end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Get the current EXP
  #--------------------------------------------------------------------------
  def now_exp
    return @exp - @exp_list[@level]
  end
  #--------------------------------------------------------------------------
  # * Get the next level's EXP
  #--------------------------------------------------------------------------
  def next_exp
    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
end
#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  This class handles data surrounding the system. Backround music, etc.
#  is managed here as well. Refer to "$game_system" for the instance of
#  this class.
#==============================================================================
class Game_System
  attr_accessor :chapter
  alias raz_cms_system_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    @chapter = ""
    raz_cms_system_initialize
  end
end
#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
#  This class handles temporary data that is not included with save data.
#  Refer to "$game_temp" for the instance of this class.
#==============================================================================
class Game_Temp
  attr_accessor :cms_index
  attr_accessor :skill_index
  attr_accessor :save_index
  attr_accessor :equip_index
  attr_accessor :equip_window
  alias raz_cms_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    @cms_index = 0
    @skill_index = 0
    @save_index = 0
    @equip_index = 0
    raz_cms_initialize
  end
end
#==============================================================================
# ** Scene_File
#------------------------------------------------------------------------------
#  This is a superclass for the save screen and load screen.
#==============================================================================
class Scene_File
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     help_text : text string shown in the help window
  #--------------------------------------------------------------------------
  def initialize(help_text)
    @help_text = help_text
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Make save file window
    @back_ground = Sprite.new
    @back_ground.bitmap = RPG::Cache.picture(CT_Pictures::BG_Picture)
    @savefile_windows = []
    @save_background = Sprite.new
    @save_background.bitmap = RPG::Cache.picture(CT_Pictures::Save_bg)
    @save_status = Window_SaveStatus.new
    for i in 0..2
      @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
    end
    # Select last file to be operated
    @file_index = $game_temp.last_file_index
    @savefile_windows[@file_index].selected = true
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @save_background.dispose
    @save_status.dispose
    @back_ground.dispose
    for i in @savefile_windows
      i.dispose
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    @save_status.update
    $game_temp.save_index = @file_index
    if Input.trigger?(Input::C)
      # Call method: on_decision (defined by the subclasses)
      on_decision(make_filename(@file_index))
      $game_temp.last_file_index = @file_index
      return
    end
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Call method: on_cancel (defined by the subclasses)
      on_cancel
      return
    end
    # If the down directional button was pressed
    if Input.repeat?(Input::DOWN)
      # If the down directional button pressed down is not a repeat,
      # or cursor position is more in front than 3
      unless @file_index == 2
        if Input.trigger?(Input::DOWN)
          # Play cursor SE
          $game_system.se_play($data_system.cursor_se)
          # Move cursor down
          @savefile_windows[@file_index].selected = false
          @file_index = (@file_index + 1)
          @savefile_windows[@file_index].selected = true
          return
        end
      end
      # If the up directional button was pressed
      elsif Input.repeat?(Input::UP)
        # If the up directional button pressed down is not a repeat、
        # or cursor position is more in back than 0
        unless @file_index == 0
        if Input.trigger?(Input::UP)
          # Play cursor SE
          $game_system.se_play($data_system.cursor_se)
          # Move cursor up
          @savefile_windows[@file_index].selected = false
          @file_index = (@file_index - 1)
          @savefile_windows[@file_index].selected = true
          return
        end
      end
    end
  end
end