O que são Variáveis?

Em Twine, variáveis são como “memórias” da história: guardam informações sobre o que o jogador fez, escolheu ou possui. Com elas você pode criar histórias que se adaptam às decisões do jogador.

No formato Harlowe, variáveis começam sempre com $ (dólar).

Tipos de Variáveis

(set: $nome to "Maria")        /* string — texto */
(set: $vida to 100)            /* number — número */
(set: $temChave to false)      /* boolean — verdadeiro/falso */
(set: $inventario to (array:)) /* array — lista de itens */

Onde colocar o (set:)?

O comando (set:) pode ser posto no início de qualquer passage. O jogador não o vê — ele só executa silenciosamente quando o passage é visitado.

Exemplo Prático: O Quarto com Inventário

Passage: “Início”

(set: $temChave to false)
(set: $inventario to (array:))
(set: $visitouEscrivaninha to false)

Você acorda em um quarto misterioso.

[[Examinar a escrivaninha]]
[[Tentar abrir a porta]]

Passage: “Examinar a escrivaninha”

(set: $visitouEscrivaninha to true)

Sobre a escrivaninha há papéis espalhados e uma gaveta entreaberta.
Dentro da gaveta você encontra uma chave enferrujada.

(link: "Pegar a chave")[
  (set: $temChave to true)
  (set: $inventario to it + (array: "Chave enferrujada"))
  Você guarda a chave no bolso.
  [[Voltar ao centro do quarto]]
]

[[Ignorar a gaveta → Voltar ao centro do quarto]]

O que é 'it'?

Em Harlowe, it se refere ao valor atual da variável que está sendo modificada. $inventario to it + (array: "Chave") adiciona “Chave” ao array existente.

Passage: “Tentar abrir a porta”

Aqui usamos uma condição para verificar se o jogador tem a chave:

(if: $temChave is true)[
  Você usa a chave enferrujada na fechadura. Com um clique, a porta se abre!
  [[Entrar no corredor]]
](else:)[
  A porta está trancada. Você precisa encontrar uma chave.
  
  (if: $visitouEscrivaninha is false)[
    Talvez valha a pena examinar os móveis do quarto...
  ]
  
  [[Voltar e procurar]]
]

Exibindo o Inventário

Crie um passage chamado "Inventário" para mostrar os itens:

## Seus Itens

(if: (count: $inventario) is 0)[
  Seu inventário está vazio.
](else:)[
  (for: each _item, ...$inventario)[
    • (_item)
  ]
]

[[← Voltar]]

Macros Úteis do Harlowe

Macro Função Exemplo
(set:) Define variável (set: $x to 5)
(if:)(else:) Condição (if: $x > 3)[...]
(link:) Link inline com efeito (link: "Clique")[...]
(print:) Exibe valor (print: $nome)
(count:) Conta itens em array (count: $inv)
(for:) Loop em array (for: each _i, ...$arr)[...]
(append:) Insere conteúdo na página (append: ?inventario)[item]
(replace:) Substitui conteúdo (replace: ?status)[novo]

Variáveis Numéricas: Sistema de Pontos

(set: $pontos to 0)

/* Em outros passages: */
(set: $pontos to it + 10)   /* adicionar pontos */
(set: $pontos to it - 5)    /* subtrair pontos  */

/* Exibir pontos: */
Pontuação: (print: $pontos) pts

/* Condição com número: */
(if: $pontos >= 50)[
  Você desbloqueou o final secreto!
  [[Final Secreto]]
](else:)[
  Continue explorando para ganhar mais pontos.
]

Atenção às aspas

Em Harlowe, strings (textos) usam aspas duplas "assim". Variáveis numéricas não usam aspas: (set: $vida to 100) — não "100".

Desafio Prático

Expanda a história do Tutorial 1 adicionando:

  1. Uma variável $nomePersonagem definida no passage inicial
  2. Um sistema de 3 itens coletáveis
  3. Um final diferente dependendo de quantos itens foram coletados

No próximo tutorial, veremos como usar CSS e imagens para estilizar visualmente suas histórias Twine.

Próximos Passos