Project1

标题: 为什么这个脚本出错误... [打印本页]

作者: 神秘来客    时间: 2014-11-16 14:26
标题: 为什么这个脚本出错误...
谁可以告诉我这是怎么回事?

在对话框是这样出错误..在战斗也是这样..
上脚本:
RUBY 代码复制
  1. #==============================================================================
  2. # ★RGSS2
  3. # STR22Core_メッセージウィンドウEXT++/本体 v1.3a 08/02/27
  4. # サポート:[url]http://otsu.cool.ne.jp/strcatyou/[/url]
  5. #
  6. # ・メッセージ機能を大幅に拡張強化強化します。
  7. # ・37種類もの制御文字を追加。コレを使いこなせる人はスゴイ。
  8. # ・いろいろマニアックな仕様になっていますが、
  9. #  その辺りは実際に使って覚えてください。
  10. # ・えくすてんどぷらすぷらす、と読む。どうでもいい
  11. # ※STR09と併用しないでください。STR09の機能はこのスクリプトに含まれています。
  12. #
  13. #------------------------------------------------------------------------------
  14. # ★ = 機能追加
  15. #
  16. # 更新履歴
  17. # ◇1.3→1.3a
  18. # ウィンドウ位置修正の条件のミスを修正
  19. # ◇1.3βa2→1.3
  20. # 第二βテスト終了。
  21. # 時々ウィンドウがスクロールしてしまうバグを修正(したつもり)
  22. # ウィンドウ位置設定の仕様を微変更
  23. #
  24. # ★ポーズサイン位置追加。
  25. #  STR22Edit の P_WINDOW の値を 2 に設定すると
  26. #  ポーズサイン位置が文末に設定されます。
  27. #
  28. # ★ウィンドウを自動で画面範囲内に収める機能を無効にする機能を追加。
  29. #  イベントコマンド等のスクリプトで、以下のどちらかのスクリプトを実行
  30. #  $game_message.unlock = true  # 収めない
  31. #  $game_message.unlock = false # 収める(初期値)
  32. #
  33. # ★\P[0]によるウィンドウポップの自動位置指定を無効にする機能を追加。
  34. #  イベントコマンド等のスクリプトで、以下のどちらかのスクリプトを実行
  35. #  $game_message.pos_autoset = true  # 有効(初期値)
  36. #  $game_message.pos_autoset = false # 無効
  37. #
  38. # ◇1.3βa1→1.3βa2
  39. # 4未満の選択肢で選択肢拡張を行うとイベントが起動しなかったりするバグを修正
  40. # バトルメッセージの挙動を一部変更しました。
  41. # バトルメッセージが即表示されないミスを修正
  42. # フェードタイプが透明度変化式だと"背景を暗くする"で
  43. #  連続で文章表示したときメッセージバックが一瞬消えるバグを修正
  44. # スリムウィンドウが無効だと戦闘が行えないバグを修正
  45. # タイピングSEが無効に出来ないミスを修正
  46. # 一度F12キーでリセットした後だと戦闘で不具合が出るバグを修正
  47. # ◇1.3β→1.3βa1
  48. # フェードタイプが縦開閉式だとふきだしが消えないバグを修正
  49. # ◇1.2→1.3β
  50. # ウィンドウ位置・サイズ強制指定で初回メッセージのポーズサインの
  51. # 位置がおかしいバグを修正
  52. # 行間を22以下にするとスクロールサインが出るバグを修正
  53. # ★最大行数拡張による、選択肢拡張に対応(バグがあると宜しくないのでβ版)
  54. # <仕様> キャンセル時の挙動は、一番最後に組み込まれた
  55. #     選択肢コマンドの設定が適用されます。
  56. # ◇1.1→1.2
  57. # STR11bとうまく併用できないバグを修正・一部仕様改善
  58. # ◇1.00→1.1
  59. # バトルメッセージの挙動がおかしいバグを修正
  60. # バグ修正ラッシュを想定して、このバージョンから設定箇所と分割。
  61. # ◇0.95β→1.00
  62. # ★フキダシアイコン表示の制御文字を追加(\U[n,m])
  63. # 一部処理を軽量化・ポーズサインの座標指定の仕様変更
  64. # ネームウィンドウのフォントをある程度指定できるようになった
  65. # 設定箇所追加・地味に解像度変更に対応
  66. # ふきだし反転判定のXY値が間違ってたバグを修正
  67. # いろいろ
  68. # ◇0.95β
  69. # テストバージョン
  70. #
  71. #==============================================================================
  72. # ■ Window_Message
  73. #==============================================================================
  74. class Window_Message < Window_Selectable
  75.   #--------------------------------------------------------------------------
  76.   # ● オブジェクト初期化(エイリアス)
  77.   #--------------------------------------------------------------------------
  78.   alias initialize_str22 initialize
  79.   def initialize
  80.     # 初期設定
  81.     initialize_vocab            # 用語リスト作成
  82.     @mwextpp = true             # EXT判定
  83.     @fade_type = FADE_TYPE      # フェードタイプ
  84.     @indent_fx = 0              # 顔グラフィックによるインデント
  85.     @contents_psx = 0           # ポーズサイン用X座標
  86.     @contents_y = 0             # とりあえずZERO
  87.     shake_reset                 # シェイク
  88.     @s_window_w = S_WINDOW_W
  89.     @s_window_h = S_WINDOW_H
  90.     # ポーズサインスプライト
  91.     @pause_window = Sprite_STRPause.new
  92.     # 同期ウィンドウ作成
  93.     @slim_window = Window.new if S_WINDOW
  94.     # ネームウィンドウ
  95.     name = Cache.system("Window").clone
  96.     name.clear_rect(80, 16, 32, 32)
  97.     @name_sprite = Sprite.new
  98.     @name_d_window = Window.new
  99.     @name_d_window.width = 24
  100.     @name_d_window.height = 24
  101.     @name_d_window.windowskin = name
  102.     @name_sprite.visible = false
  103.     @name_d_window.visible = false
  104.     # ふきだしスプライト
  105.     @popup = Sprite.new
  106.     @popup.bitmap = Cache.system(POPUP_FILE)
  107.     @popup.src_rect.set(0, 0, 32, 64)
  108.     @popup.visible = false
  109.     # フェイススプライト
  110.     @face_sprite = Sprite_STRFace.new(nil)
  111.     # 呼び戻し
  112.     initialize_str22
  113.     # リサイズ
  114.     self.x = WINDOW_RECT.x
  115.     self.y = WINDOW_RECT.y
  116.     self.width = WINDOW_RECT.width
  117.     self.height = WINDOW_RECT.height
  118.     # いろいろ初期化
  119.     @w_opacity = 0              # 不透明度
  120.     @face_lr = 0                # 顔グラフィック位置
  121.     @contents_width = [0]       # 各行の幅
  122.     @contents_y_line = [0]      # 選択肢用縦幅配列
  123.     @e_color = 0                # 縁取りカラーインデックス
  124.     @messe_wait = 0             # タイピングSEウェイト
  125.     @popid = @popid_f = -99     # ポップアップ/ふきだしID
  126.     @name_text = ""             # ネームウィンドウ
  127.     @text_speed = 0             # 文章スピード
  128.     @und_on = @str_on = false   # アンダーライン/打ち消し線ONフラグ
  129.     reset_ext                   # 共通リセット
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 解放(エイリアス)
  133.   #--------------------------------------------------------------------------
  134.   alias dispose_str22 dispose
  135.   def dispose
  136.     # 呼び戻し
  137.     dispose_str22
  138.     # ポーズサイン・スリムウィンドウ・
  139.     # ネームウィンドウ・フェイススプライト開放
  140.     @pause_window.dispose
  141.     @slim_window.dispose if S_WINDOW
  142.     @name_sprite.bitmap.dispose if @name_sprite.bitmap != nil
  143.     @name_sprite.dispose
  144.     @name_d_window.dispose
  145.     @face_sprite.bitmap.dispose if @face_sprite.bitmap != nil
  146.     @face_sprite.dispose
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● フレーム更新(エイリアス)
  150.   #--------------------------------------------------------------------------
  151.   alias update_str22 update
  152.   def update
  153.     @messe_wait -= 1 if @messe_wait > 0 # SE再生間隔調整ウェイトを進める
  154.     # フェード処理
  155.     update_str22                        # 呼び戻し
  156.     if @background == 0
  157.       self.opacity = @w_opacity
  158.     else
  159.       self.opacity = 0
  160.     end
  161.     self.contents_opacity = @w_opacity
  162.     @face_sprite.update                 # フェイススプライト更新
  163.     update_shake                        # シェイク更新
  164.     return unless $game_message.visible # メッセージ非表示ならリターン
  165.     return unless (Graphics.frame_count % STR22100) == 0
  166.     self.ox = self.oy = 0               # スクロール固定
  167.     @pause_window.update if self.pause  # ポーズサイン更新
  168.     # ネームスプライト・フェイススプライトの可視状態設定
  169.     @name_sprite.visible = (self.openness == 255)
  170.     @face_sprite.visible = @name_sprite.visible
  171.     # キャラポップアップ中の場合、座標更新
  172.     r = $game_message.xywh
  173.     window_xy_update if @popid != -99 and (r.width <= 32 or r.height <= 32)
  174.     # ふきだしの座標更新・可視状態設定
  175.     window_xy_update_f if @popid_f != -99
  176.     @popup.visible = false if self.opacity != 255 or self.openness != 255
  177.     # 数値入力(スクロールに対応させるため)
  178.     number_xy_update if $game_message.num_input_variable_id > 0
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 背景スプライトの更新
  182.   #--------------------------------------------------------------------------
  183.   def update_back_sprite
  184.     r = $game_message.xywh
  185.     a = [self.openness, @w_opacity][FADE_TYPE]
  186.     @back_sprite.opacity = a
  187.     @back_sprite.visible = (@background == 1)
  188.     @back_sprite.x = self.x + (self.width / 2)
  189.     @back_sprite.y = self.y + (self.height / 2)
  190.     @back_sprite.update
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● キャラポップ:pos0
  194.   #--------------------------------------------------------------------------
  195.   def popup_pos0(event)
  196.     # キャラクターの高さ
  197.     if event.tile_id > 0
  198.       pop_y = 32
  199.     else
  200.       b = Cache.character(event.character_name)
  201.       sign = event.character_name[/^[\!\$]./]
  202.       if sign != nil and sign.include?('$')
  203.         pop_y = b.height / 4
  204.       else
  205.         pop_y = b.height / 8
  206.       end
  207.       pop_y -= 4 unless sign != nil and sign.include?('!')
  208.     end
  209.     pop_y += 16
  210.     return (event.screen_y - self.height - pop_y)
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● ポップアップ用座標計算(追加)
  214.   #--------------------------------------------------------------------------
  215.   def window_xy_update
  216.     # IDで分岐
  217.     case @popid
  218.     when -1 ; event = $game_player                             # プレイヤー
  219.     when  0 ; event = $game_map.events[$game_message.event_id] # このイベント
  220.     else    ; event = $game_map.events[@popid]                 # 指定イベントID
  221.     end
  222.     return if event == nil
  223.     # X座標
  224.     wx = event.screen_x - (self.width / 2)
  225.     position = @position
  226.     # プレイヤーの位置でポップアップ位置変更
  227.     if @popid == 0 and $game_message.pos_autoset
  228.       if $game_player.screen_y >= event.screen_y
  229.         position = 0
  230.       else
  231.         position = 2
  232.       end
  233.     end
  234.     # ポジション別にY座標計算
  235.     case position
  236.     when 0  # 上
  237.       @gold_window.y = 360
  238.       wy = popup_pos0(event)
  239.     when 1  # 中
  240.       @gold_window.y = 0
  241.       wy = event.screen_y - (self.height / 2)
  242.     when 2  # 下
  243.       @gold_window.y = 0
  244.       wy = event.screen_y + 16
  245.     end
  246.     # 設定
  247.     if $game_message.unlock
  248.       self.x = wx
  249.       self.y = wy
  250.     else
  251.       case position
  252.       when 0
  253.         if wy < 0
  254.           @gold_window.y = 0
  255.           wy = event.screen_y + 16
  256.         end
  257.       when 2
  258.         if wy + self.height > STR22900[1]
  259.           @gold_window.y = 360
  260.           wy = popup_pos0(event)
  261.         end
  262.       end
  263.       self.x = [[wx, STR22900[0] - self.width].min, 0].max
  264.       self.y = [[wy, STR22900[1] - self.height].min, 0].max
  265.     end
  266.   end
  267.  
  268.   #--------------------------------------------------------------------------
  269.   # ● ふきだし座標計算(追加)
  270.   #--------------------------------------------------------------------------
  271.   def window_xy_update_f
  272.     @popup.visible = false
  273.     # IDで分岐
  274.     case @popid_f
  275.     when -1 ; event = $game_player                             # プレイヤー
  276.     when  0 ; event = $game_map.events[$game_message.event_id] # このイベント
  277.     else    ; event = $game_map.events[@popid_f]               # 指定イベントID
  278.     end
  279.     return if @popid_f == -2 or event == nil
  280.     src_y = $game_variables[POPUP_TYPE_V] * 64
  281.     @popup.visible = true if self.openness == 255
  282.     if event.screen_y < self.y + (self.height / 2)
  283.       position = 2
  284.       @popup.src_rect.set(32, src_y, 32, 64)
  285.       my = self.y - 32 + (@s_window_h / 2)
  286.     else
  287.       position = 0
  288.       @popup.src_rect.set(0, src_y, 32, 64)
  289.       my = self.y + self.height - 32 - (@s_window_h / 2)
  290.     end
  291.     x = event.screen_x - 16
  292.     mx = self.x + 16 + (@s_window_w / 2)
  293.     mw = self.x + self.width - 48 - (@s_window_w / 2)
  294.     @popup.x = [[x, mw].min, mx].max
  295.     @popup.y = my
  296.     if POPUP_MIRROR
  297.       case position
  298.       when 0 ; @popup.mirror = ((event.screen_x + 2) > @popup.x + 16)
  299.       when 2 ; @popup.mirror = ((event.screen_x + 2) > @popup.x + 16)
  300.       end
  301.       @popup.mirror ^= true if POPUP_LR == 1
  302.     end
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● 数値入力ウィンドウ座標セット
  306.   #--------------------------------------------------------------------------
  307.   def number_xy_update
  308.     @number_input_window.x = self.x
  309.     if @face_lr == 0 and not $game_message.face_name.empty?
  310.       @number_input_window.x += FACE_SIZE[0] + FACE_SPACE
  311.     end
  312.     @number_input_window.y = self.y + @contents_y
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● タイピングSE再生
  316.   #--------------------------------------------------------------------------
  317.   def typese_update
  318.     if @messe_wait <= 0 and MESSE
  319.       MESSAGE_SE[$game_variables[MESSE_VNUM]].play
  320.       @messe_wait = MESSE_WAIT
  321.       @messe_wait = $game_variables[MESSE_VWAI] if $game_variables[MESSE_VWAI] > 0
  322.     end
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 文字揃えセット
  326.   #--------------------------------------------------------------------------
  327.   def align_set
  328.     cx = @contents_x
  329.     w = @contents_width[@line_count]
  330.     w += FACE_SIZE[0] + FACE_SPACE if @face_lr == 1
  331.     case @line_align[@line_count]
  332.     when 1 ; @contents_x += (self.width - 32 - cx - w) / 2
  333.     when 2 ; @contents_x += self.width - 32 - cx - w
  334.     end
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ● 共通リセット(改ページ/改行)
  338.   #--------------------------------------------------------------------------
  339.   def reset_ext
  340.     @maxtextsize = WLH           # 行中の最大テキストサイズ
  341.     @line_show_fast = false      # 行早送り
  342.     @font_index = 0              # フォントインデックス
  343.     @font_size = DEFAULT_SIZE    # フォントサイズ
  344.     @e_text = false              # 縁取りテキストフラグ
  345.     @font_bold = false           # 太字フラグ
  346.     @font_italic = false         # 斜体フラグ
  347.     @bold_off = false            # 太字OFFフラグ
  348.     @italic_off = false          # 斜体OFFフラグ
  349.     @tx_und = false              # アンダーラインフラグ
  350.     @tx_str = false              # 打ち消し線フラグ
  351.     @r_mode = false              # ルビ描画モード
  352.     @rbx = 0                     # ルビ開始X座標
  353.     @rbw = 0                     # ルビ幅
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # ● 改ページ処理(再定義)
  357.   #--------------------------------------------------------------------------
  358.   def new_page
  359.     contents.clear                      # コンテンツクリア
  360.     @contents_x = 0                     # 描画X座標
  361.     @contents_y = 0                     # 描画Y座標
  362.     @line_count = 0                     # 現在の行
  363.     @show_fast = false                  # 早送り
  364.     @pause_skip = false                 # ポーズを待たない
  365.     # フェイススプライト設定
  366.     @face_sprite.set_face("", 0, FACE_SIZE[0], FACE_SIZE[1])
  367.     unless $game_message.face_name.empty?
  368.       name = $game_message.face_name
  369.       index = $game_message.face_index
  370.       @face_sprite.set_face(name, index, FACE_SIZE[0], FACE_SIZE[1])
  371.       @contents_x = FACE_SIZE[0] + FACE_SPACE if @face_lr == 0
  372.     end
  373.     @indent_fx = @contents_x            # インデント
  374.     contents.font.color = text_color(0) # カラー初期化
  375.     @e_color = 0                        # 縁取りカラー初期化
  376.     @messe_wait = 0                     # タイピングSEウェイト
  377.     @name_text = ""                     # ネームウィンドウを空に
  378.     @text_speed = 0                     # 文章スピード
  379.     reset_ext                           # 共通リセット
  380.     align_set                           # 文字揃えセット
  381.     self.x = self.x                     # ウィンドウを同期
  382.     self.y = self.y                     # ウィンドウを同期
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ● 改行処理(再定義)
  386.   #--------------------------------------------------------------------------
  387.   def new_line
  388.     @contents_psx = @contents_x if @contents_psx < @contents_x
  389.     @contents_x = 0              # 描画X座標
  390.     @contents_y += @maxtextsize  # 描画Y座標
  391.     @line_count += 1             # 行を進める
  392.     # フェイスによるインデントを設定
  393.     unless $game_message.face_name.empty?
  394.       @contents_x = FACE_SIZE[0] + FACE_SPACE if @face_lr == 0
  395.     end
  396.     reset_ext                    # 共通リセット
  397.     align_set                    # 文字揃えセット
  398.     self.x = self.x                     # ウィンドウを同期
  399.     self.y = self.y                     # ウィンドウを同期
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● メッセージの開始(エイリアス)
  403.   #--------------------------------------------------------------------------
  404.   alias start_message_str22 start_message
  405.   def start_message
  406.     start_message_str22
  407.     Graphics.frame_reset if STR22101
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ● メッセージの終了(エイリアス)
  411.   #--------------------------------------------------------------------------
  412.   alias terminate_message_str22 terminate_message
  413.   def terminate_message
  414.     @face_sprite.animation_id = @face_sprite.loop_animation_id = 0
  415.     @contents_y_line = [0]
  416.     @popid = @popid_f = -99
  417.     terminate_message_str22
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● 特殊文字の変換(エイリアス)
  421.   #--------------------------------------------------------------------------
  422.   alias convert_special_characters_str22 convert_special_characters
  423.   def convert_special_characters
  424.     # 変数・マクロ
  425.     @text.gsub!(/\\V\[([0-9]+)\]/i)    { $game_variables[$1.to_i] }
  426.     @text.gsub!(/\\M\[([0-9]+)\]/i)    { MACRO[$1.to_i] }
  427.     # 呼び戻し
  428.     convert_special_characters_str22
  429.     @text.gsub!(/\\g/)                 { "\x02" }
  430.     # 現在のマップ名
  431.     @text.gsub!(/\\MAP/i)              { $game_map.map_name_strextpp }
  432.     # 用語
  433.     @text.gsub!(/\\VO\[([0-9]+)\]/i)   { @vo[$1.to_i] }
  434.     # アイコン・アイテム
  435.     i = [$data_items, $data_weapons, $data_armors, $data_skills]
  436.     @text.gsub!(/\\IT\[([0-9]+),([0-9]+)\]/i)   {
  437.     "\\IC[#{i[$1.to_i][$2.to_i].icon_index.to_s}]\\IN[#{$1},#{$2}]" }
  438.     @text.gsub!(/\\IC\[([0-9]+)\]/i)            { "\x10[#{$1}]" }
  439.     @text.gsub!(/\\IN\[([0-9]+),([0-9]+)\]/i)   { i[$1.to_i][$2.to_i].name }
  440.     # アニメーション
  441.     @text.gsub!(/\\A\[([0-9]+),([0-9]+)\]/i)    { "\x11[#{[$1]},#{[$2]}]" }
  442.     @text.gsub!(/\\A\[\-1,([0-9]+)\]/i)         { "\x11[9999,#{[$1]}]" }
  443.     # バルーン
  444.     @text.gsub!(/\\U\[([0-9]+),([0-9]+)\]/i)    { "\xb0[#{[$1]},#{[$2]}]" }
  445.     @text.gsub!(/\\U\[\-1,([0-9]+)\]/i)         { "\xb0[9999,#{[$1]}]" }
  446.     # 文字揃え
  447.     @text.gsub!(/\\AL\[([0-9]+)\]/i)            { "\x12[#{$1}]" }
  448.     # ルビ
  449.     @text.gsub!(/\\R\[([^\[\]\s]+),([^\[\]\s]+)\]/i){ "\x98#{$1}\x99[#{$2}]" }
  450.     # ネームウィンドウ
  451.     @text.sub!(/\\NA\[([^\[\]\s]*)\]/i){ "\x89[#{$1}]]" }
  452.     # フェイス
  453.     @text.gsub!(/\\FR/i)               { "\x13" }
  454.     @text.gsub!(/\\FM/i)               { "\x14" }
  455.     @text.gsub!(/\\FC\[([^\[\]\s]+),([0-9]+)\]/i) { "\xa1[#{$1}][#{$2}]" }
  456.     @text.gsub!(/\\FCM/i)              { "\xa2" }
  457.     @text.gsub!(/\\FA\[([0-9]+)\]/i)   { "\x15[#{$1}]" }
  458.     @text.gsub!(/\\FAL\[([0-9]+)\]/i)  { "\x16[#{$1}]" }
  459.     @text.gsub!(/\\FLC\[([0-9]+)\]/i)  { "\x17[#{$1}]" }
  460.     # メッセージ表示中移動・ストップ・ウェイト・文章スピード
  461.     @text.gsub!(/\\MOVE/i)             { "\xa3" }
  462.     @text.gsub!(/\\STOP/i)             { "\x18" }
  463.     @text.gsub!(/\\W\[([0-9]+)\]/i)    { "\x94[#{$1}]" }
  464.     @text.gsub!(/\\S\[([0-9]+)\]/i)    { "\x93[#{$1}]" }
  465.     # フォント
  466.     @text.gsub!(/\\E/i)                { "\x81" }
  467.     @text.gsub!(/\\FS\[([0-9]+)\]/i)   { "\x82[#{$1}]" }
  468.     @text.gsub!(/\\FS\[D\]/i)          { "\xa0" }
  469.     @text.gsub!(/\\B/i)                { "\x83" }
  470.     @text.gsub!(/\\I/i)                { "\x84" }
  471.     @text.gsub!(/\\F\[([0-9]+)\]/i)    { "\x85[#{$1}]" }
  472.     @text.gsub!(/\\CE\[([0-9]+)\]/i)   { "\x86[#{$1}]" }
  473.     @text.gsub!(/\\UND/i)              { "\x95" }
  474.     @text.gsub!(/\\STR/i)              { "\x96" }
  475.     # ポップアップ・ふきだし
  476.     @text.sub!(/\\P\[([0-9]+)\]/i)     { "\x87[#{$1}]" }
  477.     @text.sub!(/\\P\[\-1+\]/i)         { "\x88" }
  478.     @text.sub!(/\\PP\[([0-9]+)\]/i)    { "\x90[#{$1}]" }
  479.     @text.sub!(/\\PP\[\-1+\]/i)        { "\x91" }
  480.     @text.sub!(/\\PP\[\-2+\]/i)        { "\x92" }
  481.     # シェイク
  482.     @text.gsub!(/\\SH\[(\d+),(\d+),(\d+)\]/i) { "\xa4[#{[$1]},#{[$2]},#{[$3]}]" }
  483.     # スイッチ/変数
  484.     @text.gsub!(/\\SW\[(\d+),ON\]/i)      { "\xa5[#{$1}]" }
  485.     @text.gsub!(/\\SW\[(\d+),OFF\]/i)     { "\xa6[#{$1}]" }
  486.     @text.gsub!(/\\SW\[(\d+),RV\]/i)      { "\xa7[#{$1}]" }
  487.     @text.gsub!(/\\VA\[(\d+),(\d+)\]/i)   { "\xa8[#{$1},#{$2}]" }
  488.     @text.gsub!(/\\VA\[(\d+),\-(\d+)\]/i) { "\xa9[#{$1},#{$2}]" }
  489.     # ネクスト
  490.     @text.gsub!(/\\NEXT/i)                { "" }
  491.     # 空白
  492.     @text.gsub!(/\\SPIX\[([0-9]+)\]/i)    { "\x97[#{$1}]" }
  493.   end
  494.   #--------------------------------------------------------------------------
  495.   # ● ウィンドウリセット-F(追加)
  496.   #--------------------------------------------------------------------------
  497.   def reset_window_f
  498.     # 各行の文字揃え
  499.     ar = []
  500.     for i in 0..$game_message.maxlineex
  501.       ar[i] = ALIGN
  502.     end
  503.     @line_align = ar
  504.     # 更新ストップオフ
  505.     $game_message.mapstop = false
  506.     # フェイス
  507.     @face_sprite.no_face = false    # カオナシフラグ アッアッアー
  508.     @face_lr = 0                    # 顔位置
  509.     @face_sprite.mirror = false     # 顔反転
  510.     # バック・ポジション取得
  511.     @background = $game_message.background
  512.     @position   = $game_message.position
  513.     # 透明ウィンドウなら透明に
  514.     if @background != 0
  515.       self.opacity = @w_opacity
  516.       if @background == 1
  517.         @back_sprite.bitmap.dispose
  518.         @back_sprite.bitmap = Cache.system(MESBACK_LIST[$game_variables[MESBACK_VA]])
  519.         @back_sprite.ox = @back_sprite.bitmap.width / 2
  520.         @back_sprite.oy = @back_sprite.bitmap.height / 2
  521.       end
  522.     end
  523.     # 縦開閉フェードの場合不透明度255
  524.     @w_opacity = 255 if FADE_TYPE == 0
  525.     # 透明度変化フェードの場合オープン度255
  526.     self.openness = 255 if FADE_TYPE == 1
  527.     # オートネームウィンドウの設定
  528.     if not $game_message.face_name.empty?
  529.       name = $game_message.face_name + "_" + $game_message.face_index.to_s
  530.       @name_text = A_N_WINDOW[name] if A_N_WINDOW[name] != nil
  531.       if @name_text[/Actor\[(\d+)\]/i] != nil
  532.         @name_text.sub(/Actor\[(\d+)\]/i, "")
  533.         @name_text = $game_actors[$1.to_i].name
  534.       end
  535.     end
  536.   end
  537.   #--------------------------------------------------------------------------
  538.   # ● ネームウィンドウ設定(追加)
  539.   #--------------------------------------------------------------------------
  540.   def name_window_set
  541.     # ネームウィンドウ設定
  542.     @name_sprite.bitmap.dispose if @name_sprite.bitmap != nil
  543.     @name_sprite.bitmap = nil
  544.     unless @name_text.empty?
  545.       # 計算用ダミービットマップ
  546.       bitmap = Cache.system("")
  547.       bitmap.font.name = N_WINDOW_FN
  548.       bitmap.font.size = N_WINDOW_FS
  549.       tw = bitmap.text_size(@name_text).width + 8
  550.       # ビットマップ作成
  551.       bitmap = Bitmap.new(tw, bitmap.font.size + 4)
  552.       bitmap.font.name = N_WINDOW_FN
  553.       bitmap.font.size = N_WINDOW_FS
  554.       bitmap.font.color = N_WINDOW_CO
  555.       unless N_WINDOW_ED
  556.         bitmap.draw_text(0, 0, bitmap.width, bitmap.height, @name_text, 1)
  557.       else
  558.         co = N_WINDOW_CE
  559.         bitmap.draw_text_f(0, 0, bitmap.width, bitmap.height, @name_text, 1, co)
  560.       end
  561.       # スプライト設定
  562.       @name_sprite.bitmap = bitmap
  563.       @name_sprite.ox = bitmap.width / 2
  564.       @name_sprite.oy = bitmap.height / 2
  565.       # ネームウィンドウリサイズ
  566.       @name_d_window.width = bitmap.width + N_WINDOW_WH[0]
  567.       @name_d_window.height = bitmap.height + N_WINDOW_WH[1]
  568.     end
  569.     # ネームウィンドウ可視状態設定
  570.     @name_d_window.visible = (self.visible and not @name_text.empty?)
  571.   end
  572.   #--------------------------------------------------------------------------
  573.   # ● ウィンドウリセット
  574.   #--------------------------------------------------------------------------
  575.   def reset_window
  576.     reset_window_f    # ウィンドウリセット-F
  577.     shake_reset       # シェイク
  578.     # いろいろ初期化
  579.     ar = []
  580.     for i in 0..$game_message.maxlineex
  581.       ar[i] = 0
  582.     end
  583.     @contents_psx = 0                   # ポーズサインX
  584.     @rb_h = ar                          # ルビ高さ
  585.     str_line_size = 0                   # ライン
  586.     contents_x = [0]                    # X配列
  587.     contents_y = [0]                    # Y配列
  588.     text = @text.clone                  # テキスト
  589.     maxtextsize = WLH                   # 最大テキストサイズ
  590.     font_size = DEFAULT_SIZE            # フォントサイズ
  591.     font_index = 0                      # フォント
  592.     e_text = false                      # 縁取り
  593.     font_bold = false                   # 太字
  594.     bold_off = false                    # 太字OFFフラグ
  595.     font_italic = false                 # 斜体
  596.     italic_off = false                  # 斜体OFFフラグ
  597.     #-----------------------------------------------------------
  598.     # ★ 内容先読みループ/ウィンドウサイズ等を正確に割り出す
  599.     loop do
  600.       c = text.slice!(/./m)             # 次の文字を取得
  601.       case c
  602.       when nil ; break                  # 残りの文字が無い場合、ループ中断
  603.       when "\x02"                       # \G  (所持金表示)
  604.       when "\x03"                       # \.  (ウェイト 1/4 秒)
  605.       when "\x04"                       # \|  (ウェイト 1 秒)
  606.       when "\x05"                       # \!  (入力待ち)
  607.       when "\x06"                       # \>  (瞬間表示 ON)
  608.       when "\x07"                       # \<  (瞬間表示 OFF)
  609.       when "\x08"                       # \^  (入力待ちなし)
  610.       when "\x01" ;text.sub!(/\[([0-9]+)\]/, "")   # \C[n]  (文字色変更)
  611.       when "\x81" ;e_text ^= true                  # \E
  612.       when "\x88" ;@popid = @popid_f =  -1         # \P[-1]
  613.       when "\x91" ;@popid_f = -1                   # \PP[-1]
  614.       when "\x92" ;@popid_f = -2                   # \PP[-2]
  615.       when "\x93" ;text.sub!(/\[([0-9]+)\]/, "")   # \S[n]
  616.       when "\x94" ;text.sub!(/\[([0-9]+)\]/, "")   # \W[n]
  617.       when "\x95"                                  # \UND
  618.       when "\x96"                                  # \STR
  619.       when "\x11" ;text.sub!(/\[([0-9]+)\,([0-9]+)\]/, "")# \A[n]
  620.       when "\xb0" ;text.sub!(/\[([0-9]+)\,([0-9]+)\]/, "")# \U[n]
  621.       when "\x13" ;@face_lr = 1                    # \FR
  622.       when "\x14" ;@face_sprite.mirror = true      # \FM
  623.       when "\x15" ;text.sub!(/\[([0-9]+)\]/, "")   # \FA[n]
  624.       when "\x16" ;text.sub!(/\[([0-9]+)\]/, "")   # \FAL[n]
  625.       when "\x18" ;$game_message.mapstop = true    # \STOP
  626.       when "\x98"                                  # \R
  627.       when "\xa0" ;font_size = DEFAULT_SIZE        # \FS[d]
  628.       when "\xa1" ;text.sub!(/\[([^\[\]\s]+)\]\[([0-9]+)\]/, "")# \FC[n,m]
  629.       when "\xa2"                                  # \FCM
  630.       when "\xa4" ;text.sub!(/\[\d+,\d+,\d+\]/, "")# \SH[p,s,d]
  631.       when "\xa5" ;text.sub!(/\[\d+\]/, "")        # \SW[id,ON]
  632.       when "\xa6" ;text.sub!(/\[\d+\]/, "")        # \SW[id,OFF]
  633.       when "\xa7" ;text.sub!(/\[\d+\]/, "")        # \SW[id,RV]
  634.       when "\xa8" ;text.sub!(/\[\d+,\d+\]/, "")    # \VA[id,n]
  635.       when "\xa9" ;text.sub!(/\[\d+,\d+\]/, "")    # \VA[id,n]
  636.       when "\x00"                       # 改行
  637.         contents_x[str_line_size] += font_size / STR22002 + 2 if font_italic or italic_off
  638.         str_line_size += 1
  639.         contents_x[str_line_size] = 0
  640.         contents_y[str_line_size] = 0
  641.         contents_y[str_line_size] += maxtextsize + @rb_h[str_line_size - 1]
  642.         maxtextsize = WLH               # 最大テキストサイズ
  643.         font_size = DEFAULT_SIZE        # フォントサイズ
  644.         font_index = 0                  # フォント
  645.         e_text = false                  # 縁取り
  646.         font_bold = bold_off = false    # 太字
  647.         font_italic = italic_off = false# 斜体
  648.         if str_line_size >= $game_message.maxlineex # 行数が最大のとき
  649.           break unless text.empty?      # ループ中断
  650.         end
  651.       when "\x82"                                  # \FS[n]
  652.         text.sub!(/\[([0-9]+)\]/, "")
  653.         font_size = $1.to_i
  654.       when "\x83"                                  # \B
  655.         bold_off = true if font_bold
  656.         font_bold ^= true
  657.       when "\x84"                                  # \I
  658.         italic_off = true if font_italic
  659.         font_italic ^= true
  660.       when "\x85"                                  # \F[n]
  661.         text.sub!(/\[([0-9]+)\]/, "")
  662.         font_index = $1.to_i
  663.       when "\x86"                                  # \CE[n]
  664.         text.sub!(/\[([0-9]+)\]/, "")
  665.         e_color = $1.to_i
  666.       when "\x87"                                  # \P[n]
  667.         text.sub!(/\[([0-9]+)\]/, "")
  668.         @popid = @popid_f = $1.to_i
  669.       when "\x90"                                  # \PP[n]
  670.         text.sub!(/\[([0-9]+)\]/, "")
  671.         @popid_f = $1.to_i
  672.       when "\x89"                                  # \NA[s]
  673.         text.sub!(/\[([^\[\]\s]*)\]\]/, "")
  674.         @name_text = $1
  675.       when "\x97"                                  # \SPIX[n]
  676.         text.sub!(/\[([0-9]+)\]/, "")
  677.         contents_x[str_line_size] += $1.to_i
  678.       when "\x10"                                  # \IC[n]
  679.         text.sub!(/\[([0-9]+)\]/, "")
  680.         contents_x[str_line_size] += STR22009
  681.       when "\x12"                                  # \AL[n]
  682.         text.sub!(/\[([0-9]+)\]/, "")
  683.         @line_align[str_line_size] = $1.to_i
  684.       when "\x17"                                  # \FLC[n]
  685.         text.sub!(/\[([0-9]+)\]/, "")
  686.         @face_sprite.loop_animation_id = $1.to_i
  687.         @face_sprite.no_face = true
  688.       when "\xa3"                                  # \MOVE
  689.         $game_message.mes_move = $game_switches[MESMOVE] = true
  690.         $game_map.need_refresh = true
  691.       when "\x99"                                  # \R
  692.         text.sub!(/\[([^\[\]\s]+)\]/, "")
  693.         size = (font_size / STR22008)
  694.         @rb_h[str_line_size] = size if size > @rb_h[str_line_size]
  695.       else                                         # 普通の文字
  696.         # 字体別文字幅修正
  697.         unless italic_off
  698.           iw = 0
  699.         else
  700.           iw = contents.font.size / STR22000
  701.           italic_off = false
  702.         end
  703.         if bold_off
  704.           iw += contents.font.size / STR22001
  705.           bold_off = false
  706.         end
  707.         # フォント設定読み込み
  708.         contents.font.name = FONTLIST[font_index]
  709.         contents.font.size = font_size
  710.         contents.font.bold = font_bold
  711.         contents.font.italic = font_italic
  712.         maxtextsize = font_size if font_size > maxtextsize
  713.         wlh = maxtextsize
  714.         contents.font.bold = false
  715.         c_width = contents.text_size(c).width + iw
  716.         contents_x[str_line_size] += c_width
  717.       end
  718.     end
  719.     # ★ 内容先読みループ ここまで
  720.     #-----------------------------------------------------------
  721.     # ネームウィンドウ設定
  722.     name_window_set
  723.     # 顔グラフィックを表示するか
  724.     face = (not $game_message.face_name.empty?)
  725.     # 高さを求める
  726.     h = 0
  727.     for i in contents_y
  728.       h += i
  729.     end
  730.     # フェイス表示時の高さが足りない場合
  731.     h = WINDOW_RECT.height - 32 if face and (32 + h < WINDOW_RECT.height)
  732.     if $game_message.xywh.width > 32 and $game_message.xywh.height > 32
  733.       # 強制位置設定/リサイズ
  734.       self.x = $game_message.xywh.x
  735.       self.y = $game_message.xywh.y
  736.       self.width = $game_message.xywh.width
  737.       self.height = $game_message.xywh.height
  738.     elsif @popid != -99 # ポップアップが有効な場合
  739.       # 幅を求める
  740.       w = contents_x[0]
  741.       if contents_x.size > 2
  742.         for i in 1...contents_x.size
  743.           w = contents_x[i] if contents_x[i] > w
  744.         end
  745.       end
  746.       # 数値入力位置修正
  747.       input = ($game_message.num_input_variable_id > 0)
  748.       input_w = 50 + (16 * $game_message.num_input_digits_max)
  749.       if face
  750.         indent = FACE_SIZE[0] + FACE_SPACE
  751.         w += indent
  752.         w = input_w + indent if input and w < input_w + indent
  753.       else
  754.         w = input_w if input and w < input_w
  755.       end
  756.       # リサイズ
  757.       self.width = 32 + w
  758.       self.height = 32 + h
  759.       window_xy_update
  760.     else
  761.       # 通常ウィンドウ(ポップアップ無し)
  762.       h = WINDOW_RECT.height - 32 if 32 + h < WINDOW_RECT.height
  763.       self.width = WINDOW_RECT.width
  764.       self.height = 32 + h
  765.       self.x = WINDOW_RECT.x
  766.       # ポジション別座標設定
  767.       @gold_window.y = 0
  768.       self.y = 0
  769.       case @position
  770.       when 0 ; @gold_window.y = STR22900[1] - 56
  771.       when 1 ; self.y = (STR22900[1] / 2) - (self.height / 2)
  772.       when 2 ; self.y = STR22900[1] - self.height
  773.       end
  774.     end
  775.     # XY座標幅高さの情報格納
  776.     @contents_width = contents_x
  777.     @contents_y_line[0] = []
  778.     @contents_y_line[1] = contents_y
  779.     for i in 0...contents_y.size
  780.       @contents_y_line[0][i] = 0
  781.       for l in 0..i
  782.         @contents_y_line[0][i] += contents_y[l]
  783.       end
  784.     end
  785.     self.contents.dispose
  786.     self.contents = Bitmap.new(self.width - 32, self.height - 32)
  787.     #create_contents      # コンテンツ作成
  788.   end
  789.   #--------------------------------------------------------------------------
  790.   # ● メッセージの更新(再定義)
  791.   #--------------------------------------------------------------------------
  792.   def update_message
  793.     loop do
  794.       @wait_count = @text_speed if @wait_count <= 0
  795.       c = @text.slice!(/./m)            # 次の文字を取得
  796.       case c
  797.       when nil                          # 描画すべき文字がない
  798.         finish_message                  # 更新終了
  799.         break
  800.       when "\x00"                       # 改行
  801.         new_line
  802.         if @line_count >= $game_message.maxlineex # 行数が最大のとき
  803.           unless @text.empty?           # さらに続きがあるなら
  804.             self.pause = true           # 入力待ちを入れる
  805.             break
  806.           end
  807.         end
  808.       when "\x06" ;@line_show_fast = true         # \>  (瞬間表示 ON)
  809.       when "\x07" ;@line_show_fast = false        # \<  (瞬間表示 OFF)
  810.       when "\x08" ;@pause_skip = true             # \^  (入力待ちなし)
  811.       when "\x88" ;next                           # \P[-1]
  812.       when "\x91" ;next                           # \PP[-1]
  813.       when "\x92" ;next                           # \PP[-2]
  814.       when "\x13" ;next                           # \FR  
  815.       when "\x14" ;next                           # \FM
  816.       when "\x17" ;@text.sub!(/\[([0-9]+)\]/, "") # \FLC[n]
  817.       when "\x18" ;next                           # \STOP
  818.       when "\xa3" ;next                           # \MOVE
  819.       when "\x01"                       # \C[n]  (文字色変更)
  820.         @text.sub!(/\[([0-9]+)\]/, "")
  821.         contents.font.color = text_color($1.to_i)
  822.         next
  823.       when "\x02"                       # \G  (所持金表示)
  824.         @gold_window.refresh
  825.         @gold_window.open
  826.       when "\x03"                       # \.  (ウェイト 1/4 秒)
  827.         @wait_count = 15
  828.         break
  829.       when "\x04"                       # \|  (ウェイト 1 秒)
  830.         @wait_count = 60
  831.         break
  832.       when "\x05"                       # \!  (入力待ち)
  833.         self.pause = true
  834.         break        
  835.       when "\x81"                       # \E
  836.         @e_text ^= true
  837.         next
  838.       when "\x82"                       # \FS[n]
  839.         @text.sub!(/\[([0-9]+)\]/, "")
  840.         @font_size = $1.to_i
  841.         next
  842.       when "\xa0"                       # \FS[d]
  843.         @font_size = DEFAULT_SIZE
  844.         next
  845.       when "\x83"                       # \B
  846.         @bold_off = true if @font_bold
  847.         @font_bold ^= true
  848.         next
  849.       when "\x84"                       # \I
  850.         @italic_off = true if @font_italic
  851.         @font_italic ^= true
  852.         next
  853.       when "\x85"                       # \F[n]
  854.         @text.sub!(/\[([0-9]+)\]/, "")
  855.         @font_index = $1.to_i
  856.         next
  857.       when "\x86"                       # \HC[n]
  858.         @text.sub!(/\[([0-9]+)\]/, "")
  859.         @e_color = $1.to_i
  860.         next
  861.       when "\x87"                       # \P[n]
  862.         @text.sub!(/\[([0-9]+)\]/, "")
  863.         next
  864.       when "\x90"                       # \PP[n]
  865.         @text.sub!(/\[([0-9]+)\]/, "")
  866.         next
  867.       when "\x89"                       # \NA[s]
  868.         @text.sub!(/\[([^\[\]\s]*)\]\]/, "")
  869.         next
  870.       when "\x93"                       # \S[n]
  871.         @text.sub!(/\[([0-9]+)\]/, "")
  872.         @text_speed = $1.to_i
  873.         break
  874.       when "\x94"                       # \W[n]
  875.         @text.sub!(/\[([0-9]+)\]/, "")
  876.         @wait_count = $1.to_i
  877.         break
  878.       when "\x95"                       # \UND
  879.         @tx_und ^= true
  880.         @und_on = true if @tx_und
  881.         next
  882.       when "\x96"                       # \STR
  883.         @tx_str ^= true
  884.         @str_on = true if @tx_str
  885.         next
  886.       when "\x97"                       # \SPIX[n]
  887.         @text.sub!(/\[([0-9]+)\]/, "")
  888.         @contents_x += $1.to_i
  889.         next
  890.       when "\xa4"                       # \SH[p,s,d]
  891.         @text.sub!(/\[(\d+),(\d+),(\d+)\]/, "")
  892.         start_shake($1.to_i, $2.to_i, $3.to_i)
  893.         next
  894.       when "\xa5"                       # \SW
  895.         @text.sub!(/\[([0-9]+)\]/, "")
  896.         $game_switches[$1.to_i] = true
  897.         $game_map.need_refresh = true
  898.         next
  899.       when "\xa6"                       # \SW
  900.         @text.sub!(/\[([0-9]+)\]/, "")
  901.         $game_switches[$1.to_i] = false
  902.         $game_map.need_refresh = true
  903.         next
  904.       when "\xa7"                       # \SW
  905.         @text.sub!(/\[([0-9]+)\]/, "")
  906.         $game_switches[$1.to_i] ^= true
  907.         $game_map.need_refresh = true
  908.         next
  909.       when "\xa8"                       # \VA
  910.         @text.sub!(/\[([0-9]+),([0-9]+)\]/, "")
  911.         $game_variables[$1.to_i] = $2.to_i
  912.         $game_map.need_refresh = true
  913.         next
  914.       when "\xa9"                       # \VA
  915.         @text.sub!(/\[([0-9]+),([0-9]+)\]/, "")
  916.         $game_variables[$1.to_i] = -($2.to_i)
  917.         $game_map.need_refresh = true
  918.         next
  919.       when "\x10"                       # \IC[n]
  920.         @text.sub!(/\[([0-9]+)\]/, "")
  921.         wlh = @contents_y_line[1][@line_count+1] / 2
  922.         draw_icon($1.to_i, @contents_x, @contents_y + @rb_h[@line_count] + wlh - (STR22009 / 2))
  923.         @contents_x += STR22009
  924.         typese_update
  925.       when "\x11"                       # \A[n,m]
  926.         @text.sub!(/\[([0-9]+)\,([0-9]+)\]/, "")
  927.         case $1.to_i
  928.         when 9999 ; event = $game_player
  929.         when 0    ; event = $game_map.events[$game_message.event_id]
  930.         else      ; event = $game_map.events[$1.to_i]
  931.         end
  932.         event.animation_id = $2.to_i
  933.       when "\xb0"                       # \U[n,m]
  934.         @text.sub!(/\[([0-9]+)\,([0-9]+)\]/, "")
  935.         case $1.to_i
  936.         when 9999 ; event = $game_player
  937.         when 0    ; event = $game_map.events[$game_message.event_id]
  938.         else      ; event = $game_map.events[$1.to_i]
  939.         end
  940.         event.balloon_id = $2.to_i
  941.       when "\x12"                       # \AL[n]
  942.         @text.sub!(/\[([0-9]+)\]/, "")
  943.         next
  944.       when "\xa1"                       # \FC[n,m]
  945.         @text.sub!(/\[([^\"\[\]\s]+)\]\[([0-9]+)\]/, "")
  946.         unless $game_message.face_name.empty?
  947.           @face_sprite.set_face($1, $2.to_i, FACE_SIZE[0], FACE_SIZE[1])
  948.         end
  949.         next
  950.       when "\xa2"                       # \FCM
  951.         @face_sprite.mirror ^= true
  952.         next
  953.       when "\x15"                       # \FA[n]
  954.         @text.sub!(/\[([0-9]+)\]/, "")
  955.         @face_sprite.animation_id = $1.to_i
  956.       when "\x16"                       # \FAL[n]
  957.         @text.sub!(/\[([0-9]+)\]/, "")
  958.         @face_sprite.loop_animation_id = $1.to_i
  959.       when "\x98"                       # \R
  960.         @r_mode = true
  961.         @rbx = @contents_x
  962.         @rbw = 0
  963.         next
  964.       when "\x99"                       # \R
  965.         @r_mode = false
  966.         @text.sub!(/\[([^\[\]\s]+)\]/, "")
  967.         contents.font.name = FONTLIST[@font_index]
  968.         contents.font.size = (@font_size / 2)
  969.         contents.font.bold = @font_bold
  970.         contents.font.italic = @font_italic
  971.         rw = @contents_y_line[1][@line_count+1] / 2
  972.         rby = @contents_y + @rb_h[@line_count] + rw - (contents.font.size * 2)
  973.         unless @e_text
  974.           contents.draw_text(@rbx, rby, @rbw, contents.font.size, $1, 1)
  975.         else
  976.           # 縁取りON
  977.           co = EDGE_COLOR[@e_color]
  978.           contents.draw_text_f(@rbx, rby, @rbw, contents.font.size, $1, 1, co)
  979.         end
  980.         next
  981.       else                              # 普通の文字
  982.         # いろいろ
  983.         @maxtextsize = wlh = @contents_y_line[1][@line_count+1]
  984.         iw = font_w
  985.         yy = @contents_y + @rb_h[@line_count]
  986.         ww = @font_size + 8
  987.         # 内容描画
  988.         draw_message22_text(iw,yy,ww,wlh,c)     # 通常文字の描画
  989.         draw_message22_und(iw,wlh,c) if @tx_und # アンダーライン
  990.         draw_message22_str(iw,wlh,c) if @tx_str # 打ち消し線
  991.         typese_update                           # タイピングSE
  992.         # 幅加算
  993.         contents.font.bold = false
  994.         c_width = contents.text_size(c).width + iw
  995.         @contents_x += c_width
  996.         @rbw += c_width if @r_mode              # ルビ用文字幅
  997.       end
  998.       break unless @show_fast or @line_show_fast
  999.     end
  1000.   end
  1001.   #--------------------------------------------------------------------------
  1002.   # ● 字体別文字幅修正
  1003.   #--------------------------------------------------------------------------
  1004.   def font_w
  1005.     unless @italic_off
  1006.       iw = 0
  1007.     else
  1008.       iw = contents.font.size / STR22000
  1009.       @italic_off = false
  1010.     end
  1011.     if @bold_off
  1012.       iw += contents.font.size / STR22001
  1013.       @bold_off = false
  1014.     end
  1015.     return iw
  1016.   end
  1017.   #--------------------------------------------------------------------------
  1018.   # ● 通常文字の描画
  1019.   #--------------------------------------------------------------------------
  1020.   def draw_message22_text(iw,yy,ww,wlh,c)
  1021.     # フォント設定読み込み
  1022.     contents.font.name = FONTLIST[@font_index]
  1023.     contents.font.size = @font_size
  1024.     contents.font.bold = @font_bold
  1025.     contents.font.italic = @font_italic
  1026.     # 文字描画
  1027.     unless @e_text
  1028.       contents.draw_text(@contents_x + iw, yy, ww, wlh, c)
  1029.     else
  1030.       # 縁取りON
  1031.       co = EDGE_COLOR[@e_color]
  1032.       contents.draw_text_f(@contents_x + iw, yy, ww, wlh, c, 0, co)
  1033.     end
  1034.   end
  1035.   #--------------------------------------------------------------------------
  1036.   # ● アンダーラインの描画
  1037.   #--------------------------------------------------------------------------
  1038.   def draw_message22_und(iw,wlh,c)
  1039.     unless @e_text
  1040.       rect = Rect.new(@contents_x + iw,@contents_y+(wlh-2),
  1041.                       contents.text_size(c).width + iw,1)
  1042.       oc = contents.font.color
  1043.       r_color = Color.new(oc.red, oc.green, oc.blue, oc.alpha)
  1044.       contents.fill_rect(rect, r_color)
  1045.       rect.y += 1
  1046.       r_color.alpha /= STR22007
  1047.       contents.fill_rect(rect, r_color)
  1048.     else
  1049.       rect = Rect.new(@contents_x + iw + 1,@contents_y+(wlh-3),
  1050.                       contents.text_size(c).width + iw,1)
  1051.       oc = EDGE_COLOR[@e_color]
  1052.       r_color = Color.new(oc.red, oc.green, oc.blue, oc.alpha - 16)
  1053.       contents.fill_rect(rect, r_color)
  1054.       rect.x -= 1
  1055.       rect.y += 1
  1056.       if @und_on
  1057.         a = rect.width
  1058.         rect.width = 1
  1059.         contents.fill_rect(rect, r_color)
  1060.         rect.width = a
  1061.       end
  1062.       rect.x += 2
  1063.       contents.fill_rect(rect, r_color)
  1064.       rect.x -= 1
  1065.       rect.y += 1
  1066.       contents.fill_rect(rect, r_color)
  1067.       rect.y -= 1
  1068.       oc = contents.font.color
  1069.       r_color = Color.new(oc.red, oc.green, oc.blue, oc.alpha)
  1070.       contents.fill_rect(rect, r_color)
  1071.     end
  1072.     @und_on = false
  1073.   end
  1074.   #--------------------------------------------------------------------------
  1075.   # ● 打ち消し線の描画
  1076.   #--------------------------------------------------------------------------
  1077.   def draw_message22_str(iw,wlh,c)
  1078.     unless @e_text
  1079.       rect = Rect.new(@contents_x + iw,@contents_y+(wlh/2),
  1080.                       contents.text_size(c).width + iw,1)
  1081.       oc = contents.font.color
  1082.       r_color = Color.new(oc.red, oc.green, oc.blue, oc.alpha)
  1083.       contents.fill_rect(rect, r_color)
  1084.       rect.y += 1
  1085.       r_color.alpha /= STR22007
  1086.       contents.fill_rect(rect, r_color)
  1087.     else
  1088.       rect = Rect.new(@contents_x + iw + 1,@contents_y+(wlh/2),
  1089.                       contents.text_size(c).width + iw,1)
  1090.       oc = EDGE_COLOR[@e_color]
  1091.       r_color = Color.new(oc.red, oc.green, oc.blue, oc.alpha - 16)
  1092.       contents.fill_rect(rect, r_color)
  1093.       rect.x -= 1
  1094.       rect.y += 1
  1095.       if @str_on
  1096.         a = rect.width
  1097.         rect.width = 1
  1098.         contents.fill_rect(rect, r_color)
  1099.         rect.width = a
  1100.       end
  1101.       rect.x += 2
  1102.       contents.fill_rect(rect, r_color)
  1103.       rect.x -= 1
  1104.       rect.y += 1
  1105.       contents.fill_rect(rect, r_color)
  1106.       rect.y -= 1
  1107.       oc = contents.font.color
  1108.       r_color = Color.new(oc.red, oc.green, oc.blue, oc.alpha)
  1109.       contents.fill_rect(rect, r_color)
  1110.     end
  1111.     @str_on = false
  1112.   end
  1113.   #--------------------------------------------------------------------------
  1114.   # ● シェイクの開始
  1115.   #--------------------------------------------------------------------------
  1116.   def start_shake(power, speed, duration)
  1117.     @shake_power = power
  1118.     @shake_speed = speed
  1119.     @shake_duration = duration
  1120.   end
  1121.   #--------------------------------------------------------------------------
  1122.   # ● シェイクリセット
  1123.   #--------------------------------------------------------------------------
  1124.   def shake_reset
  1125.     @shake = @shake_power = 0
  1126.     @shake_speed = @shake_duration = 0
  1127.     @shake_direction = 1
  1128.   end
  1129.   #--------------------------------------------------------------------------
  1130.   # ● シェイクの更新
  1131.   #--------------------------------------------------------------------------
  1132.   def update_shake
  1133.     if @shake_duration >= 1 or @shake != 0
  1134.       delta = (@shake_power * @shake_speed * @shake_direction) / 10.0
  1135.       if @shake_duration <= 1 and @shake * (@shake + delta) < 0
  1136.         @shake = 0
  1137.       else
  1138.         @shake += delta
  1139.       end
  1140.       if @shake > @shake_power * 2
  1141.         @shake_direction = -1
  1142.       end
  1143.       if @shake < - @shake_power * 2
  1144.         @shake_direction = 1
  1145.       end
  1146.       if @shake_duration >= 1
  1147.         @shake_duration -= 1
  1148.       end
  1149.     end
  1150.   end
  1151.   #--------------------------------------------------------------------------
  1152.   # ● ウィンドウを開く
  1153.   #--------------------------------------------------------------------------
  1154.   def open
  1155.     a = [self.openness, @w_opacity][FADE_TYPE]
  1156.     @opening = true if a < 255
  1157.     @closing = false
  1158.   end
  1159.   #--------------------------------------------------------------------------
  1160.   # ● ウィンドウを閉じる
  1161.   #--------------------------------------------------------------------------
  1162.   def close
  1163.     a = [self.openness, @w_opacity][FADE_TYPE]
  1164.     @closing = true if a > 0
  1165.     @opening = false
  1166.     if a == 0
  1167.       t = $game_switches[MESMOVE]
  1168.       $game_message.mes_move = $game_switches[MESMOVE] = false
  1169.       $game_map.need_refresh = true if t != $game_switches[MESMOVE]
  1170.     end
  1171.   end
  1172.   #--------------------------------------------------------------------------
  1173.   # ● 次のメッセージを続けて表示するべきか判定
  1174.   #--------------------------------------------------------------------------
  1175.   def continue?
  1176.     a = [self.openness, @w_opacity][FADE_TYPE]
  1177.     return true if $game_message.num_input_variable_id > 0
  1178.     return false if $game_message.texts.empty?
  1179.     if a > 0 and not $game_temp.in_battle
  1180.       return false if @background != $game_message.background
  1181.       return false if @position != $game_message.position
  1182.     end
  1183.     return true
  1184.   end
  1185.   #--------------------------------------------------------------------------
  1186.   # ★ エイリアス
  1187.   #--------------------------------------------------------------------------
  1188.   alias finish_message_str09m finish_message
  1189.   def finish_message
  1190.     finish_message_str09m
  1191.     @wait_count = F_WAIT
  1192.   end
  1193.   alias update_message_str09m update_message
  1194.   def update_message
  1195.     fast = (not $game_switches[PSID] and not $game_switches[FSID] and Input.press?(FAST_B))
  1196.     if F_AUTO
  1197.       update_message_str09m
  1198.       update_message_str09m if @wait_count <= 0 and @text != nil
  1199.       update_message_str09m if @wait_count <= 0 and @text != nil and fast
  1200.       update_message_str09m if @wait_count <= 0 and @text != nil and fast
  1201.     else
  1202.       update_message_str09m
  1203.       update_message_str09m if @wait_count <= 0 and @text != nil and fast
  1204.     end
  1205.   end
  1206.   #--------------------------------------------------------------------------
  1207.   # ● 早送りフラグの更新(再定義)
  1208.   #--------------------------------------------------------------------------
  1209.   def update_show_fast
  1210.     return if $game_switches[PSID]
  1211.     id = (not $game_switches[SSID])
  1212.     a = [self.openness, @w_opacity][FADE_TYPE]
  1213.     if self.pause or a < 255
  1214.       @show_fast = false
  1215.     elsif (Input.trigger?(Input::C) or (Input.press?(SKIP_B) and id))
  1216.       @show_fast = true
  1217.     elsif not Input.press?(Input::C)
  1218.       @show_fast = false
  1219.     end
  1220.     @wait_count = 0 if @show_fast and @wait_count > 0
  1221.   end
  1222.   #--------------------------------------------------------------------------
  1223.   # ● 文章送りの入力処理(再定義)
  1224.   #--------------------------------------------------------------------------
  1225.   def input_pause
  1226.     id = (not $game_switches[SSID])
  1227.     if Input.trigger?(Input::B) or Input.trigger?(Input::C) or
  1228.        (Input.press?(SKIP_B) and id)
  1229.       self.pause = false
  1230.       if @text != nil and not @text.empty?
  1231.         new_page if @line_count >= $game_message.maxlineex
  1232.       else
  1233.         terminate_message
  1234.       end
  1235.     end
  1236.   end
  1237.   #--------------------------------------------------------------------------
  1238.   # ● カーソルの更新(再定義)
  1239.   #--------------------------------------------------------------------------
  1240.   def update_cursor
  1241.     if @index >= 0
  1242.       x = $game_message.face_name.empty? ? 0 : FACE_SIZE[0] + FACE_SPACE
  1243.       y = @contents_y_line[0][$game_message.choice_start + @index]
  1244.       h = @contents_y_line[1][$game_message.choice_start + @index + 1]
  1245.       self.cursor_rect.set(x, y, contents.width - x, h)
  1246.     else
  1247.       self.cursor_rect.empty
  1248.     end
  1249.   end
  1250.   #--------------------------------------------------------------------------
  1251.   # ● ダミーウィンドウ同期(追加)
  1252.   #--------------------------------------------------------------------------
  1253.   # リーダー
  1254.   def pause
  1255.     @pause_window.pause
  1256.   end
  1257.   def opacity
  1258.     if S_WINDOW
  1259.       return @slim_window.opacity
  1260.     else
  1261.       super
  1262.     end
  1263.   end
  1264.   def visible
  1265.     if S_WINDOW
  1266.       return @slim_window.visible
  1267.     else
  1268.       super
  1269.     end
  1270.   end
  1271.   # アクセサ
  1272.   def windowskin=(a)
  1273.     super
  1274.     @slim_window.windowskin = a if S_WINDOW
  1275.   end
  1276.   def viewport=(a)
  1277.     super
  1278.     @name_d_window.viewport = @pause_window.viewport = a
  1279.     @slim_window.viewport = a if S_WINDOW
  1280.     @face_sprite.viewport = a
  1281.   end
  1282.   def active=(a)
  1283.     super
  1284.     @slim_window.active = a if S_WINDOW
  1285.   end
  1286.   def visible=(a)
  1287.     super
  1288.     @pause_window.visible = a if self.visible and @pause_window.pause
  1289.     @face_sprite.visible = a
  1290.     @slim_window.visible = a if S_WINDOW
  1291.   end
  1292.   def pause=(a)
  1293.     @pause_window.pause = a
  1294.   end
  1295.   def x=(a)
  1296.     a += @shake
  1297.     super(a)
  1298.     @indent_fx = 0 unless N_WINDOW_IX
  1299.     @name_d_window.x = a + N_WINDOW_XY[0] + @indent_fx
  1300.     @name_sprite.x = (a + N_WINDOW_XY[0]) + (@name_d_window.width / 2) + @indent_fx
  1301.     @slim_window.x = a + (@s_window_w / 2) if S_WINDOW
  1302.     case P_WINDOW
  1303.     when 0 ; @pause_window.x = a + (self.width / 2) - 12 + P_WINDOW_XY[0]
  1304.     when 1 ; @pause_window.x = a + self.width - 12 + P_WINDOW_XY[0]
  1305.     when 2 ; @pause_window.x = a + @contents_psx
  1306.     end
  1307.     case @face_lr
  1308.     when 0 ; @face_sprite.x = self.x + 16 + (FACE_SIZE[0] / 2) + FACE_XY[0]
  1309.     when 1 ; @face_sprite.x = self.x + self.width - 16 - (FACE_SIZE[0] / 2) + FACE_XY[0]
  1310.     end
  1311.   end
  1312.   def y=(a)
  1313.     super
  1314.     @name_d_window.y = a + N_WINDOW_XY[1]
  1315.     @name_sprite.y = (a + N_WINDOW_XY[1]) + (@name_d_window.height / 2)
  1316.     @slim_window.y = a + (@s_window_h / 2) if S_WINDOW
  1317.     case P_WINDOW
  1318.     when 2 ; @pause_window.y = a + @contents_y
  1319.     else   ; @pause_window.y = a + self.height - 12 + P_WINDOW_XY[1]
  1320.     end
  1321.     case FACE_Y
  1322.     when 0 ; @face_sprite.y = self.y + 16 + (FACE_SIZE[1] / 2) + FACE_XY[1]
  1323.     when 1 ; @face_sprite.y = self.y + (self.height / 2) + FACE_XY[1]
  1324.     when 2 ; @face_sprite.y = self.y + self.height - 16 - (FACE_SIZE[1] / 2) + FACE_XY[1]
  1325.     end
  1326.   end
  1327.   def width=(a)
  1328.     super
  1329.     @slim_window.width = a - @s_window_w if S_WINDOW
  1330.   end
  1331.   def height=(a)
  1332.     super
  1333.     @slim_window.height = a - @s_window_h if S_WINDOW
  1334.   end
  1335.   def z=(a)
  1336.     super
  1337.     @name_sprite.z = a + 6
  1338.     @name_d_window.z = a + 5
  1339.     @popup.z = a
  1340.     @pause_window.z = a + 10
  1341.     @slim_window.z = a - 10 if S_WINDOW
  1342.     @face_sprite.z = a + 4
  1343.   end
  1344.   def opacity=(a)
  1345.     if S_WINDOW
  1346.       super(0)
  1347.       @slim_window.opacity = a
  1348.     else
  1349.       super
  1350.     end
  1351.     if N_WINDOW_1V
  1352.       @name_d_window.opacity = a * (N_WINDOW_OPC / 100.0)
  1353.     elsif @background == 1
  1354.       @name_d_window.opacity = @w_opacity
  1355.     else
  1356.       @name_d_window.opacity = a * (N_WINDOW_OPC / 100.0)
  1357.     end
  1358.   end
  1359.   def back_opacity=(a)
  1360.     if S_WINDOW
  1361.       super(0)
  1362.       @slim_window.back_opacity = a
  1363.     else
  1364.       super
  1365.     end
  1366.     @name_d_window.back_opacity = a
  1367.   end
  1368.   def contents_opacity=(a)
  1369.     super
  1370.     @name_d_window.contents_opacity = a
  1371.     @slim_window.contents_opacity = a if S_WINDOW
  1372.     @name_sprite.opacity = @face_sprite.opacity = a
  1373.   end
  1374.   def openness=(a)
  1375.     super
  1376.     @name_d_window.openness = a
  1377.     @slim_window.openness = a if S_WINDOW
  1378.   end
  1379. end
  1380. #==============================================================================
  1381. # ■ Window_BattleMessage
  1382. #==============================================================================
  1383. class Window_BattleMessage < Window_Message
  1384.   WLH = 6
  1385.   #--------------------------------------------------------------------------
  1386.   # ● オブジェクト初期化
  1387.   #--------------------------------------------------------------------------
  1388.   alias initialize_btm_str22 initialize
  1389.   def initialize
  1390.     initialize_btm_str22
  1391.     @mode = BTMESMODE
  1392.     @str22maxline = $game_message.maxlineex
  1393.     $game_message.maxlineex = 4
  1394.     @s_window_w = 0
  1395.     @s_window_h = 0
  1396.     if @mode == 1
  1397.       self.opacity = 0
  1398.       @slim_window.opacity = 0 if S_WINDOW
  1399.     end
  1400.     @w_opacity = 255
  1401.     btm_str22resize
  1402.   end
  1403.   #--------------------------------------------------------------------------
  1404.   # ● 解放
  1405.   #--------------------------------------------------------------------------
  1406.   alias dispose_btm_str22 dispose
  1407.   def dispose
  1408.     $game_message.maxlineex = @str22maxline
  1409.     dispose_btm_str22
  1410.   end
  1411.   #--------------------------------------------------------------------------
  1412.   # ● フレーム更新
  1413.   #--------------------------------------------------------------------------
  1414.   alias update_str22bt update
  1415.   def update
  1416.     update_str22bt
  1417.     self.openness = 255
  1418.     self.opacity = 0 if @mode == 1
  1419.     @w_opacity = 255
  1420.   end
  1421.   #--------------------------------------------------------------------------
  1422.   # ● ウィンドウの背景と位置の設定 (無効化)
  1423.   #--------------------------------------------------------------------------
  1424.   def reset_window
  1425.     super
  1426.     if @b_sprite != nil
  1427.       self.x = 0
  1428.       self.y = 0
  1429.       @position = 0
  1430.       self.opacity = 0
  1431.     end
  1432.     btm_str22resize
  1433.     create_contents
  1434.   end
  1435.   #--------------------------------------------------------------------------
  1436.   # ● メッセージの終了
  1437.   #--------------------------------------------------------------------------
  1438.   def terminate_message
  1439.     super
  1440.     btm_str22resize
  1441.     @face_sprite.set_face("", 0, FACE_SIZE[0], FACE_SIZE[1])
  1442.     @name_sprite.bitmap.dispose if @name_sprite.bitmap != nil
  1443.     @name_sprite.bitmap = nil
  1444.     @name_d_window.visible = false
  1445.   end
  1446.   #--------------------------------------------------------------------------
  1447.   # ● リサイズ
  1448.   #--------------------------------------------------------------------------
  1449.   def btm_str22resize
  1450.     self.width = Window_Message::STR22900[0]
  1451.     self.height = 128
  1452.     self.x = 0
  1453.     if @mode == 0
  1454.       self.y = Window_Message::STR22900[1] - 128
  1455.     else
  1456.       self.y = 0
  1457.     end
  1458.   end
  1459.   #--------------------------------------------------------------------------
  1460.   # ● 行の描画
  1461.   #     index : 行番号
  1462.   #--------------------------------------------------------------------------
  1463.   def draw_line(index)
  1464.     rect = Rect.new(0, 0, 0, 0)
  1465.     rect.x += 4
  1466.     rect.y += index * 24
  1467.     rect.width = contents.width - 8
  1468.     rect.height = 24
  1469.     self.contents.clear_rect(rect)
  1470.     self.contents.font.color = normal_color
  1471.     self.contents.draw_text(rect, @lines[index])
  1472.   end
  1473. end
  1474. #==============================================================================
  1475. # ■ Window_NumberInput
  1476. #==============================================================================
  1477. class Window_NumberInput < Window_Base
  1478.   def y=(a)
  1479.     super(a-24)
  1480.   end
  1481. end
  1482. #==============================================================================
  1483. # ■ Window_Base
  1484. #==============================================================================
  1485. class Window_Base < Window
  1486.   #--------------------------------------------------------------------------
  1487.   # ● フレーム更新
  1488.   #--------------------------------------------------------------------------
  1489.   alias update_str22_base update
  1490.   def update
  1491.     if @mwextpp and @fade_type == 1
  1492.       super
  1493.       if @opening
  1494.         @w_opacity = [[@w_opacity + Window_Message::STR22011, 255].min, 0].max
  1495.         @opening = false if @w_opacity == 255
  1496.       elsif @closing
  1497.         @w_opacity = [[@w_opacity - Window_Message::STR22011, 255].min, 0].max
  1498.         @closing = false if @w_opacity == 0
  1499.       end
  1500.     else
  1501.       update_str22_base
  1502.     end
  1503.   end
  1504. end
  1505. #==============================================================================
  1506. # ■ Bitmap
  1507. #==============================================================================
  1508. class Bitmap
  1509.   #--------------------------------------------------------------------------
  1510.   # ● 文字縁取り描画
  1511.   #--------------------------------------------------------------------------
  1512.   def draw_text_f(x, y, width, height, str, align = 0, color = Color.new(64,32,128))
  1513.     shadow = self.font.shadow
  1514.     b_color = self.font.color.dup
  1515.     font.shadow = false
  1516.     font.color = color
  1517.     draw_text(x + 1, y, width, height, str, align)
  1518.     draw_text(x - 1, y, width, height, str, align)
  1519.     draw_text(x, y + 1, width, height, str, align)
  1520.     draw_text(x, y - 1, width, height, str, align)
  1521.     font.color = b_color
  1522.     draw_text(x, y, width, height, str, align)
  1523.     font.shadow = shadow
  1524.   end
  1525.   def draw_text_f_rect(r, str, align = 0, color = Color.new(64,32,128))
  1526.     draw_text_f(r.x, r.y, r.width, r.height, str, align = 0, color)
  1527.   end
  1528. end
  1529. #==============================================================================
  1530. # ■ Sprite_STRPause
  1531. #==============================================================================
  1532. class Sprite_STRPause < Sprite
  1533.   #--------------------------------------------------------------------------
  1534.   # ● オブジェクト初期化
  1535.   #--------------------------------------------------------------------------
  1536.   def initialize(viewport = nil)
  1537.     super(viewport)
  1538.     w = Cache.system("Window")
  1539.     r = [Rect.new(96, 64, 32, 16), Rect.new(96, 80, 32, 16)]
  1540.     bitmap = Bitmap.new(64, 16)
  1541.     bitmap.blt(0, 0, w, r[0])
  1542.     bitmap.blt(32, 0, w, r[1])
  1543.     self.ox = -8
  1544.     self.oy = -8
  1545.     self.bitmap = bitmap
  1546.     self.visible = false
  1547.     self.src_rect.set(0, 0, 16, 16)
  1548.     @count = 0
  1549.     @wait = Window_Message::STR22010
  1550.   end
  1551.   #--------------------------------------------------------------------------
  1552.   # ● 解放
  1553.   #--------------------------------------------------------------------------
  1554.   def dispose
  1555.     self.bitmap.dispose
  1556.     super
  1557.   end
  1558.   #--------------------------------------------------------------------------
  1559.   # ● ポーズ
  1560.   #--------------------------------------------------------------------------
  1561.   def pause
  1562.     self.visible
  1563.   end
  1564.   def pause=(a)
  1565.     self.visible = a
  1566.     @count = 0 unless self.visible
  1567.   end
  1568.   #--------------------------------------------------------------------------
  1569.   # ● フレーム更新
  1570.   #--------------------------------------------------------------------------
  1571.   def update
  1572.     return unless self.visible
  1573.     super
  1574.     @wait -= 1
  1575.     if @wait == 0
  1576.       @wait = Window_Message::STR22010
  1577.       @count += 1
  1578.       @count = 0 if @count * 16 >= self.bitmap.width
  1579.       self.src_rect.set(@count * 16, 0, 16, 16)
  1580.     end
  1581.   end
  1582. end
  1583. #==============================================================================
  1584. # ■ Sprite_STRFase+LoopAnimation
  1585. #==============================================================================
  1586. class Sprite_STRFace < Sprite_Base
  1587.   @@loop_animations = []
  1588.   #--------------------------------------------------------------------------
  1589.   # ● 公開インスタンス変数
  1590.   #--------------------------------------------------------------------------
  1591.   attr_accessor :no_face
  1592.   attr_accessor :animation_id
  1593.   attr_accessor :loop_animation_id
  1594.   #--------------------------------------------------------------------------
  1595.   # ● オブジェクト初期化
  1596.   #--------------------------------------------------------------------------
  1597.   def initialize(viewport)
  1598.     super(viewport)
  1599.     @animation_id = 0
  1600.     @loop_animation_duration = 0
  1601.     @loop_animation_id = 0
  1602.     @no_face = false
  1603.     @face_name = ""
  1604.     self.bitmap = Cache.face("")
  1605.   end
  1606.   #--------------------------------------------------------------------------
  1607.   # ● 解放
  1608.   #--------------------------------------------------------------------------
  1609.   def dispose
  1610.     super
  1611.     dispose_loop_animation
  1612.   end
  1613.   #--------------------------------------------------------------------------
  1614.   # ● フェイス設定
  1615.   #--------------------------------------------------------------------------
  1616.   def set_face(name, index, w, h)
  1617.     self.bitmap.dispose if self.bitmap != nil and @face_name != name
  1618.     @face_name = name
  1619.     self.bitmap = Cache.face(@face_name)
  1620.     self.src_rect.x = index % 4 * w
  1621.     self.src_rect.y = index / 4 * h
  1622.     self.src_rect.width = w
  1623.     self.src_rect.height = h
  1624.     self.ox = w / 2
  1625.     self.oy = h / 2
  1626.   end
  1627.   #--------------------------------------------------------------------------
  1628.   # ● フレーム更新
  1629.   #--------------------------------------------------------------------------
  1630.   def update
  1631.     super
  1632.     if @no_face
  1633.       self.ox = 0
  1634.       self.oy = 0
  1635.       self.src_rect.set(0,0,0,0)
  1636.     end
  1637.     set_oxy if @animation != nil
  1638.     animation = $data_animations[@loop_animation_id]
  1639.     start_loop_animation(animation)
  1640.     if @animation_id != 0
  1641.       animation = $data_animations[@animation_id]
  1642.       start_animation(animation)
  1643.       @animation_id = 0
  1644.     end
  1645.     if @loop_animation != nil
  1646.       @loop_animation_duration -= 1
  1647.       if @loop_animation_duration % STRRGSS2::STR22_ANSPEED == 0
  1648.         set_loop_oxy
  1649.         update_loop_animation
  1650.       end
  1651.     end
  1652.     @@loop_animations.clear
  1653.   end
  1654.   #--------------------------------------------------------------------------
  1655.   # ● 通常アニメーションの座標決定
  1656.   #--------------------------------------------------------------------------
  1657.   def set_oxy
  1658.     if @animation.position == 3
  1659.       if viewport == nil
  1660.         @animation_ox = Window_Message::STR22900[0] / 2
  1661.         @animation_oy = Window_Message::STR22900[1] / 2
  1662.       else
  1663.         @animation_ox = viewport.rect.width / 2
  1664.         @animation_oy = viewport.rect.height / 2
  1665.       end
  1666.     else
  1667.       @animation_ox = x - ox + width / 2
  1668.       @animation_oy = y - oy + height / 2
  1669.       if @animation.position == 0
  1670.         @animation_oy -= height / 2
  1671.       elsif @animation.position == 2
  1672.         @animation_oy += height / 2
  1673.       end
  1674.     end
  1675.   end
  1676.   #--------------------------------------------------------------------------
  1677.   # ● アニメーションの開始
  1678.   #--------------------------------------------------------------------------
  1679.   def start_loop_animation(animation)
  1680.     return if @loop_animation != nil and @loop_animation.id == animation.id
  1681.     dispose_loop_animation
  1682.     @loop_animation = animation
  1683.     return if @loop_animation == nil
  1684.     @loop_animation_mirror = false
  1685.     @loop_animation_duration = @loop_animation.frame_max * STRRGSS2::STR22_ANSPEED + 1
  1686.     load_loop_animation_bitmap
  1687.     @loop_animation_sprites = []
  1688.     if @loop_animation.position != 3 or not @@loop_animations.include?(animation)
  1689.       if @use_sprite
  1690.         for i in 0...STRRGSS2::STR22_MAXCELL
  1691.           sprite = ::Sprite.new(viewport)
  1692.           sprite.visible = false
  1693.           @loop_animation_sprites.push(sprite)
  1694.         end
  1695.         unless @@loop_animations.include?(animation)
  1696.           @@loop_animations.push(animation)
  1697.         end
  1698.       end
  1699.     end
  1700.     set_loop_oxy
  1701.   end
  1702.   #--------------------------------------------------------------------------
  1703.   # ● アニメーションの座標決定
  1704.   #--------------------------------------------------------------------------
  1705.   def set_loop_oxy
  1706.     if @loop_animation.position == 3
  1707.       if viewport == nil
  1708.         @loop_animation_ox = Window_Message::STR22900[0] / 2
  1709.         @loop_animation_oy = Window_Message::STR22900[1] / 2
  1710.       else
  1711.         @loop_animation_ox = viewport.rect.width / 2
  1712.         @loop_animation_oy = viewport.rect.height / 2
  1713.       end
  1714.     else
  1715.       @loop_animation_ox = x - ox + width / 2
  1716.       @loop_animation_oy = y - oy + height / 2
  1717.       if @loop_animation.position == 0
  1718.         @loop_animation_oy -= height / 2
  1719.       elsif @loop_animation.position == 2
  1720.         @loop_animation_oy += height / 2
  1721.       end
  1722.     end
  1723.   end
  1724.   #--------------------------------------------------------------------------
  1725.   # ● アニメーション グラフィックの読み込み
  1726.   #--------------------------------------------------------------------------
  1727.   def load_loop_animation_bitmap
  1728.     animation1_name = @loop_animation.animation1_name
  1729.     animation1_hue = @loop_animation.animation1_hue
  1730.     animation2_name = @loop_animation.animation2_name
  1731.     animation2_hue = @loop_animation.animation2_hue
  1732.     @loop_animation_bitmap1 = Cache.animation(animation1_name, animation1_hue)
  1733.     @loop_animation_bitmap2 = Cache.animation(animation2_name, animation2_hue)
  1734.     if @@_reference_count.include?(@loop_animation_bitmap1)
  1735.       @@_reference_count[@loop_animation_bitmap1] += 1
  1736.     else
  1737.       @@_reference_count[@loop_animation_bitmap1] = 1
  1738.     end
  1739.     if @@_reference_count.include?(@loop_animation_bitmap2)
  1740.       @@_reference_count[@loop_animation_bitmap2] += 1
  1741.     else
  1742.       @@_reference_count[@loop_animation_bitmap2] = 1
  1743.     end
  1744.     Graphics.frame_reset
  1745.   end
  1746.   #--------------------------------------------------------------------------
  1747.   # ● アニメーションの解放(追加)
  1748.   #--------------------------------------------------------------------------
  1749.   def dispose_loop_animation
  1750.     if @loop_animation_bitmap1 != nil
  1751.       @@_reference_count[@loop_animation_bitmap1] -= 1
  1752.       if @@_reference_count[@loop_animation_bitmap1] == 0
  1753.         @loop_animation_bitmap1.dispose
  1754.       end
  1755.     end
  1756.     if @loop_animation_bitmap2 != nil
  1757.       @@_reference_count[@loop_animation_bitmap2] -= 1
  1758.       if @@_reference_count[@loop_animation_bitmap2] == 0
  1759.         @loop_animation_bitmap2.dispose
  1760.       end
  1761.     end
  1762.     if @loop_animation_sprites != nil
  1763.       for sprite in @loop_animation_sprites
  1764.         sprite.dispose
  1765.       end
  1766.       @loop_animation_sprites = nil
  1767.       @loop_animation = nil
  1768.     end
  1769.     @loop_animation_bitmap1 = nil
  1770.     @loop_animation_bitmap2 = nil
  1771.   end
  1772.   #--------------------------------------------------------------------------
  1773.   # ● アニメーションの更新
  1774.   #--------------------------------------------------------------------------
  1775.   def update_loop_animation
  1776.     if @loop_animation_duration > 0
  1777.       f = STRRGSS2::STR22_ANSPEED - 1
  1778.       ff = STRRGSS2::STR22_ANSPEED
  1779.       frame_index = @loop_animation.frame_max - (@loop_animation_duration + f) / ff
  1780.       loop_animation_set_sprites(@loop_animation.frames[frame_index])
  1781.       for timing in @loop_animation.timings
  1782.         if timing.frame == frame_index
  1783.           loop_animation_process_timing(timing)
  1784.         end
  1785.       end
  1786.     else
  1787.       @loop_animation_duration = @loop_animation.frame_max * STRRGSS2::STR22_ANSPEED + 1
  1788.     end
  1789.   end
  1790.   #--------------------------------------------------------------------------
  1791.   # ● アニメーションスプライトの設定
  1792.   #--------------------------------------------------------------------------
  1793.   def loop_animation_set_sprites(frame)
  1794.     cell_data = frame.cell_data
  1795.     for i in 0...STRRGSS2::STR22_MAXCELL
  1796.       sprite = @loop_animation_sprites[i]
  1797.       next if sprite == nil
  1798.       pattern = cell_data[i, 0]
  1799.       if pattern == nil or pattern == -1
  1800.         sprite.visible = false
  1801.         next
  1802.       end
  1803.       if pattern < 100
  1804.         sprite.bitmap = @loop_animation_bitmap1
  1805.       else
  1806.         sprite.bitmap = @loop_animation_bitmap2
  1807.       end
  1808.       sprite.visible = true
  1809.       sprite.src_rect.set(pattern % 5 * 192,
  1810.         pattern % 100 / 5 * 192, 192, 192)
  1811.       if @loop_animation_mirror
  1812.         sprite.x = @loop_animation_ox - cell_data[i, 1]
  1813.         sprite.y = @loop_animation_oy + cell_data[i, 2]
  1814.         sprite.angle = (360 - cell_data[i, 4])
  1815.         sprite.mirror = (cell_data[i, 5] == 0)
  1816.       else
  1817.         sprite.x = @loop_animation_ox + cell_data[i, 1]
  1818.         sprite.y = @loop_animation_oy + cell_data[i, 2]
  1819.         sprite.angle = cell_data[i, 4]
  1820.         sprite.mirror = (cell_data[i, 5] == 1)
  1821.       end
  1822.       sprite.z = self.z + 300 + i
  1823.       sprite.ox = 96
  1824.       sprite.oy = 96
  1825.       sprite.zoom_x = cell_data[i, 3] / 100.0
  1826.       sprite.zoom_y = cell_data[i, 3] / 100.0
  1827.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  1828.       sprite.blend_type = cell_data[i, 7]
  1829.     end
  1830.   end
  1831.   #--------------------------------------------------------------------------
  1832.   # ● SE とフラッシュのタイミング処理(追加)
  1833.   #--------------------------------------------------------------------------
  1834.   def loop_animation_process_timing(timing)
  1835.     timing.se.play
  1836.     case timing.flash_scope
  1837.     when 1
  1838.       self.flash(timing.flash_color, timing.flash_duration * STRRGSS2::STR22_ANSPEED)
  1839.     when 2
  1840.       if viewport != nil
  1841.         viewport.flash(timing.flash_color, timing.flash_duration * STRRGSS2::STR22_ANSPEED)
  1842.       end
  1843.     when 3
  1844.       self.flash(nil, timing.flash_duration * STRRGSS2::STR22_ANSPEED)
  1845.     end
  1846.   end
  1847. end
  1848. #==============================================================================
  1849. # ■ Game_Message
  1850. #==============================================================================
  1851. class Game_Message
  1852.   #--------------------------------------------------------------------------
  1853.   # ● 公開インスタンス変数
  1854.   #--------------------------------------------------------------------------
  1855.   attr_accessor :unlock                   # 画面内に収めない(v1.4)
  1856.   attr_accessor :pos_autoset              # \P[0]の自動位置設定(v1.4)
  1857.   attr_accessor :event_id                 # 表示元イベントID
  1858.   attr_accessor :xywh                     # 表示位置/座標
  1859.   attr_accessor :mapstop                  # マップ更新停止
  1860.   attr_accessor :maxlineex                # 最大行数拡張
  1861.   attr_accessor :mes_move                 # メッセージ中移動可能
  1862.   #--------------------------------------------------------------------------
  1863.   # ● オブジェクト初期化(エイリアス)
  1864.   #--------------------------------------------------------------------------
  1865.   alias initialize_str22 initialize
  1866.   def initialize
  1867.     initialize_str22
  1868.     @unlock = false
  1869.     @pos_autoset = true
  1870.     @xywh = Rect.new(0, 0, 32, 32)
  1871.     @mapstop = false
  1872.     @maxlineex = 4
  1873.   end
  1874.   def visible=(a)
  1875.     @visible = a
  1876.     @mapstop = a unless a
  1877.   end
  1878.   #--------------------------------------------------------------------------
  1879.   # ● クリア(エイリアス)
  1880.   #--------------------------------------------------------------------------
  1881.   alias clear_str22 clear
  1882.   def clear
  1883.     clear_str22
  1884.     @event_id = 0
  1885.     @mes_move = false
  1886.   end
  1887.   #--------------------------------------------------------------------------
  1888.   # ● 改ページ
  1889.   #--------------------------------------------------------------------------
  1890.   def new_page
  1891.     while @texts.size % @maxlineex > 0
  1892.       @texts.push("")
  1893.     end
  1894.   end
  1895. end
  1896. #==============================================================================
  1897. # ■ Game_Map
  1898. #==============================================================================
  1899. class Game_Map
  1900.   #--------------------------------------------------------------------------
  1901.   # ● フレーム更新
  1902.   #--------------------------------------------------------------------------
  1903.   alias update_str22 update
  1904.   def update
  1905.     return if $game_message.visible and $game_message.mapstop
  1906.     update_str22
  1907.   end
  1908.   #--------------------------------------------------------------------------
  1909.   # ★ マップネーム取得(追加)
  1910.   #--------------------------------------------------------------------------
  1911.   def map_name_strextpp
  1912.     map = load_data("Data/MapInfos.rvdata")
  1913.     if map[@map_id].name["#"] != nil
  1914.       return map[@map_id].name.sub!(/(\S*)\#\S*/) { "#{$1}" }
  1915.     else
  1916.       return map[@map_id].name
  1917.     end
  1918.   end
  1919. end
  1920. #==============================================================================
  1921. # ■ Game_Player
  1922. #==============================================================================
  1923. class Game_Player < Game_Character
  1924.   #--------------------------------------------------------------------------
  1925.   # ● 方向ボタン入力による移動処理(再定義)
  1926.   #--------------------------------------------------------------------------
  1927.   def move_by_input
  1928.     return unless movable?
  1929.     # 条件変更
  1930.     return if $game_map.interpreter.running? and $game_message.mes_move == false
  1931.     case Input.dir4
  1932.     when 2;  move_down
  1933.     when 4;  move_left
  1934.     when 6;  move_right
  1935.     when 8;  move_up
  1936.     end
  1937.   end
  1938.   #--------------------------------------------------------------------------
  1939.   # ● 移動可能判定(再定義)
  1940.   #--------------------------------------------------------------------------
  1941.   def movable?
  1942.     return false if moving?                     # 移動中
  1943.     return false if @move_route_forcing         # 移動ルート強制中
  1944.     return false if @vehicle_getting_on         # 乗る動作の途中
  1945.     return false if @vehicle_getting_off        # 降りる動作の途中
  1946.     # 条件変更
  1947.     return false if $game_message.visible and $game_message.mes_move == false
  1948.     return false if in_airship? and not $game_map.airship.movable?
  1949.     return true
  1950.   end
  1951. end
  1952. #==============================================================================
  1953. # ■ Game_Interpreter
  1954. #==============================================================================
  1955. class Game_Interpreter
  1956.   #--------------------------------------------------------------------------
  1957.   # ● クリア
  1958.   #--------------------------------------------------------------------------
  1959.   alias clear_str22 clear
  1960.   def clear
  1961.     clear_str22
  1962.     @overline_c = nil
  1963.     c_over
  1964.   end
  1965.   #--------------------------------------------------------------------------
  1966.   # ● 文章の表示(再定義)
  1967.   #--------------------------------------------------------------------------
  1968.   def command_101
  1969.     unless $game_message.busy
  1970.       # イベントIDを渡す
  1971.       $game_message.event_id = @event_id
  1972.       #
  1973.       $game_message.face_name = @params[0]
  1974.       $game_message.face_index = @params[1]
  1975.       $game_message.background = @params[2]
  1976.       $game_message.position = @params[3]
  1977.       # オーバーライン
  1978.       next_mes = true
  1979.       loop do
  1980.         if @list[@index].code == 101 and next_mes and
  1981.            $game_message.maxlineex > $game_message.texts.size
  1982.           @index += 1
  1983.         else
  1984.           break
  1985.         end
  1986.         next_mes = false
  1987.         while @list[@index].code == 401       # 文章データ
  1988.           next_mes = true if @list[@index].parameters[0][/\\NEXT/i] != nil
  1989.           if $game_message.maxlineex > $game_message.texts.size
  1990.             $game_message.texts.push(@list[@index].parameters[0])
  1991.           end
  1992.           @index += 1
  1993.         end
  1994.       end
  1995.       #
  1996.       if @list[@index].code == 102          # 選択肢の表示
  1997.         setup_choices(@list[@index].parameters)
  1998.       elsif @list[@index].code == 103       # 数値入力の処理
  1999.         setup_num_input(@list[@index].parameters)
  2000.       end
  2001.       set_message_waiting                   # メッセージ待機状態にする
  2002.     end
  2003.     return false
  2004.   end
  2005.   #--------------------------------------------------------------------------
  2006.   # ● 選択肢の表示(エイリアス)
  2007.   #--------------------------------------------------------------------------
  2008.   alias command_102_str22 command_102
  2009.   def command_102
  2010.     if @overline_c[@indent] > 0
  2011.       @overline_c[@indent] -= 1
  2012.       return true
  2013.     end
  2014.     return command_102_str22
  2015.   end
  2016.   #--------------------------------------------------------------------------
  2017.   # ● 選択肢のセットアップ(再定義)
  2018.   #--------------------------------------------------------------------------
  2019.   def setup_choices(params)
  2020.     if $game_message.texts.size <= $game_message.maxlineex - params[0].size
  2021.       # イベントIDを渡す
  2022.       $game_message.event_id = @event_id
  2023.       # セットアップ
  2024.       $game_message.choice_start = $game_message.texts.size
  2025.       $game_message.choice_max = params[0].size
  2026.       for s in params[0]
  2027.         $game_message.texts.push(s)
  2028.       end
  2029.       $game_message.choice_cancel_type = params[1]
  2030.       $game_message.choice_cancel_type = 128 if $game_message.choice_cancel_type == 5
  2031.       @index += 1
  2032.       # オーバーライン
  2033.       index = @index
  2034.       i = @indent
  2035.       cs = 0
  2036.       lcs = params[0].size
  2037.       loop do
  2038.         break if @list[@index] == nil
  2039.         params = @list[@index].parameters
  2040.         i2 = @list[@index].indent
  2041.         # 選択肢表示の場合
  2042.         if @list[@index].code == 102 and i == i2 and
  2043.            $game_message.texts.size <= $game_message.maxlineex - params[0].size
  2044.           $game_message.choice_max += params[0].size
  2045.           for s in params[0]
  2046.             $game_message.texts.push(s)
  2047.           end
  2048.           $game_message.choice_cancel_type = params[1]
  2049.           $game_message.choice_cancel_type = 128 if $game_message.choice_cancel_type == 5
  2050.           @index += 1
  2051.           @overline_c[@indent] += 1
  2052.           lcs = params[0].size
  2053.         else
  2054.           # コード先読み
  2055.           code = @list[@index].code
  2056.           # 選択肢ID変換
  2057.           if code == 402 and i == i2
  2058.             c_param_reset
  2059.             @list[@index].parameters[0] += cs
  2060.             @list[@index].parameters.push(cs)
  2061.           end
  2062.           # 選択肢〆
  2063.           if code == 404 and i == i2
  2064.             if @list[@index+1].code == 102
  2065.               params = @list[@index+1].parameters
  2066.               if $game_message.texts.size <= $game_message.maxlineex - params[0].size
  2067.                 @index += 1
  2068.                 cs += lcs
  2069.               else
  2070.                 break
  2071.               end
  2072.             else
  2073.               break
  2074.             end
  2075.           else
  2076.             @index += 1
  2077.           end
  2078.         end
  2079.       end
  2080.       # インデックスを戻す
  2081.       @index = index
  2082.       $game_message.choice_proc = Proc.new { |n| @branch[@indent] = n }
  2083.     end
  2084.   end
  2085.   #--------------------------------------------------------------------------
  2086.   # ● 選択肢オーバーラインカウント初期化(追加)
  2087.   #--------------------------------------------------------------------------
  2088.   def c_over
  2089.     if @overline_c == nil
  2090.       @overline_c = []
  2091.       for oc in 0..100
  2092.         @overline_c[oc] = 0
  2093.       end
  2094.     end
  2095.   end
  2096.   #--------------------------------------------------------------------------
  2097.   # ● 選択肢IDを元に戻す(追加)
  2098.   #--------------------------------------------------------------------------
  2099.   def c_param_reset
  2100.     if @list[@index].parameters[2] != nil
  2101.       @list[@index].parameters[0] -= @list[@index].parameters[2]
  2102.       @list[@index].parameters.delete_at(2)
  2103.     end
  2104.   end
  2105.   #--------------------------------------------------------------------------
  2106.   # ● [**] の場合(再定義)
  2107.   #--------------------------------------------------------------------------
  2108.   def command_402
  2109.     if @branch[@indent] == @params[0]       # 該当する選択肢の場合
  2110.       @branch.delete(@indent)               # 分岐データを削除
  2111.       c_param_reset
  2112.       return true                           # 継続
  2113.     else                                    # 条件に該当しない場合
  2114.       c_param_reset
  2115.       return command_skip                   # コマンドスキップ
  2116.     end
  2117.   end
  2118.   #--------------------------------------------------------------------------
  2119.   # ● キャンセルの場合(再定義)
  2120.   #--------------------------------------------------------------------------
  2121.   def command_403
  2122.     if @branch[@indent] == 127              # 選択肢キャンセルの場合
  2123.       @branch.delete(@indent)               # 分岐データを削除
  2124.       return true                           # 継続
  2125.     else                                    # 条件に該当しない場合
  2126.       return command_skip                   # コマンドスキップ
  2127.     end
  2128.   end
  2129.   #--------------------------------------------------------------------------
  2130.   # ● 数値入力のセットアップ(再定義)
  2131.   #--------------------------------------------------------------------------
  2132.   def setup_num_input(params)
  2133.     if $game_message.texts.size < $game_message.maxlineex
  2134.       # 行追加(ポップアップ時のサイズ不足対策)
  2135.       $game_message.texts.push("")
  2136.       #
  2137.       $game_message.num_input_variable_id = params[0]
  2138.       $game_message.num_input_digits_max = params[1]
  2139.       @index += 1
  2140.     end
  2141.   end
  2142. end

作者: 上贺茂润    时间: 2014-11-19 12:44
no_face里对头像文件名#无效?
修改一下文件名试试




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