设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1007|回复: 2
打印 上一主题 下一主题

[已经过期] 求腳本家帮忙改对话框脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
72 小时
注册时间
2008-10-27
帖子
70
跳转到指定楼层
1
发表于 2012-1-21 22:47:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是个可以改对话框背景的脚本,但是改过之后对话框的消失变得很突然
想把它改得跟默认一样,出现跟消失的时候会淡入淡出
但是脚本盲不晓得该怎么作,有请高手动刀...拜托了!
  1. # ▼▲▼ No 9. メッセージ表示フルグレードアップX ▼▲▼
  2. #
  3. # update 2007/12/26
  4. #
  5. #==============================================================================
  6. # □ カスタマイズポイント
  7. #==============================================================================
  8. class Window_Message < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # 文字サイズ設定
  11.   #--------------------------------------------------------------------------
  12.   DEFAULT_FONT_SIZE      =  20      # 標準文字サイズ( 22が初期設定 )
  13.   DEFAULT_LINE_SPACE     =  24      # 標準行間   ( 32が初期設定 )
  14.   #--------------------------------------------------------------------------
  15.   # 基本メッセージウィンドウ
  16.   #--------------------------------------------------------------------------
  17.   DEFAULT_RECT           = Rect.new(48, 0, 544, 152)
  18.   DEFAULT_BACK_OPACITY   = 160      # ウィンドウの不透明度
  19.   DEFAULT_STRETCH_ENABLE = true     # 五行以上の場合自動的にサイズを変更する
  20.   #--------------------------------------------------------------------------
  21.   # 通常モード(一文字ずつ描画)
  22.   #--------------------------------------------------------------------------
  23.   DEFAULT_TYPING_ENABLE = true  # (falseにすると同時に全文章を表示)
  24.   DEFAULT_TYPING_SPEED  = 1     # 通常モード時の基本メッセージスピード(大きいほど遅い)
  25.   #--------------------------------------------------------------------------
  26.   # 個人スピード設定
  27.   #--------------------------------------------------------------------------
  28.   TALK_SPEEDS = {
  29.   }
  30.   #--------------------------------------------------------------------------
  31.   # インフォメーションウィンドウ
  32.   #--------------------------------------------------------------------------
  33.   INFO_RECT              = Rect.new(-16, 64, 672, DEFAULT_LINE_SPACE + 16)
  34.   #--------------------------------------------------------------------------
  35.   # テロップモード (スキップ禁止、文字描画速度を遅くし、自動的に閉じます)
  36.   #--------------------------------------------------------------------------
  37.   TELOP_SWITCH_ID       = 8     # テロップモードをONにするスイッチ ID
  38.   TELOP_TYPING_SPEED    = 4     # テロップモード時の基本メッセージスピード
  39.   TELOP_HOLD_WAIT       = 40    # 自動閉じまでの待機時間[単位:F]
  40.   #--------------------------------------------------------------------------
  41.   # 高速スキップ/タイピングスキップ
  42.   #--------------------------------------------------------------------------
  43.   KEY_TYPE_SKIP         = Input::B # タイピングスキップ(残りを瞬間表示)
  44.   KEY_HISPEED_SKIP      = Input::L # 高速スキップ
  45.   HISKIP_ENABLE_SWITCH_ID = 0 # 高速スキップを有効にするスイッチのID.( 0 は常時可能)
  46.   SKIP_BAN_SWITCH_ID      = 5 # 高速/タイピングを共にスキップ禁止するスイッチのID. ( 0 は常時可能)
  47.   #--------------------------------------------------------------------------
  48.   # キャラポップ
  49.   #--------------------------------------------------------------------------
  50.   CHARPOP_HEIGHT         =  56      # キャラポップの高さ
  51.   #--------------------------------------------------------------------------
  52.   # ネームウィンドウ
  53.   #--------------------------------------------------------------------------
  54.   NAME_WINDOW_SKIN        = "MessageName"     # 画像ファイル(Windowskins)
  55.   NAME_WINDOW_OFFSET_X    =   0     # \name ウィンドウのオフセット位置 X
  56.   NAME_WINDOW_OFFSET_Y    =   2     # \name ウィンドウのオフセット位置 Y
  57.   NAME_WINDOW_TEXT_SIZE   =  15     # \name ウィンドウの文字サイズ
  58.   NAME_WINDOW_TEXT_COLOR  = Color.new(224,252,255,255) # \name ウィンドウ文字色
  59.   #--------------------------------------------------------------------------
  60.   # 終了時フェードアウト (Fade Out Before Terminate)
  61.   #--------------------------------------------------------------------------
  62.   FOBT_DURATION           =  20     # \fade を指定した時のフェード持続時間
  63.   #--------------------------------------------------------------------------
  64.   # 文字描画SE 除外文字
  65.   #--------------------------------------------------------------------------
  66.   NOT_SOUND_CHARACTERS = [" ", " ", "・", "、", "。", "─"]
  67. end
  68. module XRXS9
  69.   #--------------------------------------------------------------------------
  70.   # 自動ウェイト文字
  71.   #--------------------------------------------------------------------------
  72.   TYPEWAITS = ["・","・","、","。"]
  73.   #--------------------------------------------------------------------------
  74.   # メッセージ背景
  75.   #--------------------------------------------------------------------------
  76.   BACK_NAME = "MessageBack" # (Windowskins)
  77.   BACK_OX   =  0
  78.   BACK_OY   =  24
  79. end
  80. #==============================================================================
  81. # メッセージ背景
  82. #==============================================================================
  83. class Game_System
  84.   attr_accessor :messageback_name
  85.   def messageback_name
  86.     return @messageback_name.nil? ? XRXS9::BACK_NAME : @messageback_name
  87.   end
  88. end
  89. #==============================================================================
  90. # --- セリフ効果音 ---
  91. #        ◇スクリプト:$game_system.speak_se = RPG::AudioFile.new("ファイル名")
  92. #        と設定して使用します。
  93. #==============================================================================
  94. class Game_System
  95.   attr_accessor :speak_se
  96.   def speak_se_play
  97.     self.se_play(self.speak_se) if self.speak_se != nil
  98.   end
  99. end
  100. #==============================================================================
  101. # --- キャラポップ限界位置指定 --- [単位:マップ座標]
  102. #==============================================================================
  103. class Game_System
  104.   attr_accessor :limit_right
  105. end
  106. #==============================================================================
  107. # --- マテリアル機構連携
  108. #==============================================================================
  109. class Game_Temp
  110.   attr_accessor :current_material
  111. end
  112. #==============================================================================
  113. # □ Sprite_Pause
  114. #==============================================================================
  115. class Sprite_Pause < Sprite
  116.   def initialize
  117.     super
  118.     self.bitmap = RPG::Cache.windowskin($game_system.windowskin_name)
  119.     self.x = 604
  120.     self.y = 456
  121.     self.z = 6001
  122.     @count = 0
  123.     @wait_count = 0
  124.     update
  125.   end
  126.   def update
  127.     super
  128.     if @wait_count > 0
  129.       @wait_count -= 1
  130.     else
  131.       @count = (@count + 1)%4
  132.       x = 160 + @count % 2
  133.       y =  64 + @count / 2
  134.       self.src_rect.set(x, y, 16, 16)
  135.       @wait_count = 4
  136.     end
  137.   end
  138. end
  139. #==============================================================================
  140. # 選択肢ウィンドウ
  141. #==============================================================================
  142. class Window_MessageSelect < Window_Selectable
  143.   #--------------------------------------------------------------------------
  144.   # オブジェクト初期化
  145.   #--------------------------------------------------------------------------
  146.   def initialize(window)
  147.     @message_window = window
  148.     super(0,0,160,160)
  149.     self.visible = false
  150.     self.back_opacity = Window_Message::DEFAULT_BACK_OPACITY
  151.     self.contents = Bitmap.new(1,1)
  152.     @column_max = 1
  153.     self.index = -1
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # セット!
  157.   #--------------------------------------------------------------------------
  158.   def set(texts)
  159.     if texts.empty?
  160.       texts = [""]
  161.     end
  162.     max_width = 1
  163.     for text in texts
  164.       w = self.contents.text_size(text).width
  165.       max_width = w if max_width < w
  166.     end
  167.     self.contents.dispose
  168.     self.contents = Bitmap.new(max_width + 8, texts.size * 32)
  169.     self.width  = self.contents.width  + 32
  170.     self.height = self.contents.height + 32
  171.     y = 0
  172.     for text in texts
  173.       self.contents.draw_text(4, y, max_width, 32, text)
  174.       y += 32
  175.     end
  176.     self.reset
  177.     self.index = 0
  178.     @item_max = texts.size
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # 座標のリセット
  182.   #--------------------------------------------------------------------------
  183.   def reset
  184.     self.x = @message_window.x + @message_window.width - self.width
  185.     upper = @message_window.y
  186.     under = 480 - (@message_window.y + @message_window.height)
  187.     if upper > under
  188.       self.y = @message_window.y - self.height
  189.     else
  190.       self.y = @message_window.y + @message_window.height
  191.     end
  192.   end
  193. end
  194. #==============================================================================
  195. # ■ Window_Message
  196. #==============================================================================
  197. class Window_Message < Window_Selectable
  198.   # 定数
  199.   AUTO   = 0
  200.   LEFT   = 1
  201.   CENTER = 2
  202.   RIGHT  = 3
  203.   #--------------------------------------------------------------------------
  204.   # ○ line_height : 行の高さ(@y増加値)を返します。
  205.   #--------------------------------------------------------------------------
  206.   def line_height
  207.     return DEFAULT_LINE_SPACE
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● オブジェクト初期化
  211.   #--------------------------------------------------------------------------
  212.   alias xrxs9_initialize initialize
  213.   def initialize
  214.     # 背景
  215.     @bgframe_sprite = Sprite.new
  216.     @bgframe_sprite.x = 320
  217.     @bgframe_sprite.y =   0
  218.     @bgframe_sprite.z +=  5
  219.     @bgframe_sprite.oy = XRXS9::BACK_OY
  220.     # 名前タブ
  221.     @name_skin = RPG::Cache.windowskin(NAME_WINDOW_SKIN)
  222.     # 文章部分
  223.     @text_sprite = Sprite.new
  224.     @text_sprite.opacity = 0
  225.     @text_sprite.bitmap = Bitmap.new(1,1)
  226.     # 選択肢部分
  227.     @select_window = Window_MessageSelect.new(self)
  228.     # 初期化
  229.     @stand_pictuers = []
  230.     @held_windows = []
  231.     @extra_windows = []
  232.     @extra_sprites = []
  233.     # ポーズサインの作成
  234.     @pause = Sprite_Pause.new
  235.     # 初期化
  236.     @line_index = 0
  237.     @telop_hold_count = 0
  238.     # 呼び戻す
  239.     xrxs9_initialize
  240.     #self.contents.dispose
  241.     #self.contents = Bitmap.new(1,1)
  242.     self.index = -1
  243.     # ポーズサインの設定
  244.     @pause.visible = false
  245.     # Z座標の設定
  246.     @pause.z = self.z + 1
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # 土台の位置連動
  250.   #--------------------------------------------------------------------------
  251.   def x=(n)
  252.     @text_sprite.x = n + 8
  253.     @select_window.reset
  254.     super
  255.   end
  256.   def y=(n)
  257.     @text_sprite.y = n + 8
  258.     @select_window.reset
  259.     super
  260.   end
  261.   def z=(n)
  262.     @text_sprite.z = n + 3
  263.     super
  264.   end
  265.   def visible=(b)
  266.     @text_sprite.visible = b
  267.     @bgframe_sprite.visible = b
  268.     super
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● 解放
  272.   #--------------------------------------------------------------------------
  273.   alias xrxs9_dispose dispose
  274.   def dispose
  275.     # 呼び戻す
  276.     xrxs9_dispose
  277.     # ホールドされたウィンドウを開放
  278.     @held_windows.each {|window| window.dispose}
  279.     @held_windows.clear
  280.     # ポーズサイン
  281.     @pause.dispose
  282.     # 選択肢ウィンドウ
  283.     @select_window.dispose
  284.     # 外字キャッシュ開放
  285.     if @gaiji_cache != nil
  286.       @gaiji_cache.dispose
  287.       @gaiji_cache = nil
  288.     end
  289.     # 文章部分
  290.     @text_sprite.dispose
  291.     # 背景ピクチャを解放
  292.     @bgframe_sprite.dispose
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● メッセージ終了処理
  296.   #--------------------------------------------------------------------------
  297.   alias xrxs9_terminate_message terminate_message
  298.   def terminate_message
  299.     # 素通りフラグをクリア
  300.     @passable = false
  301.     $game_player.messaging_moving = false
  302.     # 選択肢
  303.     @select_window.visible = false
  304.     # ウィンドウホールド
  305.     if @window_hold
  306.       # ウィンドウやスプライトの複製を作成
  307.       @held_windows.push(Window_Copy.new(self))
  308.       @held_windows.push(Sprite_Copy.new(@text_sprite))
  309.       for window in @extra_windows
  310.         next if window.disposed?
  311.         @held_windows.push(Window_Copy.new(window))
  312.       end
  313.       for sprite in @extra_sprites
  314.         next if sprite.disposed?
  315.         @held_windows.push(Sprite_Copy.new(sprite))
  316.       end
  317.       # ネームウィンドウを解放
  318.       if @name_frame != nil
  319.         @name_frame.dispose
  320.         @name_frame = nil
  321.       end
  322.       # 設定をクリア
  323.       self.opacity = 0
  324.       @text_sprite.opacity = 0
  325.       @extra_windows.clear
  326.       @extra_sprites.clear
  327.     else
  328.       # ホールドされたウィンドウを開放
  329.       @held_windows.each {|object| object.dispose}
  330.       @held_windows.clear
  331.     end
  332.     # 呼び戻す
  333.     xrxs9_terminate_message
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ○ ポップキャラクターの設定と取得
  337.   #--------------------------------------------------------------------------
  338.   def pop_character=(character_id)
  339.     @pop_character = character_id
  340.   end
  341.   def pop_character
  342.     return @pop_character
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ○ クリア
  346.   #--------------------------------------------------------------------------
  347.   def clear
  348.     @text_sprite.bitmap.clear
  349.     @text_sprite.bitmap.font.color = normal_color
  350.     @text_sprite.bitmap.font.size  = DEFAULT_FONT_SIZE
  351.     self.opacity      = 255
  352.     self.back_opacity = DEFAULT_BACK_OPACITY
  353.     @text_sprite.opacity  = 255
  354.     @mid_stop     = false       # \!      の中断中フラグ
  355.     @current_name = nil         # \name   のネーム保持
  356.     @window_hold  = false       # \hold   のウィンドウホールドのフラグ
  357.     @stand_pictuer_hold = false # \picthold のスタンドピクチャの保持フラグ
  358.     @passable     = false       # \pass   の素通り可能フラグ
  359.     @inforesize   = false       # \info   のインフォリサイズ
  360.     @material     = nil         # \material
  361.     @face_bitmap  = nil         # \f
  362.     # 固定設定をロード
  363.     @auto_align   = LEFT         # 基本位置揃え
  364.     @default_rect = DEFAULT_RECT # 基本メッセージウィンドウ矩形
  365.     # あと残りのここらへんのものを全て 0 で初期化
  366.     @x = @y = @indent = @line_index = 0
  367.     @cursor_width = @write_wait = @lines_max = 0
  368.     # 各行の描画幅&位置揃え設定初期化
  369.     @line_widths = []
  370.     @line_aligns = []
  371.     # self.pop_character が nil の場合、標準位置。-1の場合、文字センター。
  372.     # 0以上の場合 キャラポップ。0は主人公、1以降はイベント。
  373.     self.pop_character = nil
  374.     # ネームウィンドウを解放
  375.     if @name_frame != nil
  376.       @name_frame.dispose
  377.       @name_frame = nil
  378.     end
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ● リフレッシュ [再定義]
  382.   #--------------------------------------------------------------------------
  383.   def refresh
  384.     # ビットマップの取得と設定
  385.     if $game_system.messageback_name != ""
  386.       bitmap = RPG::Cache.windowskin($game_system.messageback_name)
  387.       @bgframe_sprite.bitmap = bitmap
  388.       @bgframe_sprite.ox = bitmap.width / 2 + XRXS9::BACK_OX
  389.       self.opacity = 0
  390.     end
  391.     # 初期化
  392.     self.clear
  393.     # 表示待ちのメッセージがある場合
  394.     if $game_temp.message_text != nil
  395.       @now_text = $game_temp.message_text
  396.       # 改行削除指定\_があるか?
  397.       if (/\\_\n/.match(@now_text)) != nil
  398.         $game_temp.choice_start -= 1
  399.         @now_text.gsub!(/\\_\n/) { "" }
  400.       end
  401.       # インフォ判定
  402.       @inforesize = (@now_text.gsub!(/\\info/) { "" } != nil)
  403.       # ウィンドウ保持指定\holdがあるか?
  404.       @window_hold = (@now_text.gsub!(/\\hold/) { "" } != nil)
  405.       # \vの即時変換
  406.       @now_text.gsub!(/\\[v]\[([0-9]+)\]/) { $game_variables[$1.to_i].to_s }
  407.       # \Vを独自ルーチンに変更(追加部分)
  408.       begin
  409.         last_text = @now_text.clone
  410.         @now_text.gsub!(/\\[V]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
  411.       end until @now_text == last_text
  412.       @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  413.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  414.       end
  415.       # \name 判定
  416.       if @now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" }
  417.         @current_name = $1
  418.       end
  419.       # ウィンドウポップ判定
  420.       if @now_text.gsub!(/\\[Pp]\[([0-9]+)\]/) { "" }
  421.         self.pop_character = $1.to_i
  422.       end
  423.       # 顔グラフィック表示指定
  424.       if (/\\[Ff]\[(.+?),([0-9]+)\]/.match(@now_text)) != nil
  425.         @now_text.gsub!(/\\[Ff]\[(.+?),([0-9]+)\]/) { "" }
  426.         begin
  427.           face = RPG::Cache.picture($1)
  428.           n    = $2.to_i
  429.           rect = Rect.new(n % 4 * 96, n / 4 * 96, 96, 96)
  430.           @face_bitmap = Bitmap.new(96,96)
  431.           @face_bitmap.blt(0, 0, face, rect)
  432.         rescue
  433.           nil
  434.         end
  435.       end
  436.       # 改行指定
  437.       if (/\\n/.match(@now_text)) != nil
  438.         $game_temp.choice_start += 1
  439.         @now_text.gsub!(/\\n/) { "\n" }
  440.       end
  441.       # フェード判定
  442.       if @now_text.gsub!(/\\fade/) { "" }
  443.         @fade_count_before_terminate = FOBT_DURATION
  444.       end
  445.       # 素通り判定
  446.       if @now_text.gsub!(/\\pass/) { "" }
  447.         @passable = true
  448.         $game_player.messaging_moving = true
  449.       end
  450.       # 末尾連続改行を削除
  451.       nil while( @now_text.sub!(/\n\n\z/) { "\n" } )
  452.       # 行数の取得
  453.       @lines_max = @now_text.scan(/\n/).size
  454.       # 現在搭載されている制御文字を配列化
  455.       rxs = [/\\\w\[(\w+)\]/, /\\[.]/, /\\[|]/, /\\[>]/, /\\[<]/, /\\[!]/,
  456.               /\\[~]/, /\\[i]/, /\\[Oo]\[([0-9]+)\]/, /\\[Hh]\[([0-9]+)\]/,
  457.               /\\[b]\[([0-9]+)\]/, /\\[Rr]\[(.*?)\]/, /\\[B]/, /\\[I]/]
  458.       # インフォウィンドウの強制センタリング
  459.       @line_aligns[0] = CENTER if @inforesize
  460.       # 選択肢用の文章をカット!&再構築
  461.       lines = @now_text.split(/\n/)
  462.       text  = ""
  463.       texts = []
  464.       for i in 0...lines.size
  465.         if i < $game_temp.choice_start
  466.           text += lines[i] + "\n"
  467.         else
  468.           texts.push(lines[i])
  469.         end
  470.       end
  471.       @now_text = text
  472.       @select_window.set(texts)
  473.       #
  474.       # [行ごとの設定]
  475.       #
  476.       lines = @now_text.split(/\n/)
  477.       for i in 0..@lines_max
  478.         # 行の取得 (インデックスは逆順)
  479.         line = lines[@lines_max - i]
  480.         # 空白行の場合は次へ
  481.         next if line == nil
  482.         # 制御文字を削る
  483.         line.gsub!(/\\[Ee]\[([0-9]+)\]/) { "\022[#{$1}]" }
  484.         for rx in rxs
  485.           line.gsub!(rx) { "" }
  486.         end
  487.         # 位置揃えを取得
  488.         @line_aligns[@lines_max - i] =
  489.           line.sub!(/\\center/) {""} ? CENTER :
  490.           line.sub!(/\\right/)  {""} ? RIGHT :
  491.           line.sub!(/\\left/)   {""} ? LEFT :
  492.                                        AUTO
  493.         # 行の横幅の取得と設定
  494.         cx = @text_sprite.bitmap.text_size(line).width
  495.         @line_widths[@lines_max - i] = cx
  496.       end
  497.       # 位置揃え制御文字の削除
  498.       @now_text.gsub!(/\\center/) {""}
  499.       @now_text.gsub!(/\\right/) {""}
  500.       @now_text.gsub!(/\\left/) {""}
  501.       # キャラポップ時のウィンドウリサイズ
  502.       if self.pop_character != nil and self.pop_character >= 0
  503.         max_x = @line_widths.max.to_i
  504.         n = 0
  505.         if @current_name != nil
  506.           n = @name_skin.width + 2
  507.         end
  508.         self.width  = [max_x + @indent + DEFAULT_FONT_SIZE/2, n].max + 32
  509.         self.height = [@lines_max * line_height, @indent].max + 16
  510.       end
  511.       #
  512.       # 「変換」
  513.       #
  514.       # 便宜上、"\\\\" を "\000" に変換
  515.       @now_text.gsub!(/\\\\/) { "\000" }
  516.       # "\\C" を "\001" に、"\\G" を "\002" に、
  517.       # "\\S" を "\003" に、"\\A" を "\004" に変換
  518.       @now_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  519.       @now_text.gsub!(/\\[Gg]/) { "\002" }
  520.       @now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\003[#{$1}]" }
  521.       @now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "\004[#{$1}]" }
  522.       @now_text.gsub!(/\\[.]/) { "\005" }
  523.       @now_text.gsub!(/\\[|]/) { "\006" }
  524.       # 競合回避のため\016以降を使用する
  525.       @now_text.gsub!(/\\[>]/) { "\016" }
  526.       @now_text.gsub!(/\\[<]/) { "\017" }
  527.       @now_text.gsub!(/\\[!]/) { "\020" }
  528.       @now_text.gsub!(/\\[~]/) { "\021" }
  529.       @now_text.gsub!(/\\[Ee]\[([0-9]+)\]/) { "\022[#{$1}]" }
  530.       # インデント設定(追加部分)
  531.       @now_text.gsub!(/\\[i]/) { "\023" }
  532.       # テキスト透過率指定(追加部分)
  533.       @now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\024[#{$1}]" }
  534.       # テキストサイズ指定(追加部分)
  535.       @now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\025[#{$1}]" }
  536.       @now_text.gsub!(/\\[Ss]ize\[([0-9]+)\]/) { "\025[#{$1}]" }
  537.       # 空白挿入(追加部分)
  538.       @now_text.gsub!(/\\[b]\[([0-9]+)\]/) { "\026[#{$1}]" }
  539.       # ルビ表示(追加部分)
  540.       @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "\027[#{$1}]" }
  541.       # Font.bold
  542.       @now_text.gsub!(/\\[B]/) { "\031" }
  543.       # Font.italic
  544.       @now_text.gsub!(/\\[I]/) { "\032" }
  545.       # マテリアル描画
  546.       if @now_text.gsub!(/\\material/) { "" }
  547.         @material = $game_temp.current_material
  548.       end
  549.       # ここで一旦ウィンドウ位置更新
  550.       reset_window
  551.       #
  552.       # \nameがあるか?~「ネームウィンドウの作成」
  553.       #
  554.       if @current_name != nil
  555.         # スキンの取得
  556.         frame = @name_skin
  557.         # 作成
  558.         @name_frame = Sprite.new
  559.         @name_frame.bitmap = Bitmap.new(frame.width, frame.height)
  560.         @name_frame.bitmap.font.size = NAME_WINDOW_TEXT_SIZE
  561.         @name_frame.bitmap.blt(0, 0, frame, frame.rect)
  562.         x = self.x + NAME_WINDOW_OFFSET_X
  563.         n = 0
  564.         @name_frame.x = x
  565.         @name_frame.y = self.y + NAME_WINDOW_OFFSET_Y - frame.height
  566.         @name_frame.z = self.z + 2
  567.         @name_frame.bitmap.draw_text(8, 0, frame.width - 32, frame.height, @current_name, n)
  568.         # エクストラスプライトに登録
  569.         @extra_sprites.push(@name_frame)
  570.       end
  571.     end
  572.     # ウィンドウを更新
  573.     reset_window
  574.     # コンテンツの再作成
  575.     if @text_sprite.bitmap != nil
  576.       @text_sprite.bitmap.dispose
  577.       @text_sprite.bitmap = nil
  578.     end
  579.     @text_sprite.bitmap = Bitmap.new(self.width - 16, self.height - 16)
  580.     @text_sprite.bitmap.font.color = normal_color
  581.     #
  582.     # 選択肢の場合
  583.     #
  584.     if $game_temp.choice_max > 0
  585.       @item_max = $game_temp.choice_max
  586.     #  self.active = true
  587.       self.index = 0
  588.     end
  589.     #
  590.     # 数値入力の場合
  591.     #
  592.     if $game_temp.num_input_variable_id > 0
  593.       digits_max = $game_temp.num_input_digits_max
  594.       number = $game_variables[$game_temp.num_input_variable_id]
  595.       @input_number_window = Window_InputNumber.new(digits_max)
  596.       @input_number_window.number = number
  597.       @input_number_window.x = self.x + 8 + @indent
  598.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  599.     end
  600.     # タイピングスピードを取得
  601.     @write_speed = DEFAULT_TYPING_SPEED
  602.     if @current_name != nil
  603.       speed = TALK_SPEEDS[@current_name]
  604.       @write_speed = speed if speed != nil
  605.     end
  606.     # テロップモードの場合
  607.     if $game_switches[TELOP_SWITCH_ID]
  608.       @write_speed = TELOP_TYPING_SPEED
  609.       @fade_count_before_terminate = FOBT_DURATION
  610.       @telop_hold_count = TELOP_HOLD_WAIT
  611.     end
  612.     # フォントサイズを再設定
  613.     @text_sprite.bitmap.font.size  = DEFAULT_FONT_SIZE
  614.     # 顔グラフィック
  615.     if @face_bitmap != nil
  616.       #y = (self.height - 128) / 2
  617.       @text_sprite.bitmap.blt(8, 0, @face_bitmap, @face_bitmap.rect)
  618.       @indent += 120
  619.       @face_bitmap.dispose
  620.       @face_bitmap = nil
  621.     end
  622.     # 選択肢ならカーソルの更新
  623.     if @line_index >= $game_temp.choice_start
  624.       @select_window.visible = true
  625.       self.active = true
  626.     end
  627.     # 行初期化
  628.     line_reset
  629.     # マテリアルの場合
  630.     case @material
  631.     when RPG::Item, RPG::Weapon, RPG::Armor
  632.       text = @material.name
  633.       rect = @text_sprite.bitmap.text_size(text)
  634.       icon = RPG::Cache.icon(@material.icon_name)
  635.       @text_sprite.bitmap.blt(@x + 8, (line_height - 24)/2, icon, icon.rect)
  636.       @text_sprite.bitmap.draw_text(@x + 36, 0, rect.width, line_height, text)
  637.       @x += rect.width + 32
  638.     when Numeric
  639.       text = @material.to_s
  640.       w = @text_sprite.bitmap.text_size(text).width
  641.       @text_sprite.bitmap.font.size  = DEFAULT_FONT_SIZE + 1
  642.       @text_sprite.bitmap.draw_text(@x, 0, w, line_height, text)
  643.       @text_sprite.bitmap.font.size  = DEFAULT_FONT_SIZE - 2
  644.       @text_sprite.bitmap.draw_text(@x + w + 4, 0, 36, line_height, "スィル")
  645.       @x += w + 40
  646.     end
  647.     # 瞬間表示の場合はこのままフレーム更新へ
  648.     update unless DEFAULT_TYPING_ENABLE
  649.   end
  650.   #--------------------------------------------------------------------------
  651.   # ○ 行初期化
  652.   #--------------------------------------------------------------------------
  653.   def line_reset
  654.     # 位置揃えの取得
  655.     align = @line_aligns[@line_index]
  656.     align = @auto_align if align == AUTO
  657.     align = CENTER if @inforesize
  658.     case align
  659.     when LEFT
  660.       @x  = @indent
  661.       @x += 8 if $game_temp.choice_start <= @line_index
  662.     when CENTER
  663.       @x = self.width / 2 - 16 - @line_widths[@line_index].to_i / 2
  664.     when RIGHT
  665.       @x = self.width - 40 - @line_widths[@line_index].to_i
  666.     end
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ● フレーム更新 [再定義]
  670.   #--------------------------------------------------------------------------
  671.   def update
  672.     # メッセージ素通り中にイベントが開始した場合
  673.     if @passable and not $game_player.messaging_moving
  674.       self.opacity = 0
  675.       terminate_message
  676.       return
  677.     end
  678.     # 選択肢
  679.     if @line_index >= $game_temp.choice_start
  680.       @select_window.update
  681.     end
  682.     # ポーズサイン
  683.     @pause.update if @pause.visible
  684.     # 呼び戻す
  685.     super
  686.     # フレーム更新↓
  687.     update_main
  688.   end
  689.   #--------------------------------------------------------------------------
  690.   # キャラポップが稼動中か?
  691.   #--------------------------------------------------------------------------
  692.   def chara_pop_working?
  693.     return (!self.pop_character.nil? and self.pop_character >= 0)
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ○ フレーム更新
  697.   #--------------------------------------------------------------------------
  698.   def update_main
  699.     # 動きに対応
  700.     update_reset_window if chara_pop_working?
  701.     # 高速スキップ処理
  702.     if hispeed_skippable_now? and Input.press?(KEY_HISPEED_SKIP)
  703.       @text_sprite.opacity = 255
  704.       @fade_in = false
  705.     end
  706.     # フェードインの場合はここで処理
  707.     if @fade_in
  708.       @text_sprite.opacity += 24
  709.       if @input_number_window != nil
  710.         @input_number_window.contents_opacity += 24
  711.       end
  712.       if @text_sprite.opacity == 255
  713.         @fade_in = false
  714.       end
  715.       return
  716.     end
  717.     # 変換
  718.     @now_text = nil if @now_text == ""
  719.     # 表示待ちのメッセージがある場合
  720.     if @now_text != nil and not @mid_stop
  721.       # 一文字ごとのウェイト
  722.       if @write_wait > 0
  723.         @write_wait -= 1
  724.         return
  725.       end
  726.       @text_not_skip = DEFAULT_TYPING_ENABLE
  727.       # Bボタンが押されている場合
  728.       if skippable_now? and hispeed_skippable_now? and
  729.         (Input.press?(KEY_TYPE_SKIP) or Input.press?(KEY_HISPEED_SKIP))
  730.         @text_not_skip = false
  731.       end
  732.       # 文字描画処理
  733.       while true
  734.         # c に @now_text から1文字だけ取得
  735.         c = @now_text.slice!(/./m)
  736.         # 連続実行中に文字が取得できなくなったら終了
  737.         if c == nil
  738.           @text_not_skip = true
  739.           break
  740.         end
  741.         # 1文字の描画
  742.         type_text(c)
  743.         # 終了判定
  744.         break if @text_not_skip
  745.       end
  746.       @write_wait += @write_speed
  747.       return
  748.     end
  749.     # 数値入力中の場合
  750.     if @input_number_window != nil
  751.       @input_number_window.update
  752.       # 決定
  753.       if Input.trigger?(Input::C)
  754.         $game_system.se_play($data_system.decision_se)
  755.         $game_variables[$game_temp.num_input_variable_id] = @input_number_window.number
  756.         $game_map.need_refresh = true
  757.         # 数値入力ウィンドウを解放
  758.         @input_number_window.dispose
  759.         @input_number_window = nil
  760.         terminate_message
  761.       end
  762.       return
  763.     end
  764.     # テロップホールド処理
  765.     if $game_switches[TELOP_SWITCH_ID] and @telop_hold_count >= 1
  766.       @telop_hold_count -= 1
  767.       return
  768.     end
  769.     #
  770.     # メッセージ表示中の場合
  771.     #
  772.     if @contents_showing
  773.       # 終了前フェーズでない場合
  774.       unless @fade_phase_before_terminate
  775.         # 選択肢の表示中でなければポーズサインを表示
  776.         if $game_temp.choice_max == 0
  777.           #self.pause = true
  778.           @pause.visible = true
  779.         end
  780.         # 決定 (テロップモードならボタンを押さなくても実行)
  781.         if Input.trigger?(Input::C) or
  782.            $game_switches[TELOP_SWITCH_ID] or
  783.            (skippable_now? and Input.press?(KEY_HISPEED_SKIP))
  784.           if $game_temp.choice_max > 0
  785.             $game_system.se_play($data_system.decision_se)
  786.             $game_temp.choice_proc.call(self.index)
  787.           end
  788.           if @mid_stop
  789.             @mid_stop = false
  790.             @pause.visible = false
  791.             return
  792.           elsif @fade_count_before_terminate.to_i > 0
  793.             # 終了前フェーズへ
  794.             @fade_phase_before_terminate = true
  795.           else
  796.             terminate_message
  797.           end
  798.           @pause.visible = false
  799.         end
  800.         # キャンセル
  801.         if Input.trigger?(Input::B)
  802.           if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  803.             $game_system.se_play($data_system.cancel_se)
  804.             $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  805.             terminate_message
  806.             @pause.visible = false
  807.             return
  808.           end
  809.         end
  810.       end
  811.       # 終了前:カウント + フェードアウト
  812.       if @fade_phase_before_terminate
  813.         # 例外補正
  814.         @fade_count_before_terminate  = 0 if @fade_count_before_terminate == nil
  815.         # カウント
  816.         @fade_count_before_terminate -= 1
  817.         # 不透明度を計算・設定
  818.         opacity = @fade_count_before_terminate * (256 / FOBT_DURATION)
  819.         @text_sprite.opacity = opacity
  820.         # 終了判定
  821.         if @fade_count_before_terminate <= 0
  822.           @fade_count_before_terminate = 0
  823.           @fade_phase_before_terminate = false
  824.           terminate_message
  825.         end
  826.       end
  827.       return
  828.     end
  829.     #
  830.     # 以下、メッセージ表示中でない場合
  831.     #
  832.     # フェードアウト中以外で表示待ちのメッセージか選択肢がある場合
  833.     if @fade_out == false and $game_temp.message_text != nil
  834.       @contents_showing = true
  835.       $game_temp.message_window_showing = true
  836.       refresh
  837.       Graphics.frame_reset
  838.       self.visible = true
  839.       @bgframe_sprite.visible = true
  840.       @text_sprite.opacity = 0
  841.       if @input_number_window != nil
  842.         @input_number_window.contents_opacity = 0
  843.       end
  844.       @fade_in = true
  845.       return
  846.     end
  847.     # 表示すべきメッセージがないが、ウィンドウが可視状態の場合
  848.     if self.visible
  849.       @fade_out = true
  850.       self.opacity -= 48
  851.       @text_sprite.opacity = self.opacity
  852.       @name_frame.opacity = self.opacity if @name_frame != nil
  853.       if self.opacity == 0
  854.         message_end
  855.       end
  856.       return
  857.     end
  858.   end
  859.   #--------------------------------------------------------------------------
  860.   # メッセージ処理の終了
  861.   #--------------------------------------------------------------------------
  862.   def message_end
  863.     self.visible = false
  864.     @fade_out = false
  865.     $game_temp.message_window_showing = false
  866.     @bgframe_sprite.visible = false
  867.     # ネームウィンドウを解放
  868.     if @name_frame != nil
  869.       @name_frame.dispose
  870.       @name_frame = nil
  871.     end
  872.   end
  873.   #--------------------------------------------------------------------------
  874.   # 一文字の描画
  875.   #--------------------------------------------------------------------------
  876.   def type_text(text)
  877.     c = text
  878.     # 事前変換処理
  879.     case c
  880.     when "\000"
  881.       # \\ : 本来の文字に戻す
  882.       c = "\\"
  883.     end
  884.     #
  885.     # [1文字処理]
  886.     #
  887.     case c
  888.     when "\001" # \C[n] : 文字色を変更
  889.       @now_text.sub!(/\[([0-9]+)\]/, "")
  890.       color = $1.to_i
  891.       if color >= 0 and color <= 7
  892.         @text_sprite.bitmap.font.color = text_color(color)
  893.         if @opacity != nil
  894.           color = @text_sprite.bitmap.font.color
  895.           @text_sprite.bitmap.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255)
  896.         end
  897.       end
  898.     when "\002" # \g
  899.       # ゴールドウィンドウを作成
  900.       if @gold_window == nil
  901.         @gold_window = Window_Gold.new
  902.         @gold_window.x = 560 - @gold_window.width + 64
  903.         if $game_temp.in_battle
  904.           @gold_window.y = 192
  905.         else
  906.           @gold_window.y = self.y >= 128 ? 32 : 384
  907.         end
  908.         @gold_window.back_opacity = self.back_opacity
  909.       end
  910.     when "\003" # \S[n] の場合
  911.       # 文字色を変更
  912.       @now_text.sub!(/\[([0-9]+)\]/, "")
  913.       speed = $1.to_i
  914.       if speed >= 0 and speed <= 19
  915.         @write_speed = speed
  916.       end
  917.     when "\005" # \.
  918.       @write_wait += 5
  919.     when "\006" # \|
  920.       @write_wait += 20
  921.     when "\016" # \>
  922.       @text_not_skip = false
  923.     when "\017" # \<
  924.       @text_not_skip = true
  925.     when "\020" # \!
  926.       @mid_stop = true
  927.     when "\021" # \~
  928.       terminate_message
  929.     when "\024" # \0
  930.       @now_text.sub!(/\[([0-9]+)\]/, "")
  931.       @opacity = $1.to_i
  932.       color = @text_sprite.bitmap.font.color
  933.       @text_sprite.bitmap.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255)
  934.     when "\025" # \H
  935.       @now_text.sub!(/\[([0-9]+)\]/, "")
  936.       @text_sprite.bitmap.font.size = [[$1.to_i, 6].max, 32].min
  937.     when "\027" # \Rルビ
  938.       process_ruby
  939.     when "\030" # アイコン描画
  940.       # アイコンファイル名を取得
  941.       @now_text.sub!(/\[(.*?)\]/, "")
  942.       # アイコンを描画
  943.       @text_sprite.bitmap.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24))
  944.       @x += 24
  945.     when "\022" # 外字
  946.       # []部分の除去
  947.       @now_text.sub!(/\[([0-9]+)\]/, "")
  948.       # 外字を表示
  949.       @x += draw_gaiji(4 + @x, @y * line_height + (line_height - @text_sprite.bitmap.font.size), $1.to_i)
  950.     when "\031" # \B太字 - Font.bold (排他的論理和での反転)
  951.       @text_sprite.bitmap.font.bold ^= true
  952.     when "\032" # \I斜体 - Font.italic
  953.       @text_sprite.bitmap.font.italic ^= true
  954.     when"\n" # [改行処理]
  955.       @y += 1
  956.       @line_index += 1
  957.       line_reset
  958.       # 選択肢ならカーソルの更新
  959.       if @line_index >= $game_temp.choice_start
  960.         @select_window.visible = true
  961.         self.active = true
  962.       end
  963.     else
  964.       # 文字を描画
  965.       rect = @text_sprite.bitmap.text_size(c)
  966.       @text_sprite.bitmap.draw_text(4+@x, line_height * @y, rect.width, line_height, c)
  967.       @x += rect.width
  968.       # 文字描写のSEを演奏
  969.       unless NOT_SOUND_CHARACTERS.include?(c)
  970.         $game_system.speak_se_play
  971.       end
  972.       # タイプウェイト
  973.       if XRXS9::TYPEWAITS.include?(c)
  974.         @write_wait += 5
  975.       end
  976.     end
  977.   end
  978.   #--------------------------------------------------------------------------
  979.   # ● ウィンドウの位置と不透明度の設定 [再定義]
  980.   #--------------------------------------------------------------------------
  981.   def reset_window
  982.     if @inforesize
  983.       self.x = INFO_RECT.x
  984.       self.y = INFO_RECT.y
  985.       self.width  = INFO_RECT.width
  986.       self.height = INFO_RECT.height
  987.     elsif self.pop_character != nil and self.pop_character >= 0
  988.       update_reset_window
  989.     else
  990.       self.x = @default_rect.x
  991.       self.y = @default_rect.y
  992.       self.width  = @default_rect.width
  993.       self.height = @default_rect.height
  994.       #
  995.       position = $game_system.message_position
  996.       position = 0 if $game_temp.in_battle
  997.       case position
  998.       when 0 # 上 (戦闘中は上扱い)
  999.         self.y = [16, -NAME_WINDOW_OFFSET_Y + 4].max
  1000.       when 1 # 中
  1001.         self.y = 192
  1002.       when 2 # 下
  1003.         self.y = 348
  1004.       end
  1005.       # 自動リサイズ
  1006.       n = [@lines_max, $game_temp.choice_start - 1].min
  1007.       if DEFAULT_STRETCH_ENABLE and n >= 5
  1008.         # 拡張する差分を計算
  1009.         d = @lines_max * line_height + 32 - self.height
  1010.         if d > 0
  1011.           self.height += d
  1012.           case position
  1013.           when 1  # 中
  1014.             self.y -= d/2
  1015.           when 2  # 下
  1016.             self.y -= d
  1017.           end
  1018.         end
  1019.       end
  1020.       # 背景の位置
  1021.       @bgframe_sprite.y = self.y
  1022.       #
  1023.       @select_window.reset
  1024.     end
  1025.     if $game_system.messageback_name != ""
  1026.       self.opacity = 0
  1027.     elsif $game_system.message_frame == 0
  1028.       self.back_opacity = DEFAULT_BACK_OPACITY
  1029.       #@name_frame.opacity = DEFAULT_BACK_OPACITY unless @name_frame.nil?
  1030.     else
  1031.       self.opacity = 0
  1032.       #@name_frame.opacity = 0 unless @name_frame.nil?
  1033.     end
  1034.     # ビットマップ
  1035.     self.contents.dispose
  1036.     self.contents = Bitmap.new(self.width - 32, self.height - 32)
  1037.     # ポーズサイン位置
  1038.     @pause.x = self.x + self.width  - 16
  1039.     @pause.y = self.y + self.height - 16
  1040.   end
  1041.   #--------------------------------------------------------------------------
  1042.   # ○ ウィンドウの位置と不透明度の設定 (キャラポップ)
  1043.   #--------------------------------------------------------------------------
  1044.   def update_reset_window
  1045.     #
  1046.     # 「キャラポップ」
  1047.     #
  1048.     if self.pop_character == 0 or $game_map.events[self.pop_character] != nil
  1049.       character = get_character(self.pop_character)
  1050.       # [X座標]
  1051.       n = self.width / 2
  1052.       n = [n, @name_skin.width + 16].max if @current_name != nil
  1053.       x = character.screen_x - n
  1054.       # [Y座標]
  1055.       case $game_system.message_position
  1056.       when 0
  1057.         y  = character.screen_y - CHARPOP_HEIGHT - self.height
  1058.       else
  1059.         y = character.screen_y + 16
  1060.       end
  1061.       # [範囲による補正]
  1062.       if $game_system.limit_right != nil
  1063.         x_max = character.screen_x + 32 * ($game_system.limit_right - character.x) - 16
  1064.       else
  1065.         x_max = 640
  1066.       end
  1067.       x_max = x_max - 4 - self.width
  1068.       y_max = 476 - self.height
  1069.       x_min = 4
  1070.       y_min = 4 + (@name_skin.height - NAME_WINDOW_OFFSET_Y)
  1071.       self.x = [[x, x_max].min, x_min].max
  1072.       self.y = [[y, y_max].min, y_min].max
  1073.       # [ネームフレーム連動]
  1074.       if  @name_frame != nil
  1075.         @name_frame.x = self.x + NAME_WINDOW_OFFSET_X
  1076.         @name_frame.y = self.y + NAME_WINDOW_OFFSET_Y - @name_frame.bitmap.height
  1077.       end
  1078.     end
  1079.     # ポーズサイン位置
  1080.     @pause.x = self.x + self.width  - 16
  1081.     @pause.y = self.y + self.height - 16
  1082.   end
  1083.   #--------------------------------------------------------------------------
  1084.   # ○ カーソルの矩形更新 [オーバーライド]
  1085.   #--------------------------------------------------------------------------
  1086.   def update_cursor_rect
  1087.     if @index >= 0
  1088.       n = $game_temp.choice_start + @index
  1089.       self.cursor_rect.set(0 + @indent, n * line_height - 8, @cursor_width, line_height)
  1090.     else
  1091.       self.cursor_rect.empty
  1092.     end
  1093.   end
  1094.   #--------------------------------------------------------------------------
  1095.   # ○ キャラクターの取得
  1096.   #     parameter : パラメータ
  1097.   #--------------------------------------------------------------------------
  1098.   def get_character(parameter)
  1099.     # パラメータで分岐
  1100.     case parameter
  1101.     when 0  # プレイヤー
  1102.       return $game_player
  1103.     else  # 特定のイベント
  1104.       events = $game_map.events
  1105.       return events == nil ? nil : events[parameter]
  1106.     end
  1107.   end
  1108.   #--------------------------------------------------------------------------
  1109.   # 現在、タイピングスキップが可能か?
  1110.   #--------------------------------------------------------------------------
  1111.   def skippable_now?
  1112.     return false if $game_switches[TELOP_SWITCH_ID]
  1113.     return ((SKIP_BAN_SWITCH_ID == 0 ? true : !$game_switches[SKIP_BAN_SWITCH_ID]) and
  1114.        (HISKIP_ENABLE_SWITCH_ID == 0 ? true : $game_switches[HISKIP_ENABLE_SWITCH_ID]))
  1115.   end
  1116.   #--------------------------------------------------------------------------
  1117.   # 現在、高速連続メッセージスキップを使用可能か?
  1118.   #--------------------------------------------------------------------------
  1119.   def hispeed_skippable_now?
  1120.     return false if $game_switches[TELOP_SWITCH_ID]
  1121.     return (HISKIP_ENABLE_SWITCH_ID == 0 ? true : $game_switches[HISKIP_ENABLE_SWITCH_ID])
  1122.   end
  1123.   #--------------------------------------------------------------------------
  1124.   # ○ 可視状態
  1125.   #--------------------------------------------------------------------------
  1126.   def visible=(b)
  1127.     @name_frame.visible = b unless @name_frame.nil?
  1128.     @input_number_window.visible  = b unless @input_number_window.nil?
  1129.     super
  1130.   end
  1131.   #--------------------------------------------------------------------------
  1132.   # メソッド テンプレート
  1133.   #--------------------------------------------------------------------------
  1134.   def process_ruby
  1135.   end
  1136.   def draw_gaiji(x, y, num)
  1137.   end
  1138.   def convart_value(option, index)
  1139.   end
  1140.   #--------------------------------------------------------------------------
  1141.   # インデックスの同期
  1142.   #--------------------------------------------------------------------------
  1143.   def index=(n)
  1144.     @select_window.index = n
  1145.     super
  1146.   end
  1147. end
  1148. #==============================================================================
  1149. # □ Window_Copy
  1150. #------------------------------------------------------------------------------
  1151. #   指定のウィンドウのコピーを作成します。
  1152. #==============================================================================
  1153. class Window_Copy < Window_Base
  1154.   #--------------------------------------------------------------------------
  1155.   # ○ オブジェクト初期化
  1156.   #--------------------------------------------------------------------------
  1157.   def initialize(window)
  1158.     super(window.x, window.y, window.width, window.height)
  1159.     self.contents = window.contents.dup unless window.contents.nil?
  1160.     self.opacity = window.opacity
  1161.     self.back_opacity = window.back_opacity
  1162.     self.z = window.z - 3
  1163.   end
  1164. end
  1165. #==============================================================================
  1166. # □ Sprite_Copy
  1167. #------------------------------------------------------------------------------
  1168. #   指定のスプライトのコピーを作成します。
  1169. #==============================================================================
  1170. class Sprite_Copy < Sprite
  1171.   #--------------------------------------------------------------------------
  1172.   # ○ オブジェクト初期化
  1173.   #--------------------------------------------------------------------------
  1174.   def initialize(sprite)
  1175.     super()
  1176.     self.bitmap = sprite.bitmap.dup unless sprite.bitmap.nil?
  1177.     self.opacity = sprite.opacity
  1178.     self.x = sprite.x
  1179.     self.y = sprite.y
  1180.     self.z = sprite.z - 3
  1181.     self.ox = sprite.ox
  1182.     self.oy = sprite.oy
  1183.   end
  1184. end
  1185. #==============================================================================
  1186. # ■ Interpreter
  1187. #==============================================================================
  1188. class Interpreter
  1189.   #--------------------------------------------------------------------------
  1190.   # ● 文章の表示
  1191.   #--------------------------------------------------------------------------
  1192.   def command_101
  1193.     # ほかの文章が message_text に設定済みの場合
  1194.     if $game_temp.message_text != nil
  1195.       # 終了
  1196.       return false
  1197.     end
  1198.     # メッセージ終了待機中フラグおよびコールバックを設定
  1199.     @message_waiting = true
  1200.     $game_temp.message_proc = Proc.new { @message_waiting = false }
  1201.     # message_text に 1 行目を設定
  1202.     $game_temp.message_text = @list[@index].parameters[0] + "\n"
  1203.     line_count = 1
  1204.     # ループ
  1205.     loop do
  1206.       # 次のイベントコマンドが文章 2 行目以降の場合
  1207.       if @list[@index+1].code == 401
  1208.         # message_text に 2 行目以降を追加
  1209.         $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
  1210.         line_count += 1
  1211.       # イベントコマンドが文章 2 行目以降ではない場合
  1212.       else
  1213.         # 次のイベントコマンドが文章の表示の場合
  1214.         if @list[@index+1].code == 101
  1215.           if (/\\next\Z/.match($game_temp.message_text)) != nil
  1216.             $game_temp.message_text.gsub!(/\\next/) { "" }
  1217.             $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
  1218.             # インデックスを進める
  1219.             @index += 1
  1220.             next
  1221.           end
  1222.         # 次のイベントコマンドが選択肢の表示の場合
  1223.         elsif @list[@index+1].code == 102
  1224.           #x# 選択肢が画面に収まる場合
  1225.           # if @list[@index+1].parameters[0].size <= 4 - line_count
  1226.           #end
  1227.           # インデックスを進める
  1228.           @index += 1
  1229.           # 選択肢のセットアップ
  1230.           $game_temp.choice_start = line_count
  1231.           setup_choices(@list[@index].parameters)
  1232.         # 次のイベントコマンドが数値入力の処理の場合
  1233.         elsif @list[@index+1].code == 103
  1234.           # 数値入力ウィンドウが画面に収まる場合
  1235.           if line_count < 4
  1236.             # インデックスを進める
  1237.             @index += 1
  1238.             # 数値入力のセットアップ
  1239.             $game_temp.num_input_start = line_count
  1240.             $game_temp.num_input_variable_id = @list[@index].parameters[0]
  1241.             $game_temp.num_input_digits_max = @list[@index].parameters[1]
  1242.           end
  1243.         end
  1244.         # 継続
  1245.         return true
  1246.       end
  1247.       # インデックスを進める
  1248.       @index += 1
  1249.     end
  1250.   end
  1251. end
  1252. #==============================================================================
  1253. # --- メッセージ中移動許可 ---
  1254. #==============================================================================
  1255. class Game_Player < Game_Character
  1256.   attr_accessor :messaging_moving
  1257. end
复制代码

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2012-1-22 09:35:14 | 只看该作者
其实这个脚本不是对话加强么- -和更改窗口背景有什么关系

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
72 小时
注册时间
2008-10-27
帖子
70
3
 楼主| 发表于 2012-1-23 00:00:41 | 只看该作者
Wind2010 发表于 2012-1-22 09:35
其实这个脚本不是对话加强么- -和更改窗口背景有什么关系

是对话加强没错啊,只是也可以更改背景
加强后默认的效果跑掉了,希望对话框在使用这个脚本的同时也能淡出啊~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-1 17:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表