GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Retorno da GMBR!!!
por vinians Qui 14 Mar 2024, 19:07

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16

» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05

» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55

» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39

» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28

» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01


Tutorial: Diálogo e Banco de Frases

3 participantes

Ir para baixo

Tutorial: Diálogo e Banco de Frases Empty Tutorial: Diálogo e Banco de Frases

Mensagem por Willy Qui 24 Abr 2014, 00:35

Tutorial: Diálogo e Banco de Frases

Quem já viu a engine Movimento Limpo, viu que eu criei um sistema de diálogo entre o NPC e o jogador. Apesar do foco da engine ser outro, algumas pessoas gostaram do sistema mas não entenderam muito por estar pouco comentado e com nomes de variáveis pouco intuitivos, sem falar na tremenda gambiarra que foi feito ali. Atendendo a pedidos, por fim, estou a disponibilizar para vocês um tutorial especifico para esclarecer como o sistema foi feito e como se deve usar. O tutorial não tratará de formatação alguma, apenas da lógica do sistema, ou seja, a forma de executar o sistema fica exclusivamente por sua conta. Sem mais, vamos começar!

Dificuldade: Fácil - Necessário entender Arrays 2D
Plataforma: Todas

Para usarmos de exemplo, usasrei a letra da música "Monte Castelo", da banda "Legião Urbana", uma das bandas que mais gosto e que muitos conhecem.

Monte Castelo - Legião Urbana:
Esta música será uma conversa qualquer entre o NPC e o jogador. O NPC só falará uma estrofe inteira linha por linha por vez , ou seja, se quisermos saber a música toda, deveremos falar com o NPC várias vezes.

Certo, isso já é o suficiente, agora podemos partir para a programação. Crie um objeto qualquer, declararemos três variáveis em um creation code no evento create:

Código:
Estrofes = 8;
Dialogo = 0;
Frase = 1;

Estrofes representa a quantidade de diálogos que o NPC tem, Diálogo representa a estrofe, e Frase a linha da estrofe.
Essas duas ultimas variáveis serão nossas guias, e são elas que decidirão qual frase deverá ser mostrado na tela.
Nota: O valor de Estofes é a quantidade total de estrofes que o NPC tem, portanto, pode variar para qualquer valor. As outras duas variáveis devem ter obrigatoriamente aqueles valores. Mais adiante você saberá o porquê.

Ainda no create, crie um outro creation code abaixo deste anterior (ou se preferir, pode ser no mesmo creation code). Este será o nosso banco de frases! Nosso banco terá apenas Arrays 2D para armazenar as frases na ordem que elas deverão aparecer. Chamaremos essa array de Texto. A primeira dimensão representa o Dialogo que a frase pertence, e a segunda dimensão, a frase do dialogo. Ou seja: Texto[Dialogo, Frase];
Pegando a primeira estrofe, o texto deveria ficar assim:

Código:
Texto[0,0] = "Ainda que eu falasse a língua dos homens"
Texto[0,1] = "e falasse a língua dos anjos, sem amor eu nada seria."

A principio, está correto. Mas, precisaremos adicionar mais uma array:

Código:
Texto[0,0] = 2;
Texto[0,1] = "Ainda que eu falasse a língua dos homens"
Texto[0,2] = "e falasse a língua dos anjos, sem amor eu nada seria."

Para o sistema funcionar, todo Texto[Dialogo,0] deverá ter um numero (real, e não string) que representa a quantidade de frases que a estrofe tem, que neste caso, é 2.

Veja como deve ficar a música toda:

Código:
///Banco de Diálogos
Texto[0,0] = 2;
Texto[0,1] = "Ainda que eu falasse a língua dos homens"
Texto[0,2] = "e falasse a língua dos anjos, sem amor eu nada seria."

Texto[1,0] = 4;
Texto[1,1] = "É só o amor, é só o amor;"
Texto[1,2] = "Que conhece o que é verdade;"
Texto[1,3] = "O amor é bom, não quer o mal;"
Texto[1,4] = "Não sente inveja ou se envaidece."

Texto[2,0] = 4;
Texto[2,1] = "O amor é o fogo que arde sem se ver;"
Texto[2,2] = "É ferida que dói e não se sente;"
Texto[2,3] = "É um contentamento descontente;"
Texto[2,4] = "É dor que desatina sem doer."

Texto[3,0] = 2;
Texto[3,1] = "Ainda que eu falasse a língua dos homens"
Texto[3,2] = "e falasse a língua dos anjos, sem amor eu nada seria."

Texto[4,0] = 4;
Texto[4,1] = "É um não querer mais que bem querer;"
Texto[4,2] = "É solitário andar por entre a gente;"
Texto[4,3] = "É um não contentar-se de contente;"
Texto[4,4] = "É cuidar que se ganha em se perder;"

Texto[5,0] = 4;
Texto[5,1] = "É um estar-se preso por vontade;"
Texto[5,2] = "É servir a quem vence, o vencedor;"
Texto[5,3] = "É um ter com quem nos mata a lealdade;"
Texto[5,4] = "Tão contrario a si é o mesmo amor."

Texto[6,0] = 2;
Texto[6,1] = "Estou acordado e todos dormem todos dormem, todos dormem;"
Texto[6,2] = "Agora vejo em parte, mas então veremos face a face."

Texto[7,0] = 2;
Texto[7,1] = "É só o amor, é só o amor;"
Texto[7,2] = "Que conhece o que é verdade."

Texto[8,0] = 2;
Texto[8,1] = "Ainda que eu falasse a língua dos homens"
Texto[8,2] = "e falasse a língua dos anjos, sem amor eu nada seria"

Repare que a primeira estrofe é representada por "0". Isso justifica o motivo da variável "Dialogo" começar valendo 0. Repare também que em todas as estrofes, a primeira frase é representada sempre em Texto[Dialogo,1], o que justifica o motivo de "Frase" começar valendo 1. 

Nosso banco de frases já está pronto! Agora, tudo que precisamos fazer é criar um sistema para "navegarmos" por estas frases, vendo em prática como tudo funciona! Mas primeiro, crie uma nova fonte e configure-a para ASCII para que todos os caracteres possam ser desenhados (chamarei de fnt_ascii). Depois, defina a fonte e mande desenhar a frase no evento Draw da seguinte forma:

Código:
///Desenha a frase na tela.
draw_set_font(fnt_ascii);
draw_text(16,16,Texto[Dialogo,Frase]);

Coloque o objeto na room e execute o projeto. Veja que legal, a primeira frase está na tela! Mas, e agora?
Precisamos montar um sistema para navegar entre as frases da estrofe. Algo como isso, no step:

Código:
if keyboard_check_pressed(vk_space){
    if (Frase < Texto[Dialogo,0]){ //REPARE!
        Frase += 1; //Avança para a próxima frase do dialogo.
    }
}
Repare! Estou comparando "Frase" com o valor de Texto[Dialogo,0], dessa forma impedimos que o navegador vá para uma frase que não existe! Foi por esse motivo que eu disse:

Willy escreveu:Para o sistema funcionar, todo Texto[Dialogo,0] deverá ter um numero (real, e não string) que representa a quantidade de frases que a estrofe tem[...]

Execute. Agora, sempre que você apertar espaço, a frase vai trocar... Mas espere.. Por que não está indo a música toda?
Porque ainda não configuramos para trocar de dialogo (estrofe) quando as frases acabarem! Portanto, devemos adicionar um else para quando as frases acabarem, ficando da seguinte forma:

Código:
if keyboard_check_pressed(vk_space){
    if (Frase < Texto[Dialogo,0]){
        Frase += 1;
    }else if (Dialogo < Estrofes){
        Frase = 1; //Volta para a primeira frase.
        Dialogo += 1; //Avança pro próximo diálogo. 
    }
}

Execute e veja. Agora sim, todo o texto está sendo mostrado.
Este sistema nada mais é do que bolar uma forma inteligente de navegar por entre as frases. Se você quiser fazer uma quest, por exemplo, poderá querer colocar condições para avançar de estrofe, como por exemplo, ter coletado 20 moedas como pagamento para uma informação. Use a criatividade e muita lógica!

Isto encerra nosso tutorial! Espero que tenham gostado.
Dúvidas, críticas ou sugestões são bem-vindas! 

Download Exemplo.gmz

Flws... blz
Willy
Willy

Games Ranking : Nota A

Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Reputação : 264
Número de Mensagens : 1890
Prêmios : Tutorial: Diálogo e Banco de Frases Empty

Medalhas x 0 Tutoriais x 2 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://willy-gmbr.blogspot.com/

JnickU gosta desta mensagem

Ir para o topo Ir para baixo

Tutorial: Diálogo e Banco de Frases Empty Re: Tutorial: Diálogo e Banco de Frases

Mensagem por G_STF Qui 24 Abr 2014, 09:17

Estive a testar e deu certinho, depois eu tentei fazer com que só
fosse possível surgir o diálogo ao chegar perto de um outro objeto.
Então para isso coloquei na colisão com o objeto o código:
Código:

if keyboard_check_pressed(vk_space){
    if (Frase < Texto[Dialogo,0]){
        Frase += 1;
    }else if (Dialogo < Estrofes){
        Frase = 1; //Volta para a primeira frase.
        Dialogo += 1; //Avança pro próximo diálogo.
    }
}

Pelo que só quando estaria ao pé desse objeto seria possível mudar de frase,
a questão é como faço para a frase iniçial apareçer apenas quando chego ao pé do outro objeto e clico no space??

O tutorial está bom e bem explicado.
G_STF
G_STF

Games Ranking : Nota C

Notas recebidas : C+C
Data de inscrição : 11/03/2014
Reputação : 3
Número de Mensagens : 46
Prêmios : Tutorial: Diálogo e Banco de Frases Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Tutorial: Diálogo e Banco de Frases Empty Re: Tutorial: Diálogo e Banco de Frases

Mensagem por Willy Qui 24 Abr 2014, 18:04

Bom, vou ressaltar alguns pontos:

1 - Sempre que for iniciar um diálogo, lembre-se sempre de definir "Frase" como 1. Isso serve para que o personagem "pegue a conversa do começo".
2 - O código presente no step não é o foco do tutorial, trata-se apenas de um exemplo de como navegar por entre as arrays. Foi apenas um modo de demonstrar como faz para percorrer frase por frase de um diálogo (primeiro if) e como se faz para trocar o diálogo quando o anterior acabou (segundo if), portanto, esse esquema não serve para uma conversa normal. Imagine que o jogador encontra uma quest. A primeira conversa, o NPC fala seu problema e pergunta se o jogador quer ajudar. Se o jogador aceitar, ele parte para a 2ª conversa na qual ele tem que buscar uma quantidade de itens. Se o jogador voltar com todos os itens, o NPC vai para a 3ª conversa em que ele agradece e dá um premio ao jogador, caso contrário, ele diz os itens que faltam (4ª conversa). Se o jogador já tiver completado a quest e recebido seu premio, se ele falar com o NPC, ele agradecerá novamente (5ª conversa). Perceba que para esse NPC você teria que criar uma serie de condições para saber qual é a conversa ideal para a situação.

Bom, referente a sua pergunta... Você deve checar se o personagem está colidindo com o outro para poder liberar a conversa, caso contrário, não fala nada e Frase volta a ser 1 (para que quando ele for voltar a falar com ele, comece tudo de novo). Pelo o que você disse, essa seria a logica correta, entretanto, não sei se entendi muito bem sua pergunta.
Willy
Willy

Games Ranking : Nota A

Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Reputação : 264
Número de Mensagens : 1890
Prêmios : Tutorial: Diálogo e Banco de Frases Empty

Medalhas x 0 Tutoriais x 2 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://willy-gmbr.blogspot.com/

Ir para o topo Ir para baixo

Tutorial: Diálogo e Banco de Frases Empty Re: Tutorial: Diálogo e Banco de Frases

Mensagem por fredcobain Sáb 03 maio 2014, 23:27

Tuto muito bem escrito, organizado, identado e ainda com engine.
Nada que não fosse esperado dada a reputação do autor.
Movendo para aprovados.
fredcobain
fredcobain

Games Ranking : Sem avaliações

Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios : Tutorial: Diálogo e Banco de Frases Empty

Medalhas x 0 Tutoriais x 3 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Tutorial: Diálogo e Banco de Frases Empty Re: Tutorial: Diálogo e Banco de Frases

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos