#==============================================================================
#                   「メッセージスピード」(ACE) Ver.1.1
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#   その他、詳しい利用規約はブログを参照して下さい。
#
#------------------------------------------------------------------------------
#
#   デフォルトでは固定の文字表示速度を変更できます。
#   (正確には1文字毎のウェイト時間を任意のフレーム数に変更します)
#   
#   使い方は、初期設定のSPEED = nの数値で指定します。
#   また、イベントコマンドの「スクリプト」で
#   「n7ms(n)」と入力すると、ゲーム中にも変更できます。
#   (因みに(n)を省略すると、初期設定の数値に戻せます)
#   
#   更に、メッセージの入力で制御文字「\N7MS[n]」を入力すると
#   そのページだけ、一時的に速度を変更できます。
#   
#   デフォルトの速度は1で、nでn倍遅く、0だと瞬間表示です。
#   小数も使えるため、0.5だとデフォルトの2倍の早さになります。
#   また、マイナスをつけることで「ラインモード」となり
#   1文字毎ではなく1行毎に表示するようになります。
#
#==============================================================================
#◇初期設定
module Nana
module MesSpeed
  
  SPEED = 1

end
end
#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
#  システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存
# します。このクラスのインスタンスは $game_system で参照されます。
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :message_speed            # メッセージスピード
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias n7ms_initialize initialize
  def initialize
    n7ms_initialize
    @message_speed = Nana::MesSpeed::SPEED
  end
end
#==============================================================================
# ■ Window_Message
#------------------------------------------------------------------------------
#  文章表示に使うメッセージウィンドウです。
#==============================================================================

class Window_Message < Window_Base
  #--------------------------------------------------------------------------
  # ● 制御文字の処理
  #     code : 制御文字の本体部分(「\C[1]」なら「C」)
  #--------------------------------------------------------------------------
  alias n7ms_process_escape_character process_escape_character
  def process_escape_character(code, text, pos)
    case code.upcase
    when 'N7MS'
      @n7_message_speed = text.to_f
      return
    end
    n7ms_process_escape_character(code, text, pos)
  end
  #--------------------------------------------------------------------------
  # ● 改ページ処理
  #--------------------------------------------------------------------------
  alias n7ms_new_page new_page
  def new_page(text, pos)
    n7ms_new_page(text, pos)
    @n7_message_speed = $game_system.message_speed
    @n7_skip_count = 0
    @n7_line_first = true
  end
  #--------------------------------------------------------------------------
  # ● 改行文字の処理
  #--------------------------------------------------------------------------
  alias n7ms_process_new_line process_new_line
  def process_new_line(text, pos)
    n7ms_process_new_line(text, pos)
    @n7_line_first = true
  end
  #--------------------------------------------------------------------------
  # ● 一文字出力後のウェイト
  #--------------------------------------------------------------------------
  def wait_for_one_character
    update_show_fast
    
    ms = @n7_message_speed.abs
    i = ms.ceil
    f = ms - ms.to_i
    
    @n7_skip_count += f
    if @n7_skip_count >= 1
      i -= 1
      @n7_skip_count -= 1
    end

    skip = true if @n7_message_speed < 0 && !@n7_line_first
    @n7_line_first = false
    
    i.times { Fiber.yield unless @show_fast || @line_show_fast || skip }
  end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● メッセージスピード変更
  #--------------------------------------------------------------------------
  def n7ms(speed = Nana::MesSpeed::SPEED)
    $game_system.message_speed = speed
  end
end