#============================================================================== # Vampyr Message Balloon [VX] #------------------------------------------------------------------------------ # Exibe as mensagens em forma de balão. #------------------------------------------------------------------------------ # Autor : Vampyr # Tradução PT e Modificações : Kyo Panda (http://www.mundorpgmaker.com.br/) #============================================================================== #============================================================================== # Funções: #------------------------------------------------------------------------------ # • Muda a exibição das mensagens para balões. # • Adiciona alguns códigos de mensagem extra. # • Retira a face das mensagens. #============================================================================== #============================================================================== # Como usar: #------------------------------------------------------------------------------ # # #-------------------------------------------------------------------------- # # Instalação # #-------------------------------------------------------------------------- # # • Cole o script acima do "▼ Principal" e abaixo dos "▼ Scripts Adicionais" # no Editor de Scripts do RPG Maker VX. # # • Configure o script no guia "Configuração" logo abaixo se desejar. # # #-------------------------------------------------------------------------- # # Utilização # #-------------------------------------------------------------------------- # # • Utilize os seguintes códigos na mensagem. Os códigos padrões do RPG Maker # VX também funcionam aqui. # # \@[X] = Onde X é a velocidade com que o texto é exibido. # \EV[X] = Exibe a mensagem sobre o evento de ID X. # \I[X] = Exibe o ícone e o nome do item de ID X. # \W[X] = Exibe o ícone e o nome da arma de ID X. # \A[X] = Exibe o ícone e o nome da armadura de ID X. # \S[X] = Exibe o ícone e o nome da habilidade de ID X. # \FN[X] = Muda a fonte para a fonte X. # \FS[X] = Muda o tamanho da fonte para X. # \FB = Ativa o modo negrito da fonte. # \FI = Ativa o modo itálico da fonte # \EN[X] = Exibe o nome do inimigo de ID X. # \CL[X] = Exibe o nome da classe de ID X. # \Map = Exibe o nome do mapa atual. # #============================================================================== #============================================================================== # VMB_Options #------------------------------------------------------------------------------ # Módulo que armazena as configurações para o script Vampyr Message Balloon. #============================================================================== module VMB_Options #-------------------------------------------------------------------------- # Configurações #-------------------------------------------------------------------------- # Defina aqui o nome padrão da fonte. FONT_NAME = Font.default_name # Defina aqui o tamanho padrão da fonte. FONT_SIZE = 16 # Defina aqui se utilizará o sombremento da fonte. # Defina true para sim e false para não. FONT_SHADOW = false # Defina aqui cor padrão da fonte. # Defina como Color.new(R, G, B, Opacidade) FONT_COLOR = Color.new(255, 255, 255, 255) # Color.new(0, 0, 0, 255) # Defina aqui o SE tocado quando as letras da mensagem aparecem. # Defina como "" para não utilizar esta função. TYPE_SE = "" #-------------------------------------------------------------------------- # Fim da configuração #-------------------------------------------------------------------------- end #============================================================================== # Object #------------------------------------------------------------------------------ # Classe de dados do Ruby. #------------------------------------------------------------------------------ # Sumário de mudanças: # * Novo método: getw. #============================================================================== class Object #-------------------------------------------------------------------------- # Retorna o tamanho de uma string #-------------------------------------------------------------------------- def getw # Define um bitmap bitmap = Bitmap.new(1, 1) # Define o tamanho do texto size = bitmap.text_size(self.to_s).width # Faz o dispose do bitmap bitmap.dispose # Retorna o tamanho return size end end #============================================================================== # Sprite_MessageBalloon #------------------------------------------------------------------------------ # Sprite que exibe as mensagens do jogo em forma de balão. #============================================================================== class Sprite_MessageBalloon < Sprite #-------------------------------------------------------------------------- # Inclusão das constantes e métodos do módulo VMB_Options #-------------------------------------------------------------------------- include VMB_Options #-------------------------------------------------------------------------- # Inicialização do objeto #-------------------------------------------------------------------------- def initialize super() # Chama os parâmetros da super classe self.z = 999 # Define a prioridade da mensagem reset # Reinicia a janela end #-------------------------------------------------------------------------- # Configuração da cor da letra # n : cor da letra (0~31) #-------------------------------------------------------------------------- def text_color(n) x = 64 + (n % 8) * 8 y = 96 + (n / 8) * 8 return Cache.system("Window").get_pixel(x, y) end #-------------------------------------------------------------------------- # Reinicialização da mensagem #-------------------------------------------------------------------------- def reset self.visible = false # Definição da sua visibilidade @contents_x = 4 # Definição do alinhamento X do conteúdo da mensagem @contents_y = 4 # Definição do alinhamento Y do conteúdo da mensagem @wait_count = 0 # Contagem de espera @text_speed = 3 # Velocidade do texto @text = "" # Texto à ser exibido @width = [] # Largura da janela @show_fast = false # Mostrar rápido? @wait_input = false # Aguardar comando? @closing = false # Flag do fechamento da mensagem @terminate_message = false # Flag da finalização da mensagem self.bitmap.dispose if self.bitmap != nil # Dispose do conteúdo da mensagem self.bitmap = nil # Definição do bitmap da mensagem end #-------------------------------------------------------------------------- # Abrir mensagem #-------------------------------------------------------------------------- def open # Define @character como o personagem @character = $game_player # Para cada i de 0 ao tamanho da mensagem for i in 0...$game_message.texts.size # O texto passa à ser um clone de i mais "\x00" @text += $game_message.texts[i].clone + "\x00" end # Converte os caracteres especiais convert_special_characters # Para cada i do texto, dividi-se à cada "\x00" for i in @text.split("\x00") # A largura passa a ser o tamanho do texto @width << @text[i].getw end # Define-se a altura da mensagem height = $game_message.texts.size * FONT_SIZE + (FONT_SIZE + 8) # Define-se o bitmap da mensagem self.bitmap = Bitmap.new(@width.max + 8, height) # Define-se o nome da fonte self.bitmap.font.name = FONT_NAME # Define-se o tamanho da fonte self.bitmap.font.size = FONT_SIZE # Define-se se a fonte terá sombreamento self.bitmap.font.shadow = FONT_SHADOW # Define-se a cor da fonte self.bitmap.font.color = FONT_COLOR # Define o compensamento horizontal do bitmap self.ox = self.bitmap.width / 2 # Define o compensamento vertical do bitmap self.oy = self.bitmap.height / 2 # Define-se um Rect de acordo com a largura e altura do bitmap rect = self.bitmap.rect.clone # Reduz-se a altura do bitmap em 16 pixels rect.height -= 16 # Cria-se a ponta do balão da mensagem de acordo com seu posicionamento # Se for "Acima" if $game_message.position >= 2 self.bitmap.fill_rect(self.ox - 4, 0, 1, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, 1, 2, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, 2, 3, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, 3, 4, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, 4, 5, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, 5, 6, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, 6, 7, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, 7, 8, 1, Color.new(255, 255, 255, 192)) rect.y += 8 @contents_y += 8 # Se não for "Acima" else self.bitmap.fill_rect(self.ox - 4, rect.height + 0, 8, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, rect.height + 1, 7, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, rect.height + 2, 6, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, rect.height + 3, 5, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, rect.height + 4, 4, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, rect.height + 5, 3, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, rect.height + 6, 2, 1, Color.new(255, 255, 255, 192)) self.bitmap.fill_rect(self.ox - 4, rect.height + 7, 1, 1, Color.new(255, 255, 255, 192)) end # Preenche o bitmap do balão self.bitmap.fill_rect(rect, Color.new(255, 255, 255, 192)) # Define-se a opacidade do balão self.opacity = 255 # Define-se a visibilidade do balão self.visible = true # Define a mensagem como visivel $game_message.visible = true end #-------------------------------------------------------------------------- # Fechar mensagem #-------------------------------------------------------------------------- def close # Reinicia a mensagem reset # Inicia o processo principal da mensagem $game_message.main_proc.call if $game_message.main_proc != nil # Limpa a mensagem $game_message.clear end #-------------------------------------------------------------------------- # Atualização da tela #-------------------------------------------------------------------------- def update # Chama as propriedade da super classe super # Retorna se não houver texto return if $game_message.texts.empty? # Se a contegem de espera for mais que 0 if @wait_count > 0 # Reduz-se a contagem de espera em 1 @wait_count -= 1 # Se a mensagem estiver terminando elsif @terminate_message # Se a opacidade da mensagem for maior que 0 if self.opacity > 0 # Reduz-se a opacidade em 10. self.opacity -= 10 # Se não else # Fecha a mensagem close end # Define a mensagem como invisível $game_message.visible = false # Se a mensagem estiver fechando elsif @closing # Se pressionar C ou B if Input.trigger?(Input::C) or Input.trigger?(Input::B) # Marca a mensagem como finalizando @terminate_message = true end # Se estiver aguardando por pressionamento elsif @wait_input # Se pressionar C ou B if Input.trigger?(Input::C) or Input.trigger?(Input::B) # Define a espera por pressionamento como falso @wait_input = false end # Se pressionar C elsif Input.trigger?(Input::C) # Marca como exibir rápido @show_fast = true # Se o texto for diferente de nulo elsif @text != "" # Atualiza a mensagem update_message # Se o texto for nulo elsif @text == "" # Abre a mensagem open end # Retorna se estiver visivel return unless self.visible # Define X como o posicionamento de @character self.x = @character.screen_x # Se estiver exibindo acima if $game_message.position >= 2 # Define o posicionamento de acordo self.y = @character.screen_y + (self.bitmap.height / 2) + 8 # Se não else # Define o posicionamento de acordo self.y = @character.screen_y - self.bitmap.height - 8 end end #-------------------------------------------------------------------------- # Conversão dos caracteres especiais #-------------------------------------------------------------------------- def convert_special_characters # Tag de exibição da variável @text.gsub!(/\\V\[([0-9]+)\]/i) {$game_variables[$1.to_i]} # Tag da exibição do nome do personagem @text.gsub!(/\\N\[(\d+)\]/i) {$game_actors[$1.to_i].name} # Tag da cor da fonte mensagem @text.gsub!(/\\C\[(\d+)\]/i) {"\x01[#{$1}]"} # Tag da pausa da mensagem @text.gsub!(/\\\./) {"\x03"} # Tag da pausa prolongada da mensagem @text.gsub!(/\\\|/) {"\x04"} # Tag da espera de pressionamento pelo usuário @text.gsub!(/\\!/) {"\x05"} # Tag da exibição da mensagem de uma vez @text.gsub!(/\\>/) {"\x06"} # Tag do cancelamento da exibição da mensagem de uma vez @text.gsub!(/\\ 0 ? $1.to_i : FONT_SIZE) # Se definir o estilo da fonte para negrito when "\x13" # Adquire a tag da string @text.sub!(/\[(.*?)\]/, "") # Define a fonte como negrito self.bitmap.font.bold = !self.bitmap.font.bold # Se definir o estilo da fonte para itálico when "\x14" # Adquire a tag da string @text.sub!(/\[(.*?)\]/, "") # Define a fonte como itálico self.bitmap.font.italic = !self.bitmap.font.italic # Se não else # Desenha o texto self.bitmap.draw_text(@contents_x, @contents_y, 20, FONT_SIZE, c) # Aumenta o alinhamento x @contents_x += c.getw # Reproduz o SE da mensagem RPG::SE.new(TYPE_SE).play if TYPE_SE != "" # Atualiza a tela de acordo com a velocidade for i in 0...@text_speed-1 Graphics.update end end # Quebra o loop se estiver exibindo rápido break unless @show_fast or @line_show_fast end end end #============================================================================== # Scene_Map #------------------------------------------------------------------------------ # Classe das operações nos mapas. #------------------------------------------------------------------------------ # Sumário de mudanças: # * Alias do método: start. #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # Alias da inicialização do processo #-------------------------------------------------------------------------- alias vampyr_balloon_message_smap_start start #-------------------------------------------------------------------------- # Inicialização do processo #-------------------------------------------------------------------------- def start # Roda o método original vampyr_balloon_message_smap_start # Define a janela de mensagem como o sprite de balão @message_window = Sprite_MessageBalloon.new end end