=begin
===============================================================================
  文字显示速度控制 By喵呜喵5
===============================================================================
 
【说明】
 
  1、通过一个变量控制显示文字的速度
 
  2、通过一个按键来快进对话(可能与其他脚本存在冲突)
 
  3、对话中自由停顿指定时长
 
【说明】
 
  关于自由停顿:
 
  使用转义字符\w[x]对话将停顿x帧,停顿过程中可以按键跳过停顿
 
  使用转义字符\nw[x]对话将停顿x帧,无法跳过停顿
 
=end
$m5script ||= {};$m5script[:M5MT20131130] = 20141218
module M5MT20131130
#==============================================================================
#  设定部分
#==============================================================================
 
  SPE = 15
 
  # 在这里设置控制对话速度的变量ID
 
  BUT = :CTRL
 
  # 在这里设置快进对话的按键
 
    SWI = 0
 
    # 当对应ID的开关打开时,不使用快进对话按键的功能
 
    OFF = false
 
    # 设置为 true 时,快进对话按键功能将被关闭
    # 当快进对话按键功能与其他脚本发生冲突时,
    # 请尝试将这里设置成 true 并将本脚本放在冲突脚本之下
 
#==============================================================================
#  设定结束
#==============================================================================
  def self.button_off
    OFF || $game_switches[SWI]
  end
end
class Window_Message
  alias m5_wait_for_one_character wait_for_one_character
  def wait_for_one_character
    [$game_variables[M5MT20131130::SPE], 0].max.times do |i|
      m5_wait_for_one_character
    end
  end
  alias m5_20131130_process_escape_character process_escape_character
  def process_escape_character(code, text, pos)
    case code.upcase
    when 'W'
      [obtain_escape_param(text),0].max.times do |i|
        update_show_fast
        Fiber.yield unless @show_fast || @line_show_fast
      end
    when 'NW'
      ([obtain_escape_param(text),0].max).times { Fiber.yield }
    else
      m5_20131130_process_escape_character(code, text, pos)
    end
  end
  alias m5_20131130_update_show_fast update_show_fast
  def update_show_fast
    m5_20131130_update_show_fast
    return if M5MT20131130.button_off
    @show_fast = @show_fast || Input.press?(M5MT20131130::BUT)
  end
  alias m5_20141218_wait wait
  def m5_20141218_wait(duration)
    return m5_20141218_wait if M5MT20131130.button_off
    [duration,0].max.times do |i|
      Fiber.yield unless Input.press?(M5MT20131130::BUT)
    end
  end
  alias m5_20141218_input_pause input_pause
  def input_pause
    return m5_20141218_input_pause if M5MT20131130.button_off
    self.pause = true
    wait(10)
    Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C)||\
      Input.press?(M5MT20131130::BUT)
    Input.update
    self.pause = false
  end
end