Mémoire d'Ames
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Mémoire d'Ames

Forum du jeu amateur Mémoire d'Ames.
 
AccueilPortailRechercherDernières imagesS'enregistrerConnexion
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

 

 Bulle de Dialogue Façon BD

Aller en bas 
2 participants
AuteurMessage
Sire
Troufion
Troufion
Sire


Nombre de messages : 25
Age : 32
Localisation : -M-D-A's Forum-
Date d'inscription : 29/04/2007

Bulle de Dialogue Façon BD Empty
MessageSujet: Bulle de Dialogue Façon BD   Bulle de Dialogue Façon BD Icon_minitimeDim 29 Avr - 19:01

Djidane Elric a écrit:
Bien, j'ai vu que pas mal de monde demandait ce script, donc le voici:

Vous remplacez tout le contenu de votre 'Window_Message' par ceci:

Code:
#==============================================================================
# ■ Window_Message
#------------------------------------------------------------------------------
#  文章表示に使うメッセージウィンドウです。
#==============================================================================

class Window_Message < 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
  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
    # メッセージ コールバックを呼ぶ
    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
    if @comic !=nil
    @comic.dispose
    @comic = nil
  end
 end
 #Comic Script
def GRmens_calc(x, y, w_size, text)
  self.x = 700
  rsl_size = w_size + 32
  h_size = 64
  rsl_x = [[x - rsl_size / 2, 0].max, 640 - rsl_size].min
  if y <= 96
    rsl_y = [[y - 16, 0].max, 480 - 116].min
  else
    rsl_y = [[y - 116, 0].max, 480 - 116].min
  end
 
  if x >= 608
    ind_x = x - 16
    ind_name = "ind_se"
  else
    ind_x = x + 8
    ind_name = "ind_so"
  end
 
  if y <= 96
    ind_y = rsl_y - 7
    ind_name = "ind_no"
  else
    ind_y = rsl_y + 61
  end
 
  if x >= 608 and y <= 96
    ind_name = "ind_ne"
  end
 
  @comic = Window_GRmens.new (rsl_x, rsl_y, rsl_size, ind_x, ind_y, ind_name, text)
 end

  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.name = "Arial"
    self.contents.font.size = 20
    x = y = 0
    @cursor_width = 0
    # 選択肢なら字下げを行う
    if $game_temp.choice_start == 0
      x = 8
    end
    # 表示待ちのメッセージがある場合
    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
      # 便宜上、"\\\\" を "\000" に変換
      text.gsub!(/\\\\/) { "\000" }
      #--------event
if (/\\[Nn]pc\[(.+?)\]/.match(last_text)) != nil
      event_id = $1
      x = $game_map.events[$1.to_i].screen_x
      y = $game_map.events[$1.to_i].screen_y
      text.sub!(/\\[Nn]pc\[(.*?)\]/) { "" }
      w_size = self.contents.text_size(text).width
      GRmens_calc(x, y, w_size, text)
    end
    #---------player
    if (/\\[Pp]lr/.match(last_text)) != nil
      x = $game_player.screen_x
      y = $game_player.screen_y
      text.sub!(/\\[Pp]lr/) { "" }
      w_size = self.contents.text_size(text).width
      GRmens_calc(x, y, w_size, text)
    end
      # "\\C" を "\001" に、"\\G" を "\002" に変換
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      # c に 1 文字を取得 (文字が取得できなくなるまでループ)
      while ((c = text.slice!(/./m)) != nil)
        # \\ の場合
        if c == "\000"
          # 本来の文字に戻す
          c = "\\"
        end
        # \C[n] の場合
        if c == "\001"
          # 文字色を変更
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          # 次の文字へ
          next
        end
        # \G の場合
        if c == "\002"
          # ゴールドウィンドウを作成
          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
          # 次の文字へ
          next
        end
        # 改行文字の場合
        if c == "\n"
          # 選択肢ならカーソルの幅を更新
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # y に 1 を加算
          y += 1
          x = 0
          # 選択肢なら字下げを行う
          if y >= $game_temp.choice_start
            x = 8
          end
          # 次の文字へ
          next
        end
        # 文字を描画
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
        # x に描画した文字の幅を加算
        x += self.contents.text_size(c).width
      end
    end
    # 選択肢の場合
    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 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 = 160
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    # フェードインの場合
    if @fade_in
      self.contents_opacity += 24
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
      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
      # 選択肢の表示中でなければポーズサインを表示
      if $game_temp.choice_max == 0
        self.pause = true
      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
      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
      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 self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● カーソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(8, n * 32, @cursor_width, 32)
    else
      self.cursor_rect.empty
    end
  end
end

Et vous créez un nouveau script au dessus de 'Main' que vous appelez 'Bulle' et dans lequel vous collez ceci:

Code:
class Window_GRmens < Window_Selectable
 
#--------------------------------------------------------------------------

 def initialize(rsl_x, rsl_y, rsl_size, ind_x, ind_y, ind_name, text)
  super(rsl_x, rsl_y, rsl_size, 64)
  self.contents = Bitmap.new(self.width - 32, self.height - 32)
  self.windowskin = RPG::Cache.windowskin("comic_skin")
  w = self.contents.width
  h = self.contents.height
  self.contents.font.name ="Arial"
  self.contents.font.size = 20
  self.contents.font.color = text_color(9)
  self.contents.draw_text(0, 0, w, h, text)
  @ind = Sprite.new
  @ind.bitmap = RPG::Cache.picture(ind_name)
  @ind.x = ind_x
  @ind.y = ind_y
  @ind.z = 101
 end
 #--------------------------------------------------------------------------
 def dispose
  self.contents = nil
  @ind.dispose
  super
 end
end

Pour faire s'aficher les bulles, c'est simple, faites comme si vous vouliez afficher un message simple, mais rajoutez devant:

-Pour le héro: "\plr"
Exemple:
\plrSalut, Ca va?

-Pour un evenement: "\npc[numéro de l'event]"
Exemple (En admettant que votre event porte le numero 009 (affiché en haut à gauche de votre fenêtre d'évenement):
\npc[009]Ca va bien merci et toi?


Les Ressources:
A mettre dans Picture:
Bulle de Dialogue Façon BD Ind_ne
Bulle de Dialogue Façon BD Ind_no
Bulle de Dialogue Façon BD Ind_se
Bulle de Dialogue Façon BD Ind_so

Et dans Windowskin:
Bulle de Dialogue Façon BD Comic_skin

De base, l'ecriture que vous verrez s'inscrire sera blanche, ensuite, à vous de choisir la couleur que vous donnerez à vos textes! Cela se passe dans "Window_Base" à la ligne 65 de base la valeur est : (255, 255, 255, 255), ce qui donne du blanc, pour obtenir du noir inscrivez à la place: (0, 0, 0, 255).


(La police d'écriture sera pour vous celle de base "Arial", libre à vous de la changer! Wink )


Dernière édition par le Lun 30 Avr - 7:31, édité 1 fois
Revenir en haut Aller en bas
http://dark-univers.ifrance.com
Sigur
Dieu Administrateur
Dieu Administrateur
Sigur


Nombre de messages : 212
Age : 33
Localisation : Le monde de Istraya.
Date d'inscription : 28/04/2007

Bulle de Dialogue Façon BD Empty
MessageSujet: Re: Bulle de Dialogue Façon BD   Bulle de Dialogue Façon BD Icon_minitimeLun 30 Avr - 1:35

Euuu tu est sur que c'est le bon screen ? scratch
On vois pas de dialogue. lol!
Revenir en haut Aller en bas
https://m-d-a.forumactif.fr
 
Bulle de Dialogue Façon BD
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Mémoire d'Ames :: Le making :: Scripts-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser