RPGXP 스크립트
2014.02.24 05:09

말풍선 메세지 스크립트

조회 수 1853 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
# イベントコマンド「スクリプト」で「$mes_id」にイベントIDを代入することで
# そのイベントにふきだしがポップするようになります。
# (記述例: $mes_id=4 )
# IDに-1を代入するとプレイヤ?、0でそのイベント自身。
# nilまたは""を代入すると、通常のメッセ?ジ表示に?ります。
# 表示位置はイベント「文章オプション」で?更できます。
# 表示位置に「中央」を指定すると、イベントの位置に?係なく
# ?面中央に表示されます。
#
# [名前ウインドウの使い方]
# イベントコマンド「スクリプト」で「$mes_name」に文字列を代入することで
# 名前ウインドウを表示します。
# (記述例: $mes_name="アルシェス" )
# 制御文字 N[n] を使用する場合、はと記述してください。
# (記述例: $mes_name="N[1]"  $mes_name="N[V[1]]")
# ""またはnilを代入すると、非表示になります。
#
# 二つの機能は?立していますので、それぞれ??で使えます。
#  $mes_id=(ID) + $mes_name="名前"  :ふきだし表示 + 名前ウインドウ
#  $mes_id=(ID) + $mes_name=""      :ふきだし表示 (名前なし)
#  $mes_id=nil + $mes_name="名前"   :デフォルトウインドウ + 名前ウインドウ
#  $mes_id=nil + $mes_name=""       :デフォルトウインドウ (名前なし)
#
# [メッセ?ジ表示スピ?ドの?更法]
# イベントコマンド「スクリプト」で「$mes_speed」に?値を代入します。
# (記述例: $mes_speed=1 )
#==============================================================================
 
module FUKI
  
  # スキンの設定
  # ウインドウスキンと同じものを使うときは「""」
  FUKI_SKIN_NAME = "001-Blue01"   # ふきだし用スキン
  NAME_SKIN_NAME = "001-Blue01"   # 名前表示用スキン
  
  # フォントサイズ
  MES_FONT_SIZE = 22    # ふきだし
  NAME_FONT_SIZE = 14   # 名前ウインドウ
  
  # 文字色
  #( Color.new(0, 0, 0, 0)を指定すると、通常文字色を使用します )
  FUKI_COLOR = Color.new(255, 255, 255, 255)  # ふきだしウインドウ
  NAME_COLOR = Color.new(255, 255, 255, 255)  # 名前ウインドウ
  
  # ウインドウの透明度
  FUKI_OPACITY = 255    # ふきだしウインドウ
  MES_OPACITY = 255     # 通常のメッセ?ジウインドウ
  NAME_OPACITY = 255    # 名前ウインドウ
  
  # 名前ウインドウの相?位置
  NAME_SHIFT_X = 0    # ?位置
  NAME_SHIFT_Y = 16   # ?位置
  
  # ?面上下からウインドウがはみ出す時は、
  # 自動で表示位置(上下)をチェンジ( true / false )
  POS_FIX = true
 
  # ?面の一番端ではふきだしを少しずらす
  # 角の丸いスキンを使っていて、?の角がふきだしと重なる場合に true にする
  CORNER_SHIFT = false
  SHIFT_PIXEL = 4   # trueの時にずらすピクセル?
  
  # キャラクタ?の?のサイズ
  CHARACTOR_HEIGHT = 48
  # ふきだしの相?位置(?位置)
  POP_SHIFT_TOP = 0     # 表示位置が上のとき
  POP_SHIFT_UNDER = -16   # 表示位置が下のとき
  
  # メッセ?ジ表示速度(?字が小さいほど速い。0で瞬間表示)
  # $mes_speedに?値を代入することで、ゲ?ム中に?更可。
  MES_SPEED = 1
 
end
  
#==============================================================================
# □ Window_FukiMessage
#==============================================================================
 
class Window_FukiMessage < Window_Selectable
 
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(80, 304, 480, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9998
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @cursor_width = 0
    self.active = false
    self.index = -1
    @w = 0
    @h = 0
    @wait = 0
    @dx = 0
    @dy = 0
    $mes_speed = FUKI::MES_SPEED
  end
  #--------------------------------------------------------------------------
  # ○ サイズを決定してウインドウを作成
  #--------------------------------------------------------------------------
  def refresh_create
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.size = FUKI::MES_FONT_SIZE
    # ウインドウサイズを取得
    get_windowsize
    w = @w + 32 + 8
    h = @h * (self.contents.font.size + 10) + 26
    # ふきだしウインドウを作成
    set_fukidasi(self.x, self.y, w, h)
    # 名前ウインドウを作成
    set_namewindow
    # メッセ?ジ表示用??の初期化
    @dx = @dy = 0
    @cursor_width = 0
    @contents_drawing = true
    # 瞬間表示の場合、ここで表示?理
    if $mes_speed == 0
      # 描??理をル?プ
      while $game_temp.message_text != ""
        draw_massage
      end
      draw_opt_text
      @contents_showing_end = true
      @contents_drawing = false
    else
      # 一文字ずつ描?
      refresh_drawtext
    end
  end
  #--------------------------------------------------------------------------
  # ○ 一文字ずつ描?
  #--------------------------------------------------------------------------
  def refresh_drawtext
    if $game_temp.message_text != nil
      if @wait > 0
        @wait -= 1
      elsif @wait == 0
        # 描??理
        draw_massage
        @wait = $mes_speed
      end
    end
    # 描?終了
    if $game_temp.message_text == ""
      draw_opt_text
      @contents_showing_end = true
      @contents_drawing = false
    end
  end
  #--------------------------------------------------------------------------
  # ○ ウインドウサイズを取得
  #--------------------------------------------------------------------------
  def get_windowsize
    x = y = 0
    @h = @w = 0 
    @cursor_width = 0
    # 選?肢なら字下げを行う
    if $game_temp.choice_start == 0
      x = 16
    end
    # 表示待ちのメッセ?ジがある場合
    if $game_temp.message_text != nil
    text = $game_temp.message_text.clone
      # 制御文字?理
      begin
        last_text = text.clone
        text.gsub!(/[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/[Nn][([0-9]+)]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # 便宜上、"" を "00" に?換
      text.gsub!(//) { "00" }
      # "C" を "01" に、"G" を "02" に?換
      text.gsub!(/[Cc][([0-9]+)]/) { "01" }
      text.gsub!(/[Gg]/) { "02" }
      # c に 1 文字を取得 (文字が取得できなくなるまでル?プ)
      while ((c = text.slice!(/./m)) != nil)
        # の場合
        if c == "00"
          # 本?の文字に?す
          c = ""
        end
        # C[n] または G の場合
        if c == "01" or c == "02"
          # 次の文字へ
          next
        end
        # 改行文字の場合
        if c == "n"
          # y に 1 を加算
          y += 1
          # ??サイズを取得
          @h = y
          @w = x > @w ? x : @w
          if y >= $game_temp.choice_start
            @w = x + 8 > @w ? x + 8 : @w
          end
          x = 0
          # 選?肢なら字下げを行う
          if y >= $game_temp.choice_start
            x = 8
          end
          # 次の文字へ
          next
        end
        # x に描?した文字の幅を加算
        x += self.contents.text_size(c).width
      end
    end
    # ?値入力の場合
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @h += 1
      x = digits_max * self.contents.font.size + 16
      @w = x > @w ? x : @w
    end
  end
  #--------------------------------------------------------------------------
  # ○ 描??理
  #--------------------------------------------------------------------------
  def draw_massage
    self.contents.font.color = normal_color
    # 表示待ちのメッセ?ジがある場合
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      # 制御文字?理
      begin
        last_text = text.clone
        text.gsub!(/[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/[Nn][([0-9]+)]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # 便宜上、"" を "00" に?換
      text.gsub!(//) { "00" }
      # "C" を "01" に、"G" を "02" に?換
      text.gsub!(/[Cc][([0-9]+)]/) { "01[#{$1}]" }
      text.gsub!(/[Gg]/) { "02" }
      # c に 1 文字を取得
      if ((c = text.slice!(/./m)) != nil)
        # 選?肢の場合
        if @dy >= $game_temp.choice_start
          # 字下げを行う
          @dx = 8
          # 文字を描?
          font_size = self.contents.font.size
          self.contents.draw_text(4+@dx, (font_size+10)*@dy, font_size, font_size, c)
          # x に描?した文字の幅を加算
          @dx += self.contents.text_size(c).width
          # ル?プ
          while ((c = text.slice!(/./m)) != "n")
            # 文字を描?
            font_size = self.contents.font.size
            self.contents.draw_text(4+@dx, (font_size+10)*@dy, font_size, font_size, c)
            # x に描?した文字の幅を加算
            @dx += self.contents.text_size(c).width
          end
          if c == "n"
            # カ?ソルの幅を更新
            @cursor_width = [@cursor_width, @dx].max
            # y に 1 を加算
            @dy += 1
            @dx = 0
          end
          return
        end
        # の場合
        if c == "00"
          # 本?の文字に?す
          c = ""
        end
        # C[n] の場合
        if c == "01"
          # 文字色を?更
          text.sub!(/[([0-9]+)]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
        end
        # G の場合
        if c == "02"
          # ゴ?ルドウィンドウを作成
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
        end
        # 改行文字の場合
        if c == "n"
          # y に 1 を加算
          @dy += 1
          @dx = 0
        end
        # 文字を描?
        self.contents.font.size = FUKI::MES_FONT_SIZE
        font_size = self.contents.font.size
        self.contents.draw_text(4+@dx, (font_size+10)*@dy, font_size, font_size, c)
        # x に描?した文字の幅を加算
        @dx += self.contents.text_size(c).width
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ 選?肢と?値入力を有?に
  #--------------------------------------------------------------------------
  def draw_opt_text
    # 選?肢の場合
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    # ?値入力の場合
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
  #--------------------------------------------------------------------------
  # ○ ふきだしを表示
  #--------------------------------------------------------------------------
  def set_fukidasi(x, y, width, height)
    # $mes_id が空のときはふきだしを表示しない
    if $mes_id == nil or $mes_id == ""
      del_fukidasi
      reset_window
    else
      # ポ?ズサインを非表示
      self.pause = false
      # 位置を取得
      pos = get_fuki_pos(width, height)
      x = pos[0]
      y = pos[1]
      skin = FUKI::FUKI_SKIN_NAME != "" ? FUKI::FUKI_SKIN_NAME : $game_system.windowskin_name
      # ふきだし用メッセ?ジウインドウを作成
      self.windowskin = RPG::Cache.windowskin(skin)
      self.x = x
      self.y = y
      self.height = height
      self.width = width
      self.contents.dispose
      self.contents = Bitmap.new(width - 32, height - 32)
      self.back_opacity = FUKI::FUKI_OPACITY
      self.contents.clear
      self.contents.font.color = normal_color
      self.contents.font.size = FUKI::MES_FONT_SIZE
      # ふきだしのテ?ルを描?
      if $game_system.message_frame == 0
        # 位置を取得
        tale_pos = get_tale_pos
        @tale = Sprite.new
        case @message_position
          when 0  # 上
            @tale.bitmap = RPG::Cache.windowskin(skin + "-top")
            @tale.x = tale_pos[0]
            @tale.y = tale_pos[1]
            @tale.z = self.z + 1
          when 1  # 中
            @tale.dispose
            @tale = nil
          when 2  # 下
            @tale.bitmap = RPG::Cache.windowskin(skin + "-under")
            @tale.x = tale_pos[0]
            @tale.y = tale_pos[1]
            @tale.z = self.z + 1
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ ふきだしの位置を計算
  #--------------------------------------------------------------------------
  def get_fuki_pos(width, height)
    # キャラクタ?を取得
    @character = get_character($mes_id)
    if @character == nil
      # キャラクタ?が存在しないときは通常のメッセ?ジウインドウに
      del_fukidasi
      reset_window
      return
    end
    # 座標?理
    x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - (width / 2)
    # はみ出すときは?面?に?まるように移動
    if x + width > 640
      x = 640 - width
    elsif x < 0
      x = 0
    end
    # ウインドウの位置を決定
    case $game_system.message_position
      when 0  # 上
        y = ( @character.real_y - $game_map.display_y + 64) * 32 / 128 - height - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
      when 1  # 中
        y = (480 - height) / 2
        x = (640 - width) / 2
      when 2  # 下
        y =  ( @character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + FUKI::POP_SHIFT_UNDER
    end
    #メッセ?ジポジション一時記憶
    @message_position = $game_system.message_position
    # ?面外にはみ出す時はウインドウの上下をチェンジ
    if FUKI::POS_FIX
      case @message_position
        when 0  # 上
          if y <= 0
            @message_position = 2
            y =  ( @character.real_y - $game_map.display_y + 64) * 32 / 128 + FUKI::POP_SHIFT_UNDER
          end
        when 2  # 下
          if y + height >= 480
            @message_position = 0
            y = ( @character.real_y - $game_map.display_y + 64) * 32 / 128 - height + 32 - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
          end
      end
    end
    return [x,y]
  end
  #--------------------------------------------------------------------------
  # ○ テ?ルの位置を計算
  #--------------------------------------------------------------------------
  def get_tale_pos
    case @message_position
      when 0  # 上
        # 座標?理
        x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 16
        # ?面端では位置をずらす
        if FUKI::CORNER_SHIFT
          if x == 0
            x = FUKI::SHIFT_PIXEL
          elsif x == 640 - 32
            x = 640 - 32 - FUKI::SHIFT_PIXEL
          end
        end
        y = self.y + self.height - 16
      when 1  # 中
        x = nil
        y = nil
      when 2  # 下
        # 座標?理
        x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 16
        # ?面端では位置をずらす
        if FUKI::CORNER_SHIFT
          if x == 0
            x = FUKI::SHIFT_PIXEL
          elsif @tale.x == 640 - 32
            x = 640 - 32 - FUKI::SHIFT_PIXEL
          end
        end
        y = self.y - 16
    end
    return [x,y]
  end
  #--------------------------------------------------------------------------
  # ○ 名前ウインドウを表示
  #--------------------------------------------------------------------------
  def set_namewindow
    # $mes_name が空のときは名前ウインドウを表示しない
    if $mes_name == nil or $mes_name == ""
      return
    else
      # ??をセット
      mes_name = $mes_name
      # 制御文字?理
      begin
        last_text = mes_name.clone
        mes_name.gsub!(/[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }
      end until mes_name == last_text
      mes_name.gsub!(/[Nn][([0-9]+)]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      name_width = mes_name.size / 2 * FUKI::NAME_FONT_SIZE
      name_height = FUKI::NAME_FONT_SIZE
      name_x = self.x + FUKI::NAME_SHIFT_X
      name_y = self.y - name_height - 16 + FUKI::NAME_SHIFT_Y
      # 名前ウインドウ(?のみ)を作成
      @name_win = Window_Base.new(name_x, name_y, name_width + 16, name_height + 16)
      skin = FUKI::NAME_SKIN_NAME != "" ? FUKI::NAME_SKIN_NAME : $game_system.windowskin_name
      @name_win.windowskin = RPG::Cache.windowskin(skin)
      @name_win.back_opacity = FUKI::NAME_OPACITY
      @name_win.z = self.z + 1
      # 余白をwindowクラスの限界よりも小さくするため、二重構造に
      @name_contents = Sprite.new
      @name_contents.x = name_x + 12
      @name_contents.y = name_y + 8
      @name_contents.bitmap = Bitmap.new(name_width, name_height)
      @name_contents.z = @name_win.z + 2
      # 文字色の設定
      nil_color = Color.new(0,0,0,0)
      if FUKI::NAME_COLOR != nil_color
        @name_contents.bitmap.font.color = FUKI::NAME_COLOR
      else
        @name_contents.bitmap.font.color = normal_color
      end
      @name_contents.bitmap.font.size = FUKI::NAME_FONT_SIZE
      # ウインドウサイズを調整
      rect = @name_contents.bitmap.text_size(mes_name)
      @name_win.width = rect.width + 32
      # 名前を描?
      @name_contents.bitmap.draw_text(rect, mes_name)
    end
  end
  #--------------------------------------------------------------------------
  # ○ ふきだしと名前ウインドウを破棄
  #--------------------------------------------------------------------------
  def del_fukidasi
    if @tale != nil
      @tale.dispose
      @tale = nil
    end
    if @name_win != nil
      @name_win.dispose
      @name_win = nil
      @name_contents.dispose
      @name_contents = nil
    end
    self.opacity = 0
    self.x = 80
    self.width = 480
    self.height = 160
    self.contents.dispose
    self.contents = Bitmap.new(width - 32, height - 32)
    self.pause = true
  end
  #--------------------------------------------------------------------------
  # ○ キャラクタ?の取得
  #     parameter : パラメ?タ
  #--------------------------------------------------------------------------
  def get_character(parameter)
    # パラメ?タで分岐
    case parameter
    when -1  # プレイヤ?
      return $game_player
    when 0  # このイベント
      events = $game_map.events
      return events == nil ? nil : events[$active_event_id]
    else  # 特定のイベント
      events = $game_map.events
      return events == nil ? nil : events[parameter]
    end
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウの位置と不透明度の設定
  #--------------------------------------------------------------------------
  def reset_window
    if $game_temp.in_battle
      self.y = 16
    else
      case $game_system.message_position
      when 0  # 上
        self.y = 16
      when 1  # 中
        self.y = 160
      when 2  # 下
        self.y = 304
      end
    end
    if $game_system.message_frame == 0
      self.opacity = 255
    else
      self.opacity = 0
    end
    self.back_opacity = FUKI::MES_OPACITY
  end
  #--------------------------------------------------------------------------
  # ● フレ?ム更新
  #--------------------------------------------------------------------------
  def update
    super
    # ふきだしモ?ドではイベントの動きに追?
    if @tale != nil
      pos = get_fuki_pos(self.width, self.height)
      self.x = pos[0]
      self.y = pos[1]
      tale_pos = get_tale_pos
      @tale.x = tale_pos[0]
      @tale.y = tale_pos[1]
      if @name_win != nil
        name_height = FUKI::NAME_FONT_SIZE
        @name_win.x = self.x + FUKI::NAME_SHIFT_X
        @name_win.y = self.y - name_height - 16 + FUKI::NAME_SHIFT_Y
        @name_contents.x = @name_win.x + 12
        @name_contents.y = @name_win.y + 8
      end
    end
    # フェ?ドインの場合
    if @fade_in
      self.contents_opacity += 24
      if @name_win != nil
        @name_win.opacity += 24
      end
      if @tale != nil
        @tale.opacity += 24
      end
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
      return
    end
    # メッセ?ジ表示中の場合
    if @contents_drawing
      refresh_drawtext
      return
    end
    # ?値入力中の場合
    if @input_number_window != nil
      @input_number_window.update
      # 決定
      if Input.trigger?(Input::C)
        $game_system.se_play($data_system.decision_se)
        $game_variables[$game_temp.num_input_variable_id] =
          @input_number_window.number
        $game_map.need_refresh = true
        # ?値入力ウィンドウを解放
        @input_number_window.dispose
        @input_number_window = nil
        terminate_message
      end
      return
    end
    # メッセ?ジ表示終了の場合
    if @contents_showing_end
      # 選?肢の表示中でなければポ?ズサインを表示
      # ふきだしモ?ドでは非表示
      if $game_temp.choice_max == 0 and @tale == nil
        self.pause = true
      else
        self.pause = false
      end
      # キャンセル
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
          $game_system.se_play($data_system.cancel_se)
          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
          terminate_message
        end
      end
      # 決定
      if Input.trigger?(Input::C)
        if $game_temp.choice_max > 0
          $game_system.se_play($data_system.decision_se)
          $game_temp.choice_proc.call(self.index)
        end
        terminate_message
        # ふきだしを破棄
        del_fukidasi
      end
      return
    end
    # フェ?ドアウト中以外で表示待ちのメッセ?ジか選?肢がある場合
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      reset_window
      refresh_create
      if @name_win != nil
        @name_win.opacity = 0
      end
      if @tale != nil
        @tale.opacity = 0
      end
      Graphics.frame_reset
      self.visible = true
      self.contents_opacity = 0
      if @input_number_window != nil
        @input_number_window.contents_opacity = 0
      end
      @fade_in = true
      return
    end
    # 表示すべきメッセ?ジがないが、ウィンドウが可視?態の場合
    if self.visible
      @fade_out = true
      self.opacity -= 48
      if @name_win != nil
        @name_win.opacity -= 48
      end
      if @tale != nil
        @tale.opacity -= 48
      end
      if self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
        del_fukidasi
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ●解放
  #--------------------------------------------------------------------------
  def dispose
    terminate_message
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    super
  end
  #--------------------------------------------------------------------------
  # ● メッセ?ジ終了?理
  #--------------------------------------------------------------------------
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    self.contents.clear
    # 表示中フラグをクリア
    @contents_showing = false
    @contents_showing_end = false
    # メッセ?ジ コ?ルバックを呼ぶ
    if $game_temp.message_proc != nil
      $game_temp.message_proc.call
    end
    # 文章、選?肢、?値入力に?する??をクリア
    $game_temp.message_text = nil
    $game_temp.message_proc = nil
    $game_temp.choice_start = 99
    $game_temp.choice_max = 0
    $game_temp.choice_cancel_type = 0
    $game_temp.choice_proc = nil
    $game_temp.num_input_start = 99
    $game_temp.num_input_variable_id = 0
    $game_temp.num_input_digits_max = 0
    # ゴ?ルドウィンドウを開放
    if @gold_window != nil
      @gold_window.dispose
      @gold_window = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● カ?ソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      font_size = self.contents.font.size
      self.cursor_rect.set(8, n*(font_size+10)-5, @cursor_width, (font_size+10))
    else
      self.cursor_rect.empty
    end
  end
  #--------------------------------------------------------------------------
  # ● 通常文字色の取得
  #--------------------------------------------------------------------------
  def normal_color
    # ふきだしモ?ド時に設定を適用
    if $mes_id != nil and $mes_id != ""
      nil_color = Color.new(0,0,0,0)
      if FUKI::FUKI_COLOR != nil_color
        color = FUKI::FUKI_COLOR
      else
        color = super
      end
      return color
    else
      # 非ふきだし時には通常文字色
      return super
    end
  end
end
 
#==============================================================================
# ■ Interpreter
#==============================================================================
 
class Interpreter
  #--------------------------------------------------------------------------
  # ● イベントのセットアップ
  #     event_id : イベント ID
  #--------------------------------------------------------------------------
  alias setup_fuki setup
  def setup(list, event_id)
    setup_fuki(list, event_id)
    # ??中でなければ
    if !($game_temp.in_battle)
      # イベントIDを記?
      $active_event_id = event_id
    end
  end
end
 
#==============================================================================
# ■ Scene_Map
#==============================================================================
 
class Scene_Map
  #--------------------------------------------------------------------------
  # ● メイン?理
  #--------------------------------------------------------------------------
  def main
    # スプライトセットを作成
    @spriteset = Spriteset_Map.new
    # メッセ?ジウィンドウを作成
    @message_window = Window_FukiMessage.new
    # トランジション?行
    Graphics.transition
    # メインル?プ
    loop do
      # ゲ?ム?面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレ?ム更新
      update
      # ?面が切り替わったらル?プを中?
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # スプライトセットを解放
    @spriteset.dispose
    # メッセ?ジウィンドウを解放
    @message_window.dispose
    # タイトル?面に切り替え中の場合
    if $scene.is_a?(Scene_Title)
      # ?面をフェ?ドアウト
      Graphics.transition
      Graphics.freeze
    end
  end
end
 
#==============================================================================
# ■ Window_InputNumber
#==============================================================================
 
class Window_InputNumber < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     digits_max : 桁?
  #--------------------------------------------------------------------------
  def initialize(digits_max)
    @digits_max = digits_max
    @number = 0
    # ?字の幅からカ?ソルの幅を計算 (0~9 は等幅と?定)
    dummy_bitmap = Bitmap.new(32, 32)
    dummy_bitmap.font.size = FUKI::MES_FONT_SIZE
    @cursor_width = dummy_bitmap.text_size("0").width + 8
    dummy_bitmap.dispose
    super(0, 0, @cursor_width * @digits_max + 32, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.size = FUKI::MES_FONT_SIZE
    self.z += 9999
    self.opacity = 0
    @index = 0
    refresh
    update_cursor_rect
  end
end
그리고 저는 사용법을 모릅니다...
첨부에 도움말과 스크립트를 사용할때 필요한것을 첨부하였습니다.
?
  • ?
    빛소리 2014.03.01 23:56
    오옷 굉장히 기네요
    읽어보면서 써봐야겟네요.
  • ?
    레이븐 2014.03.24 00:48
    화면에 둥근 말풍선이 뜨는 건가요?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
228 RPGXP 스크립트 횡스크롤 점프 [버튼허용스위치추가] 3  운 2014.06.01 1626 0
» RPGXP 스크립트 말풍선 메세지 스크립트 2 천둥번들 2014.02.24 1853 0
226 RPGXP 스크립트 스텟찍기스크립트 12 천둥번들 2014.02.22 1761 3
225 RPGXP 스크립트 달리기스크립트 4 천둥번들 2014.02.22 2306 2
224 RPGXP 스크립트 8방향 이동스크립트 5 천둥번들 2014.02.22 1723 6
223 RPGXP 스크립트 AraLab_MultiStartingPoint (다중 출발점 스크립트, 캐릭터 선택 스크립트) ver.0.2beta 3  운 2014.01.21 1973 1
222 RPGXP 스크립트 3D스크립트!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6 공박사 2014.01.18 2805 2
221 RPGVX Ace 스크립트 Rpg Vx Ace 에서 이벤트 이름 팝업 3 빙냥이 2014.01.17 1894 0
220 RPGXP 스크립트 타이틀 로고 띄우기 + 로고 SE 가능(예제있음) 6 데노제 2013.12.13 2391 3
219 RPGXP 스크립트 메세지에 얼굴, 이름등 다양한 기능 넣기 UMS 스크립트 1 데노제 2013.12.10 1616 0
218 RPGXP 스크립트 모션 스크립트 3  운 2013.12.06 2053 0
217 RPGXP 스크립트 아이템 조합 스크립트 7  운 2013.12.06 2712 0
216 RPGXP 스크립트 이름조합스크립트 16 Scissor 2013.10.27 2764 0
215 RPGXP 스크립트 문과 상자를 쉽게 만들수 있는 스크립트 18 2013.10.21 2242 0
214 RPGXP 스크립트 메뉴에 퀘스트 있는거 2  운 2013.10.12 1957 2
213 RPGXP 스크립트 퀘스트 스크립트 21  운 2013.10.12 3100 2
212 RPGXP 스크립트 로고를 띄우는 스크립트 14 XEONSOFT블로그 2013.10.07 1677 0
211 RPGXP 스크립트 맵이름 표시 스크립트 18  운 2013.10.05 2244 0
210 RPGXP 스크립트 요청하신 게이지바 스크립트 입니다. 8 소년영남 2013.10.04 1919 1
209 RPGXP 스크립트 파이널 판타지 7 스타일 메뉴 6 2013.10.01 2024 0
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)