#==============================================================================
# ● [VX] ◦ Affichage de Bulle au dessus d'un Event
#------------------------------------------------------------------------------
# ◦ Par La Meche
# ◦
https://rpg-maker-vx.bbactif.com/forum.htm# ◦ Crée le 04/11/09
# ◦ Version 1.2
#------------------------------------------------------------------------------
# ● Installation :
# Insérez le script au dessus de main
#------------------------------------------------------------------------------
=begin
# ● Utilisation
# ~ Pour créer une bulle :
# Dans un event faites un appel de script avec ceci dedans :
creer_bulle(bulle_id, event_id, text, text_2)
# Dedans remplacer :
# - bulle_id : Numéro de la bulle, utilisé pour la détruire plus tard
# - event_id : L'ID de l'event sur lequel vous voulez afficher le texte
# - text / text_2 : Marquez entre " " votre texte
# Si vous ne voulez pas de 2éme texte, mettez "" à la place de text_2
#
# ~ Pour détruire une bulle :
# Dans un event faite un appel de script avec ceci dedans
effacer_bulle(bulle_id)
# Avec bulle_id le numéro de la bulle à détruire
#
# ~ Pour avoir une couleur
# Dans un event faite un appel de script avec ceci dedans
couleur(rouge, vert, bleu)
# > Rouge, Vert, Bleu : Ton de couleur Rouge, Vert, Bleu (0-255)
# Si vous voulez que rouge mettez 255 dans rouge et 0 dans les autres par exemple
#==============================================================================
=end
module Bulle
#--------------------------------------------------------------------------
# * Nombre de bulles maximun affiché en même temps.
# /!\ Plus ce nombre est grand, plus votre
# jeu sera susceptible de ramer
#--------------------------------------------------------------------------
Bulle_Max = 10
end
#==============================================================================
# ** Window_Bulle
#------------------------------------------------------------------------------
# Affiche un message au dessus d'un chara.
#==============================================================================
class Window_Bulle < Window_Base
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize(event_id, text, text_2, color)
@event_id = event_id
@text = text
@text_2 = text_2
@sprite = Window_Bulle_Affiche.new(@event_id, @text, @text_2, color)
@w = @sprite.longeur
@h = @sprite.hauteur
update_pos
end
#--------------------------------------------------------------------------
# * Charge la nouvelle position de la bulle
#--------------------------------------------------------------------------
def update_pos
if@sprite.disposed?
return
end
if @event_id != 0
x = $game_map.events[@event_id].screen_x
y = $game_map.events[@event_id].screen_y
else
x = $game_player.screen_x
y = $game_player.screen_y
end
@sprite.x = x - (@w/2) - 16
@sprite.y = y - (@h/2) - 64
@sprite.y -= 12 if @text_2 != ""
end
#--------------------------------------------------------------------------
# * Effacement de la bulle
#--------------------------------------------------------------------------
def effacer
return if @sprite.disposed?
col = Color.new(0, 0, 0, 0)
for i in 0...@h/2 +1
@sprite.contents.fill_rect(0, i, @w, 1, col)
@sprite.contents.fill_rect(0, @h-i, @w, 1, col)
Graphics.update if i%3 == 1
end
if @sprite != nil
@sprite.dispose if @sprite.disposed? == false
end
end
end
#==============================================================================
# ** Window_Bulle_Affiche
#------------------------------------------------------------------------------
# Gére la bulle.
#==============================================================================
class Window_Bulle_Affiche < Window_Base
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize(event_id, text, text_2, color)
super(0, 0, 544, 416)
self.opacity = 0
self.z = 50
convertion(text)
convertion(text_2) if text_2 != ""
@longeur_text = self.contents.text_size(text).width
@longeur_text_2 = self.contents.text_size(text_2).width if text_2 != ""
@w = 0
@h = 0
if text_2 != ""
if @longeur_text_2 > @longeur_text
@w = @longeur_text_2
self.width = @longeur_text_2 + 32
else
@w = @longeur_text
self.width = @longeur_text + 32
end
@h = 48
self.height = 48 + 32
else
@w = @longeur_text
@h = 24
self.width = @longeur_text + 32
self.height = 24 + 32
end
creation_bitmap
self.contents.font.color = color
self.contents.draw_text(0, 0, @longeur_text, 24, text, 0)
self.contents.draw_text(0, 24, @longeur_text_2, 24, text_2, 0) if text_2 != ""
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# * Caratéres Spréciaux
#--------------------------------------------------------------------------
def convertion(text)
text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
text.gsub!(/\n/) {""}
end
#--------------------------------------------------------------------------
# * Create Window Contents
#--------------------------------------------------------------------------
def creation_bitmap
self.contents.dispose
self.contents = Bitmap.new(width - 32, height - 32)
end
#--------------------------------------------------------------------------
# * Ouvre la bulle
#--------------------------------------------------------------------------
def ouvrir
return if @sprite.disposed?
col = Color.new(0, 0, 0, 0)
for i in 0...@h/2 +1
@sprite.contents.fill_rect(0, i, @w, 1, col)
@sprite.contents.fill_rect(0, @h-i, @w, 1, col)
Graphics.update if i%3 == 1
end
if @sprite != nil
@sprite.dispose if @sprite.disposed? == false
end
end
#--------------------------------------------------------------------------
# * Calcule la longeur
#--------------------------------------------------------------------------
def longeur
return @w
end
#--------------------------------------------------------------------------
# * Calcule la hauteur
#--------------------------------------------------------------------------
def hauteur
return @h
end
end
#=============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# Surcharge de Scene_Map.
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# * Terminate
#--------------------------------------------------------------------------
alias bulle_terminate terminate
def terminate
for i in 0...Bulle::Bulle_Max
$game_map.bulle[i].effacer if $game_map.bulle[i] != nil
$game_map.bulle[i] = nil
end
bulle_terminate
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
alias bulle_update update
def update
for i in 0...Bulle::Bulle_Max
$game_map.bulle[i].update_pos if $game_map.bulle[i] != nil
end
bulle_update
end
#--------------------------------------------------------------------------
# * Update Transfer Player
#--------------------------------------------------------------------------
alias bulle_update_transfer_player update_transfer_player
def update_transfer_player
return unless $game_player.transfer?
for i in 0..Bulle::Bulle_Max
$game_map.bulle[i].effacer if $game_map.bulle[i] != nil
$game_map.bulle[i] = nil
end
bulle_update_transfer_player
end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# Surcharge de Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :bulle
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias add_initialize initialize
def initialize
add_initialize
@bulle = []
end
end
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
# Surcharge de Game_Interpreter
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# * Object Initialization
# depth : nest depth
# main : main flag
#--------------------------------------------------------------------------
alias add_initialize initialize
def initialize(depth = 0, main = false)
@color = Color.new(255, 255, 255)
add_initialize(depth, main)
end
#--------------------------------------------------------------------------
# * Change la couleur des bulles
#--------------------------------------------------------------------------
def couleur(rouge, vert, bleu)
@color = Color.new(rouge, vert, bleu)
end
#--------------------------------------------------------------------------
# * Créer une bulle
#--------------------------------------------------------------------------
def creer_bulle(bulle_id, event_id, text, text2 = "")
$game_map.bulle[bulle_id] = Window_Bulle.new(event_id, text, text2, @color)
end
#--------------------------------------------------------------------------
# * Effacer une bulle
#--------------------------------------------------------------------------
def effacer_bulle(bulle_id, event_id)
$game_map.bulle[bulle_id].effacer
end
end