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, usarei a letra da música "Monte Castelo", da banda "Legião Urbana", uma das bandas que mais gosto e que muitos conhecem.
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: Selecionar todos
Estrofes = 8;
Dialogo = 0;
Frase = 1;
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: Selecionar todos
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."
Código: Selecionar todos
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."
Veja como deve ficar a música toda:
Código: Selecionar todos
///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"
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: Selecionar todos
///Desenha a frase na tela.
draw_set_font(fnt_ascii);
draw_text(16,16,Texto[Dialogo,Frase]);
Precisamos montar um sistema para navegar entre as frases da estrofe. Algo como isso, no step:
Código: Selecionar todos
if keyboard_check_pressed(vk_space){
if (Frase < Texto[Dialogo,0]){ //REPARE!
Frase += 1; //Avança para a próxima frase do dialogo.
}
}
Execute. Agora, sempre que você apertar espaço, a frase vai trocar... Mas espere.. Por que não está indo a música toda?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[...]
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: Selecionar todos
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.
}
}
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!
Flws...