O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

XGB's Message Box

Iniciado por Dr.XGB, 19/06/2013 às 15:44

XGB's Message Box






Autor: Dr.XGB
Plataforma usada: RPG Maker 2000
Dificuldade: Avançado
Outro Motor: Destiny Patcher 2.0

Pessoal, criei um sistema para aqueles que desejam deixar a caixa de texto mais interessante e diferente do sistema padrão do RPG Maker. Eu programei de um jeito que você pode deixar a caixa de mensagens onde você quiser e definir o tamanho.
Inicialmente, eu fiz com que o jogo procurasse todos os arquivos dentro da pasta System do seu projeto e armazenar o nome de todos eles em Strings, podendo então carregar o gráfico selecionado para uma picture. Carregada a imagem do System Atual para a Picture, criaremos a janela da mensagem através desta imagem carregada, pegando partes dela e passando para uma nova picture, onde faremos primeiro o fundo da janela e, em seguida a borda da janela em uma outra picture.

Além disso, temos as fontes, onde desenvolverá o texto. Para isso, eu criei um tipo de arquivo chamado FontSet, que serão imagens em PNG que ficarão caracteres usados em textos. Aqui está o exemplo de um gráfico de fonte:


Daí então, o jogo vai alterar a paleta desta fonte para a paleta do System e começar a preencher todos os pixels da letra de acordo com a cor selecionada do System:


E assim faremos para todas as outras cores. Para evitar que ele tenha que ficar fazendo isso toda hora, eu os salvo em um arquivo temporário para que, na próxima vez, que for jogar ou então quando trocar de mapa, ele simplesmente carregue os arquivos criados. A sombra das letras também são baseadas com a cor do System. Veja o que significa cada um deles:


Baseando-se nessa ideia que eu montei a janela e as fontes.



Antes de iniciar a mensagem, escolha a coordenada da janela, tamanho e onde ela será posicionada: abaixo do NPC, à esquerda, à direita ou acima.
Agora a mensagem será armazenada na String a[1] e chame o evento XGB Show Message para aparecer a mensagem personalizada.
Além do mais, você ainda pode utilizar os códigos da mensagem que são usados na mensagem padrão:

\| - Esperar 1 segundo;
\. - Esperar ¼ segundo;
\_ - Metade de um espaço;
\C[n] - Cor da mensagem;
\S[n] - Velocidade da mensagem;
\V[n] - Mostrar valor da Variável;
\N[n] - Nome do Herói;
\^ - Fechar caixa de texto;
\! - Continuar mensagem com Enter;
\$ - Mostrar Gold Points;
\> - Mensagem Instantânea (aparecer sem rolar);
\< - Parar Mensagem Instantânea.

\a[n] - Mostrar String;
\d[n] - Mostrar Dword;
\f[n] - Mostrar Float.

Além destes, criei mais alguns códigos que você pode usar deixando sua mensagem mais interativa. A novidade é que você pode usar emoticons/smileys em suas mensagens, onde serão carregadas num arquivo que chamei de SmileySet. Onde você pode colocar 255 emoticons dentro deste arquivo. Logo em seguida, teremos os novos comandos como mostrar a data atual e para pular uma linha, caso seja necessário. Aí estão alguns smileys do nosso nostálgico MSN:


\E[n] - Inserir emoticon;
\# - Pular uma linha;
\t - Mostrar data e horário.




Aproveitei o sistema e criei um esquema para a opção "Show Choice" e "Input Number", onde o Show Choice será feita na String a[3], deixando uma opção por linha e o Input Number declarando valores de duas variáveis, onde uma vai servir para mostrar a quantidade de dígitos e a outra para determinar a ID da variável que será alterada.

Você pode aproveitar o sistema para criar menus, que vai funcionar muito bem. Eu programei de um jeito que ele fique bem otimizado e que combine com as outras funções.




Dentro deste Demo, mostra como você pode utilizar a caixa de mensagens em diversas maneiras.
Além disso, no código do jogo está tudo bem detalhado como chamar as ações e explicando como elas funcionam.
[box class=catbg4]
Download da Demonstração
Versão 1.0
(NOVO) Versão 1.1.0
[/box]




Caso você queira criar sua própria fonte e seus próprios emoticons, use estes templates:
[box title=FontSet][/box]
[box title=SmileySet][/box]




Se você gostou deste sistema e quer colocá-lo no seu jogo?
Você tem duas formas: ou você copia o projeto e cola fazendo um novo jogo ou então crie um projeto vazio e copie o arquivo RPG_RT.ldb e as pastas Data, FontSet e SmileySet. Não se esqueça que para funcionar em seu jogo, você deve usar o Destiny Patcher 2.0 e ter o Destiny.dll dentro da pasta do seu projeto.

Espero que tenham gostado.
Até mais! :ok:




Log de atualizações:
Versão 1.1.0
- Código de mensagem acrescentada: \> e \<

Wow está muito legal parabéns =)
+ouro
se eu estivesse fazendo um jogo no 2k eu com certeza usaria!
e sabia que minha irmã ainda mexe no msn, mesmo ele tendo falecido, não sei como eu tento entra nele e não da :/

 :rainbow: somente  :rainbow:

Cara, ver esses seus sistemas está me fazendo ter vontade de aprender a usar o Destiny Patcher. Seus sistemas estão sempre me surpreendendo, parabéns!

P.S: Na primeira oportunidade irei arrancar seu coração e comê-lo para obter seu poder!  :malvado:

Viva a lenda!



O que dizer? Belo trabalho, como sempre.
Vou dar uma olhada no sistema e ver se eu consigo dar uma modificada para poder dar um espaçamento diferente dentre as letras, afinal, todo esse espaço para um " i " me mata do coração.
Preguiça de postar sistemas.

Citação de: Jalax online 19/06/2013 às 18:34
O que dizer? Belo trabalho, como sempre.
Vou dar uma olhada no sistema e ver se eu consigo dar uma modificada para poder dar um espaçamento diferente dentre as letras, afinal, todo esse espaço para um " i " me mata do coração.
Na verdade você pode mudar o espaçamento da maneira desejada alterando os valores de v[28]. Do jeito que eu deixei, cada letra soma por 8, o espaço 4 e quando você usa o código \_ ele soma 2.
Você pode pegar essas letras e criar uma condição especial para cada espaçamento entre elas. Aqui vai um exemplo:
$
if(String.Chr(v[31]) == "I" || String.Chr(v[31]) == "i")
  v[28] += 2;
else
  v[28] += 8;
endif;

Se você analisar no código, v[31] representa o valor da caractere detectada na posição da String da mensagem. A programação que fiz para esse sistema foi feito para que você possa mexer da forma que você quiser, deixando cada dado independente, permitindo que você possa alterá-lo à sua maneira.

Hum, fui mexer no sistema hoje, e descobri uma pequena falha nessa sua dica XGB.
Seguinte, você usa uma picture temporária que é gerada pouco a pouco copiando "quadrados" inteiros do arquivo de fonte, correto? Bom, acontece que quando você copiou o quadrado inteiro, sem nenhuma condicional por cima, pixels que tem cores inteiras acabam sendo sobrepostos por pixels que carregam a cor Zero da paleta, ou seja, ele literalmente some com pixels.
Exemplificando:
Spoiler
[close]
No caso acima, eu apenas troquei o espaçamento por dois, e todas as letras tiveram as suas duas últimas colunas de pixels sobrepostas pela cor zero, simplesmente desaparecendo.
Gostaria que me indicasse o código exato em que ocorre a cópia de caracteres, para que eu faça uma cópia manual feita pixel a pixel, de modo que o maker não sobreponha um pixel por outro caso o novo seja de ID de paleta Zero.
Preguiça de postar sistemas.

Ah, sim. Esqueci desse lance mesmo!
Mas tem solução: você pode recortá-lo manualmente ou determinar uma variável para cada caractere onde o recorte deve começar exatamente onde fica o primeiro pixel da letra.

O código exato encontra-se no Evento Comum 0031: Draw Text, segundo comment, linha 38 (v1.1.0):
Picture[87].CopyRect(v[28],v[29],v[30]+100,((v[31]-33)%32)*9,((v[31]-33)/32)*14,((v[31]-33)%32)*9+9,((V[31]-33)/32)*14+14);

Opa, consegui. A única coisa é que fica meio bugado quando ele vai pular a linha automaticamente, mas eu não vou estressar a cabeça com isso uma vez que dê para configurar isso manualmente mesmo na hora de escrever as mensagens, já pulando a linha ali mesmo (fora que eu achei meio estranho esse sistema de primeiro escrever a palavra e depois pular a linha).
Do mais, valeu cara!
Preguiça de postar sistemas.

Incrível mesmo, o que se pode fazer com o Destiny Patch... essa coisa deu vida nova ao Rm2k,  parabéns pelo belo sistema.  :clap: