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
    화면에 둥근 말풍선이 뜨는 건가요?

  1. 퀘스트 스크립트

  2. 메뉴에 퀘스트 있는거

  3. 문과 상자를 쉽게 만들수 있는 스크립트

  4. 이름조합스크립트

  5. 아이템 조합 스크립트

  6. 모션 스크립트

  7. 메세지에 얼굴, 이름등 다양한 기능 넣기 UMS 스크립트

  8. 타이틀 로고 띄우기 + 로고 SE 가능(예제있음)

  9. Rpg Vx Ace 에서 이벤트 이름 팝업

  10. 3D스크립트!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  11. AraLab_MultiStartingPoint (다중 출발점 스크립트, 캐릭터 선택 스크립트) ver.0.2beta

  12. 8방향 이동스크립트

  13. 달리기스크립트

  14. 스텟찍기스크립트

  15. 말풍선 메세지 스크립트

  16. 횡스크롤 점프 [버튼허용스위치추가]

  17. 얼굴표시/문장을 한글자씩 나타내주는 스크립트 (출처-히페리온)

  18. RPG Maker VX Ace용 로고 스크립트

  19. RPG Maker VX Ace용 640*480 리사이징 스크립트

  20. VX Ace 스크립트 사이트

Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 15 Next
/ 15






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

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