Muitos recursos já conhecemos interagindo no Twine com as seis postagens anteriores que fizemos sobre ele.
Agora chega o momento de automatizar algumas coisas, criar recursos mais elaborados e dar aquela cara de game para sua história.
Vamos conhecer hoje os recursos de macros, variáveis, operadores aritméticos e atribuição. Após apresentá-los, vou usar um exemplo prático que fará um resumão do que vimos.
Vem comigo.
Macros no Twine
Macros são pedaços de código que você tem como objetivo final inserir algo em uma passagem. Pode ser uma mensagem, valor de variável, armazenar valores, pegar entradas de dados dos jogadores e outros recursos.
Vamos usar ao longo desses tutoriais diversos tipos. Aqui, vou explicar aqueles que usaremos nessa etapa, mas sempre deixarei claro nos outros o uso deles. Eles estarão sempre dentro dos símbolos de menor (<<) e maior (>>).
Exemplo: <<print “Oi”>>
Nesse exemplo, a mensagem “Oi” será impressa no trecho da história que ela for aplicado.
Dentro da documentação, a seção que trata esse assunto segue: Macro.
Vejamos os básicos que usaremos:
- print: imprime no trecho aplicado o texto ou valor de variável. Sintaxe: <<print (VALOR)>>;
- display: imprime uma passagem inteira onde for usado. Sintaxe: <<display (NOME DA PASSAGEM)>>;
- set: atribui um valor a uma variável.
Vou usar um display aqui para vocês verem o uso imediato de um.
Primeiro, vamos ter uma visão geral da pequena história. Perceba que deixei a passagem “frutas_verduras” avulsa ali. Ela só servirá para eu pegar o texto dela e jogar na passagem da história. Por isso não tem ligações, ok?
Por falar no conteúdo da passagem avulsa “frutas_verduras”, digitei ali o texto que depois vou querer emendar lá nas histórias:
Agora, escrevi o ponto da história inicial (start). Perceba que também usei a macro <<print >> para exibir na tela a pergunta. Não precisava, mas para mostrar uso da macro.
Outra observação é o uso de display na passagem, referenciando o texto que está na outra passagem chamada “frutas_verduras”.
Agora fiz as passagens de resposta “Sim” e “Não”. Isso tem como fazer com uma passagem apenas, usando a macro <<if>>, mas depois a veremos com calma. 😉
Veja o resultado final. Ele pegou o texto da passagem “frutas_verduras” e adicionou onde foi referenciado com a macro display.
Legal, né? Vamos poder reaproveitar passagens e não precisar ficar reescrevendo ou criando novas. E isso é só o começo.
Variáveis e Declaração no Twine
Variáveis, o nome já diz, são para armazenamento de valores que variam conforme a sua interação com a história/jogo. Guardar pontuação, quantidade dinheiro, vidas, qual porta ele escolheu, se está aberta ou fechada etc.
O uso delas no Twine é semelhante a sintaxe do PHP. Ela deve começar com $, cuidar com maiúsculas e minúsculas (case sensitive), não usar palavras reservadas, ponto, traços (só underline pode) e espaços.
Exemplo de usos corretos e incorretos abaixo e você os encontra também na documentação do Twine.
Operadores Aritméticos, Atribuição e Concatenação
Operadores vão nos ajudar a fazer comparações de resultados, contas, concatenar mensagens de texto e outros.
Na documentação, a seção respectiva é Expression. Mas tem uns erros nos exemplos ali que vou corrigir aqui.
Seguem os operadores aritméticos do Twine:
Uma nota é que o + pode ser usado para concatenar strings. Um exemplo:
<<print “Fabiano” + ‘ Naspolini’ + “ de ” + “Oliveira”>>
O resultado final forma “Fabiano Naspolini de Oliveira”. Poderia ser um texto dentro de uma variável ali também:
<< print “Você tem “ + $dinheiro + “ de grana para usar.”>>
No lugar de $dinheiro, apareceria o valor armazenado nessa variável.
Os operadores de comparação e lógicos passarei em outro momento, quando começarmos a ver condições na macro <<if>>.
Quanto às atribuições em variáveis, podemos usar o <<set>> ou <<remember>>. A diferença é que o primeiro vai guardar o valor enquanto a história/jogo estiver em execução. Já o <<remember>>, ele guarda permanentemente.
Também há o <<forget>> para esquecer o valor da variável. É o contrário do remember.
Sintaxe de uso deles:
<<set (VARIÁVEL) to (VALOR)>>
<<remember (VARIÁVEL)>>
<<forget (VARIÁVEL)>>
Também pode se usar o set da seguinte forma.
Para uma variável:
<<set (VARIÁVEL) (OPERADOR) (VALOR)>>
Para mais de uma variável:
<<set (VARIÁVEL 1) (OPERADOR) (VALOR 1); (VARIÁVEL2) (OPERADOR) (VALOR 2)>>
Na documentação, seguem detalhes sobre set, mas também a respeito de remember e forget.
Usaremos, no exemplo prático, mais o set.
Exemplo Prático: A Escolha de Portas
Primeiramente, vou criar uma história que ele precisa escolher portas. Cada uma terá uma função diferente:
- Porta 1: morre e perderá 1 vida a cada entrada nela;
- Porta 2: o dinheiro do jogador é dobrado cada vez que entrar;
- Porta 3: ganha uma chave a cada vez que entrar.
Com macro condicional, fica bem fácil isso e apenas uma passagem para as três portas. Mas, como não vimos o recurso, vou fazer separando cada passagem para cada porta. Retomaremos esse exemplo quando o assunto for condicional.
Primeiramente, nossa visão global da história:
Primeiramente, vou usar a primeira passagem como inicialização de variáveis. Defini chaves como 0, vidas como 3 e dinheiro com 100.
Depois, chega a parte de escolha das portas. Perceba que fiz um HUD ali para mostrar atualmente como vai ficando cada variável.
Em seguida, redigi cada porta o que acontecia e as operações que nela ocorreriam.
Veja o resultado final. Na foto, a situação é a seguinte:
- 1 vez entrei na Porta 1;
- 2 vezes entrei na Porta 2; e
- 1 vez entrei na Porta 3.
Legal, né? Já teve ideias de como criar recursos bacanas para jogos? Vamos ver muito mais ainda.
Desafio para o Próximo Tutorial
Dois desafios para vocês:
Como não deixar espaços em branco quando se usa macros. Perceba que, ao aplicar uma macro que não imprime nada na história (set, por exemplo), fica uma linha ali em branco na passagem onde ela foi usada. Como tirar isso?
- Tente fazer com que os status de dinheiro, vida e chaves (funcionam como HUD) apareçam sempre em todas as passagens, usando o conceito de macro display e não copiar/colar em cada passagem o código ali escrito para isso.
Fechou? Respostas no próximo tutorial. Essas soluções se encontram em uma das documentações Twine que citei nessa parte.
Aprendemos nessa etapa o conceito de macros e usamos algumas já em nossas histórias/jogos. Também já vimos o conceito de variável, seu uso e aplicações. Basta fazer uma atribuição e ela já existirá em sua história/jogo. Por último, estudamos os operadores aritméticos e de concatenação de strings.
O exemplo prático dá uma noção bem legal de uso de todos os conceitos vistos aqui.
No próximo tutorial, vamos explorar as macros condicionais como <<if>> e operadores de comparação e lógicos.
Abraços e até mais. 🙂