Advertisement
Raizen

Untitled

Mar 27th, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.04 KB | None | 0 0
  1. #==============================================================================
  2. # Vampyr Message Balloon [VX]
  3. #------------------------------------------------------------------------------
  4. # Exibe as mensagens em forma de balão.
  5. #------------------------------------------------------------------------------
  6. # Autor : Vampyr
  7. # Tradução PT e Modificações : Kyo Panda (http://www.mundorpgmaker.com.br/)
  8. #==============================================================================
  9.  
  10. #==============================================================================
  11. # Funções:
  12. #------------------------------------------------------------------------------
  13. # • Muda a exibição das mensagens para balões.
  14. # • Adiciona alguns códigos de mensagem extra.
  15. # • Retira a face das mensagens.
  16. #==============================================================================
  17.  
  18. #==============================================================================
  19. # Como usar:
  20. #------------------------------------------------------------------------------
  21. #
  22. # #--------------------------------------------------------------------------
  23. # # Instalação
  24. # #--------------------------------------------------------------------------
  25. #
  26. # • Cole o script acima do "▼ Principal" e abaixo dos "▼ Scripts Adicionais"
  27. # no Editor de Scripts do RPG Maker VX.
  28. #
  29. # • Configure o script no guia "Configuração" logo abaixo se desejar.
  30. #
  31. # #--------------------------------------------------------------------------
  32. # # Utilização
  33. # #--------------------------------------------------------------------------
  34. #
  35. # • Utilize os seguintes códigos na mensagem. Os códigos padrões do RPG Maker
  36. # VX também funcionam aqui.
  37. #
  38. # \@[X] = Onde X é a velocidade com que o texto é exibido.
  39. # \EV[X] = Exibe a mensagem sobre o evento de ID X.
  40. # \I[X] = Exibe o ícone e o nome do item de ID X.
  41. # \W[X] = Exibe o ícone e o nome da arma de ID X.
  42. # \A[X] = Exibe o ícone e o nome da armadura de ID X.
  43. # \S[X] = Exibe o ícone e o nome da habilidade de ID X.
  44. # \FN[X] = Muda a fonte para a fonte X.
  45. # \FS[X] = Muda o tamanho da fonte para X.
  46. # \FB = Ativa o modo negrito da fonte.
  47. # \FI = Ativa o modo itálico da fonte
  48. # \EN[X] = Exibe o nome do inimigo de ID X.
  49. # \CL[X] = Exibe o nome da classe de ID X.
  50. # \Map = Exibe o nome do mapa atual.
  51. #
  52. #==============================================================================
  53.  
  54. #==============================================================================
  55. # VMB_Options
  56. #------------------------------------------------------------------------------
  57. # Módulo que armazena as configurações para o script Vampyr Message Balloon.
  58. #==============================================================================
  59.  
  60. module VMB_Options
  61. #--------------------------------------------------------------------------
  62. # Configurações
  63. #--------------------------------------------------------------------------
  64.  
  65. # Defina aqui o nome padrão da fonte.
  66. FONT_NAME = Font.default_name
  67.  
  68. # Defina aqui o tamanho padrão da fonte.
  69. FONT_SIZE = 16
  70.  
  71. # Defina aqui se utilizará o sombremento da fonte.
  72. # Defina true para sim e false para não.
  73. FONT_SHADOW = false
  74.  
  75. # Defina aqui cor padrão da fonte.
  76. # Defina como Color.new(R, G, B, Opacidade)
  77. FONT_COLOR = Color.new(255, 255, 255, 255) # Color.new(0, 0, 0, 255)
  78.  
  79. # Defina aqui o SE tocado quando as letras da mensagem aparecem.
  80. # Defina como "" para não utilizar esta função.
  81. TYPE_SE = ""
  82.  
  83. #--------------------------------------------------------------------------
  84. # Fim da configuração
  85. #--------------------------------------------------------------------------
  86. end
  87.  
  88. #==============================================================================
  89. # Object
  90. #------------------------------------------------------------------------------
  91. # Classe de dados do Ruby.
  92. #------------------------------------------------------------------------------
  93. # Sumário de mudanças:
  94. # * Novo método: getw.
  95. #==============================================================================
  96.  
  97. class Object
  98. #--------------------------------------------------------------------------
  99. # Retorna o tamanho de uma string
  100. #--------------------------------------------------------------------------
  101. def getw
  102. # Define um bitmap
  103. bitmap = Bitmap.new(1, 1)
  104. # Define o tamanho do texto
  105. size = bitmap.text_size(self.to_s).width
  106. # Faz o dispose do bitmap
  107. bitmap.dispose
  108. # Retorna o tamanho
  109. return size
  110. end
  111. end
  112.  
  113. #==============================================================================
  114. # Sprite_MessageBalloon
  115. #------------------------------------------------------------------------------
  116. # Sprite que exibe as mensagens do jogo em forma de balão.
  117. #==============================================================================
  118.  
  119. class Sprite_MessageBalloon < Sprite
  120. #--------------------------------------------------------------------------
  121. # Inclusão das constantes e métodos do módulo VMB_Options
  122. #--------------------------------------------------------------------------
  123. include VMB_Options
  124. #--------------------------------------------------------------------------
  125. # Inicialização do objeto
  126. #--------------------------------------------------------------------------
  127. def initialize
  128. super() # Chama os parâmetros da super classe
  129. self.z = 999 # Define a prioridade da mensagem
  130. reset # Reinicia a janela
  131. end
  132. #--------------------------------------------------------------------------
  133. # Configuração da cor da letra
  134. # n : cor da letra (0~31)
  135. #--------------------------------------------------------------------------
  136. def text_color(n)
  137. x = 64 + (n % 8) * 8
  138. y = 96 + (n / 8) * 8
  139. return Cache.system("Window").get_pixel(x, y)
  140. end
  141. #--------------------------------------------------------------------------
  142. # Reinicialização da mensagem
  143. #--------------------------------------------------------------------------
  144. def reset
  145. self.visible = false # Definição da sua visibilidade
  146. @contents_x = 4 # Definição do alinhamento X do conteúdo da mensagem
  147. @contents_y = 4 # Definição do alinhamento Y do conteúdo da mensagem
  148. @wait_count = 0 # Contagem de espera
  149. @text_speed = 3 # Velocidade do texto
  150. @text = "" # Texto à ser exibido
  151. @width = [] # Largura da janela
  152. @show_fast = false # Mostrar rápido?
  153. @wait_input = false # Aguardar comando?
  154. @closing = false # Flag do fechamento da mensagem
  155. @terminate_message = false # Flag da finalização da mensagem
  156. self.bitmap.dispose if self.bitmap != nil # Dispose do conteúdo da mensagem
  157. self.bitmap = nil # Definição do bitmap da mensagem
  158. end
  159. #--------------------------------------------------------------------------
  160. # Abrir mensagem
  161. #--------------------------------------------------------------------------
  162. def open
  163. # Define @character como o personagem
  164. @character = $game_player
  165. # Para cada i de 0 ao tamanho da mensagem
  166. for i in 0...$game_message.texts.size
  167. # O texto passa à ser um clone de i mais "\x00"
  168. @text += $game_message.texts[i].clone + "\x00"
  169. end
  170. # Converte os caracteres especiais
  171. convert_special_characters
  172. # Para cada i do texto, dividi-se à cada "\x00"
  173. for i in @text.split("\x00")
  174. # A largura passa a ser o tamanho do texto
  175. @width << @text[i].getw
  176. end
  177. # Define-se a altura da mensagem
  178. height = $game_message.texts.size * FONT_SIZE + (FONT_SIZE + 8)
  179. # Define-se o bitmap da mensagem
  180. self.bitmap = Bitmap.new(@width.max + 8, height)
  181. # Define-se o nome da fonte
  182. self.bitmap.font.name = FONT_NAME
  183. # Define-se o tamanho da fonte
  184. self.bitmap.font.size = FONT_SIZE
  185. # Define-se se a fonte terá sombreamento
  186. self.bitmap.font.shadow = FONT_SHADOW
  187. # Define-se a cor da fonte
  188. self.bitmap.font.color = FONT_COLOR
  189. # Define o compensamento horizontal do bitmap
  190. self.ox = self.bitmap.width / 2
  191. # Define o compensamento vertical do bitmap
  192. self.oy = self.bitmap.height / 2
  193. # Define-se um Rect de acordo com a largura e altura do bitmap
  194. rect = self.bitmap.rect.clone
  195. # Reduz-se a altura do bitmap em 16 pixels
  196. rect.height -= 16
  197. # Cria-se a ponta do balão da mensagem de acordo com seu posicionamento
  198. # Se for "Acima"
  199. if $game_message.position >= 2
  200. self.bitmap.fill_rect(self.ox - 4, 0, 1, 1, Color.new(255, 255, 255, 192))
  201. self.bitmap.fill_rect(self.ox - 4, 1, 2, 1, Color.new(255, 255, 255, 192))
  202. self.bitmap.fill_rect(self.ox - 4, 2, 3, 1, Color.new(255, 255, 255, 192))
  203. self.bitmap.fill_rect(self.ox - 4, 3, 4, 1, Color.new(255, 255, 255, 192))
  204. self.bitmap.fill_rect(self.ox - 4, 4, 5, 1, Color.new(255, 255, 255, 192))
  205. self.bitmap.fill_rect(self.ox - 4, 5, 6, 1, Color.new(255, 255, 255, 192))
  206. self.bitmap.fill_rect(self.ox - 4, 6, 7, 1, Color.new(255, 255, 255, 192))
  207. self.bitmap.fill_rect(self.ox - 4, 7, 8, 1, Color.new(255, 255, 255, 192))
  208. rect.y += 8
  209. @contents_y += 8
  210. # Se não for "Acima"
  211. else
  212. self.bitmap.fill_rect(self.ox - 4, rect.height + 0, 8, 1, Color.new(255, 255, 255, 192))
  213. self.bitmap.fill_rect(self.ox - 4, rect.height + 1, 7, 1, Color.new(255, 255, 255, 192))
  214. self.bitmap.fill_rect(self.ox - 4, rect.height + 2, 6, 1, Color.new(255, 255, 255, 192))
  215. self.bitmap.fill_rect(self.ox - 4, rect.height + 3, 5, 1, Color.new(255, 255, 255, 192))
  216. self.bitmap.fill_rect(self.ox - 4, rect.height + 4, 4, 1, Color.new(255, 255, 255, 192))
  217. self.bitmap.fill_rect(self.ox - 4, rect.height + 5, 3, 1, Color.new(255, 255, 255, 192))
  218. self.bitmap.fill_rect(self.ox - 4, rect.height + 6, 2, 1, Color.new(255, 255, 255, 192))
  219. self.bitmap.fill_rect(self.ox - 4, rect.height + 7, 1, 1, Color.new(255, 255, 255, 192))
  220. end
  221. # Preenche o bitmap do balão
  222. self.bitmap.fill_rect(rect, Color.new(255, 255, 255, 192))
  223. # Define-se a opacidade do balão
  224. self.opacity = 255
  225. # Define-se a visibilidade do balão
  226. self.visible = true
  227. # Define a mensagem como visivel
  228. $game_message.visible = true
  229. end
  230. #--------------------------------------------------------------------------
  231. # Fechar mensagem
  232. #--------------------------------------------------------------------------
  233. def close
  234. # Reinicia a mensagem
  235. reset
  236. # Inicia o processo principal da mensagem
  237. $game_message.main_proc.call if $game_message.main_proc != nil
  238. # Limpa a mensagem
  239. $game_message.clear
  240. end
  241. #--------------------------------------------------------------------------
  242. # Atualização da tela
  243. #--------------------------------------------------------------------------
  244. def update
  245. # Chama as propriedade da super classe
  246. super
  247. # Retorna se não houver texto
  248. return if $game_message.texts.empty?
  249. # Se a contegem de espera for mais que 0
  250. if @wait_count > 0
  251. # Reduz-se a contagem de espera em 1
  252. @wait_count -= 1
  253. # Se a mensagem estiver terminando
  254. elsif @terminate_message
  255. # Se a opacidade da mensagem for maior que 0
  256. if self.opacity > 0
  257. # Reduz-se a opacidade em 10.
  258. self.opacity -= 10
  259. # Se não
  260. else
  261. # Fecha a mensagem
  262. close
  263. end
  264. # Define a mensagem como invisível
  265. $game_message.visible = false
  266. # Se a mensagem estiver fechando
  267. elsif @closing
  268. # Se pressionar C ou B
  269. if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  270. # Marca a mensagem como finalizando
  271. @terminate_message = true
  272. end
  273. # Se estiver aguardando por pressionamento
  274. elsif @wait_input
  275. # Se pressionar C ou B
  276. if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  277. # Define a espera por pressionamento como falso
  278. @wait_input = false
  279. end
  280. # Se pressionar C
  281. elsif Input.trigger?(Input::C)
  282. # Marca como exibir rápido
  283. @show_fast = true
  284. # Se o texto for diferente de nulo
  285. elsif @text != ""
  286. # Atualiza a mensagem
  287. update_message
  288. # Se o texto for nulo
  289. elsif @text == ""
  290. # Abre a mensagem
  291. open
  292. end
  293. # Retorna se estiver visivel
  294. return unless self.visible
  295. # Define X como o posicionamento de @character
  296. self.x = @character.screen_x
  297. # Se estiver exibindo acima
  298. if $game_message.position >= 2
  299. # Define o posicionamento de acordo
  300. self.y = @character.screen_y + (self.bitmap.height / 2) + 8
  301. # Se não
  302. else
  303. # Define o posicionamento de acordo
  304. self.y = @character.screen_y - self.bitmap.height - 8
  305. end
  306. end
  307. #--------------------------------------------------------------------------
  308. # Conversão dos caracteres especiais
  309. #--------------------------------------------------------------------------
  310. def convert_special_characters
  311. # Tag de exibição da variável
  312. @text.gsub!(/\\V\[([0-9]+)\]/i) {$game_variables[$1.to_i]}
  313. # Tag da exibição do nome do personagem
  314. @text.gsub!(/\\N\[(\d+)\]/i) {$game_actors[$1.to_i].name}
  315. # Tag da cor da fonte mensagem
  316. @text.gsub!(/\\C\[(\d+)\]/i) {"\x01[#{$1}]"}
  317. # Tag da pausa da mensagem
  318. @text.gsub!(/\\\./) {"\x03"}
  319. # Tag da pausa prolongada da mensagem
  320. @text.gsub!(/\\\|/) {"\x04"}
  321. # Tag da espera de pressionamento pelo usuário
  322. @text.gsub!(/\\!/) {"\x05"}
  323. # Tag da exibição da mensagem de uma vez
  324. @text.gsub!(/\\>/) {"\x06"}
  325. # Tag do cancelamento da exibição da mensagem de uma vez
  326. @text.gsub!(/\\</) {"\x07"}
  327. # Tag do fechamento automático da mensagem
  328. @text.gsub!(/\\\^/) {"\x08"}
  329. # Tag da velocidade da mensagem
  330. @text.gsub!(/\\@\[(\d+)\]/i) {@text_speed = $1.to_i; ""}
  331. # Tag do posicionamento da mensagem no evento
  332. @text.gsub!(/\\EV\[(\d+)\]/i) {@character = $game_map.events[$1.to_i]; ""}
  333. # Tag da exibição do ícone e nome dos itens
  334. @text.gsub!(/\\I\[(\d+)\]/i) {"\x10[#{$data_items[$1.to_i].icon_index}]#{$data_items[$1.to_i].name}"}
  335. # Tag da exibição do ícone e nome das armas
  336. @text.gsub!(/\\W\[(\d+)\]/i) {"\x10[#{$data_weapons[$1.to_i].icon_index}]#{$data_weapons[$1.to_i].name}"}
  337. # Tag da exibição do ícone e nome das armaduras
  338. @text.gsub!(/\\A\[(\d+)\]/i) {"\x10[#{$data_armors[$1.to_i].icon_index}]#{$data_armors[$1.to_i].name}"}
  339. # Tag da exibição do ícone e nome das habilidades
  340. @text.gsub!(/\\S\[(\d+)\]/i) {"\x10[#{$data_skills[$1.to_i].icon_index}]#{$data_skills[$1.to_i].name}"}
  341. # Tag da mudança da fonte da mensagem
  342. @text.gsub!(/\\FN\[(.*?)\]/i) {"\x10[#{$1}]"}
  343. # Tag da mudança do tamanho da fonte da mensagem
  344. @text.gsub!(/\\FS\[(.*?)\]/i) {"\x12[#{$1}]"}
  345. # Tag do estilo negrito da fonte
  346. @text.gsub!(/\\FB/i) {"\x13[#{$1}]"}
  347. # Tag do estilo itálico da fonte
  348. @text.gsub!(/\\FI/i) {"\x14[#{$1}]"}
  349. # Tag da exibição do nome do inimigo
  350. @text.gsub!(/\\EN\[(\d+)\]/i) {$data_enemies[$1.to_i].name}
  351. # Tag da exibição do nome da classe
  352. @text.gsub!(/\\CL\[(\d+)\]/i) {$data_classes[$1.to_i].name}
  353. # Tag da exibição do nome do mapa
  354. @text.gsub!(/\\Map/i) {$game_map.map_name}
  355. # Tag da exibição do caractere \
  356. @text.gsub!(/\\\\/) {"\\"}
  357. end
  358. #--------------------------------------------------------------------------
  359. # Atualização da mensagem
  360. #--------------------------------------------------------------------------
  361. def update_message
  362. # Retorna se não houver bitmap
  363. return if self.bitmap == nil
  364. # Retorna se o bitmap foi disposed
  365. return if self.bitmap.disposed?
  366. # Realização do loop
  367. loop do
  368. # Define c como a divisão da mensagem em /
  369. c = @text.slice!(/./m)
  370. # Caso c
  371. case c
  372. # Se for nulo
  373. when nil
  374. # Define a contagem de espera como 10
  375. @wait_count = 10
  376. # Marca a mensagem como fechando
  377. @closing = true
  378. # Quebra o loop
  379. break
  380. # Se for normal
  381. when "\x00"
  382. # Define o alinhamento X do conteúdo como 4
  383. @contents_x = 4
  384. # Aumenta o alinhamento Y do conteúdo para mais o tamanho da fonte
  385. @contents_y += FONT_SIZE
  386. # Define como mostrar a mensagem rápido como falso
  387. @line_show_fast = false
  388. # Se não houver texto
  389. if @text.empty?
  390. # Define a contagem de espera como 10
  391. @wait_count = 10
  392. # Marca a mensagem como fechando
  393. @closing = true
  394. # Quebra o loop
  395. break
  396. end
  397. # Se for mudança de cor
  398. when "\x01"
  399. # Adquire o número do texto
  400. @text.sub!(/\[([0-9]+)\]/, "")
  401. # Define a cor da mensagem
  402. self.bitmap.font.color = text_color($1.to_i)
  403. # Prossegue com o loop
  404. next
  405. # Se esperar por 1/4 de segundo
  406. when "\x03"
  407. # Defina a espera como 15
  408. @wait_count = 15
  409. # Quebra o loop
  410. break
  411. # Se esperar por 1 segundo
  412. when "\x04"
  413. # Define a espera como 60
  414. @wait_count = 60
  415. # Quebra o loop
  416. break
  417. # Se aguardar pelo pressionamento do usuário
  418. when "\x05"
  419. # Marca a espera por pressionamento como verdadeiro
  420. @wait_input = true
  421. # Quebra o loop
  422. break
  423. # Quando mostrar rápido
  424. when "\x06"
  425. # Marca o mostrar rápido como verdadeiro
  426. @line_show_fast = true
  427. # Quando não mostrar rápido
  428. when "\x07"
  429. # Marca o mostrar rápido como falso
  430. @line_show_fast = false
  431. # Quando fechar a mensagem automaticamente
  432. when "\x08"
  433. # Marca o fechando como verdadeiro
  434. @closing = true
  435. # Marca a tag de fechamento como verdadeiro
  436. @terminate_message = true
  437. # Quebra o loop
  438. break
  439. # Definição do desenho do nome e ícone de um objeto
  440. when "\x10"
  441. # Adquire o index da string
  442. @text.sub!(/\[(\d+)\]/, "")
  443. # Desenha o ícone
  444. draw_icon($1.to_i, @contents_x, @contents_y)
  445. # Aumente o X do conteúdo em 26 devido ao ícone
  446. @contents_x += 26
  447. # Se mudar o nome da fonte
  448. when "\x11"
  449. # Adquire o nome da fonte da string
  450. @text.sub!(/\[(.*?)\]/, "")
  451. # Define o nome da fonte
  452. self.bitmap.font.name = ($1.to_s != "" ? $1.to_s : FONT_NAME)
  453. # Se mudar o tamanho da fonte
  454. when "\x12"
  455. # Adquire o tamanho da fonte da string
  456. @text.sub!(/\[(.*?)\]/, "")
  457. # Define o tamanho da fonte
  458. self.bitmap.font.size = ($1.to_i > 0 ? $1.to_i : FONT_SIZE)
  459. # Se definir o estilo da fonte para negrito
  460. when "\x13"
  461. # Adquire a tag da string
  462. @text.sub!(/\[(.*?)\]/, "")
  463. # Define a fonte como negrito
  464. self.bitmap.font.bold = !self.bitmap.font.bold
  465. # Se definir o estilo da fonte para itálico
  466. when "\x14"
  467. # Adquire a tag da string
  468. @text.sub!(/\[(.*?)\]/, "")
  469. # Define a fonte como itálico
  470. self.bitmap.font.italic = !self.bitmap.font.italic
  471. # Se não
  472. else
  473. # Desenha o texto
  474. self.bitmap.draw_text(@contents_x, @contents_y, 20, FONT_SIZE, c)
  475. # Aumenta o alinhamento x
  476. @contents_x += c.getw
  477. # Reproduz o SE da mensagem
  478. RPG::SE.new(TYPE_SE).play if TYPE_SE != ""
  479. # Atualiza a tela de acordo com a velocidade
  480. for i in 0...@text_speed-1
  481. Graphics.update
  482. end
  483. end
  484. # Quebra o loop se estiver exibindo rápido
  485. break unless @show_fast or @line_show_fast
  486. end
  487. end
  488. end
  489.  
  490. #==============================================================================
  491. # Scene_Map
  492. #------------------------------------------------------------------------------
  493. # Classe das operações nos mapas.
  494. #------------------------------------------------------------------------------
  495. # Sumário de mudanças:
  496. # * Alias do método: start.
  497. #==============================================================================
  498.  
  499. class Scene_Map < Scene_Base
  500. #--------------------------------------------------------------------------
  501. # Alias da inicialização do processo
  502. #--------------------------------------------------------------------------
  503. alias vampyr_balloon_message_smap_start start
  504. #--------------------------------------------------------------------------
  505. # Inicialização do processo
  506. #--------------------------------------------------------------------------
  507. def start
  508. # Roda o método original
  509. vampyr_balloon_message_smap_start
  510. # Define a janela de mensagem como o sprite de balão
  511. @message_window = Sprite_MessageBalloon.new
  512. end
  513. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement