Olá! Bem-vindos ao WorldWeaver. Nosso objetivo é ajudar autores a escreverem histórias interativas usando um dialeto simples. Você pode criar direto na plataforma sem precisar de banco ou escrever no Word/Bloco de Notas e colar aqui: a linguagem é interpretada do texto puro.
Um único texto contendo a história e, ao final, o catálogo de entidades.
@world tavern
:: inicio
Texto da cena…
@world ruinas
:: entrada
Outra cena…
@entities
character Helm:
apelido: "Helm"
name: "Willahelm"
descricao: "Caçador taciturno."
@endentities
Use apenas letras, números, _ e - em IDs (mundos, passagens, entidades).
Agrupa passagens (capítulos/mapas). Sem @world, o motor usa um mundo padrão.
@world tavern
:: inicio
Você está na taverna.
@world ruinas
:: entrada
Eco frio nas fendas.
Cada cena navegável começa com :: nome. A primeira costuma ser :: inicio.
:: sala
A sala é ampla e iluminada.
Escreva normalmente. Linha em branco cria um novo parágrafo.
Chovia quando você entrou.
O cheiro de pão recém-assado veio da cozinha.
Insira dados do catálogo no meio do texto.
@ID usa a ordem de exibição do tema (padrão: apelido → name → nome)@ID/campo força um campo específico@ID?campo1|campo2 usa o primeiro campo disponível dessa ordem@Helm ajusta a capa.
@Helm/apelido observa você.
@Helm?apelido|name sorri.
Mostra um botão que leva a outra passagem. Pode ter condição com if:.
[[Olhar ao redor -> sala]]
[[Abrir com a chave -> ruinas/entrada | if: tem_chave]]
Para trocar de mundo, use mundo/passagem.
Cria um menu e salva a escolha numa variável.
<<choice Bebida as Bebida1>>
- Cerveja
- Vinho do Mar Recurvo
<</choice>>
<<if Bebida1 == "Vinho do Mar Recurvo">>
O aroma é doce.
<<else>>
A espuma amarga reconforta.
<</if>>
O player pausa a renderização na primeira interação (choice/link/input). O restante aparece depois da ação.
<<set energia = 10>>
<<set nome = "Ky">>
Você tem {{energia}} de energia, {{nome}}.
Tipos: booleano (true/false), número, string entre aspas, ou copiar de outra variável.
<<goto sala>>
<<goto ruinas/entrada>>
Mostra/oculta trechos, menus e saltos.
<<if tem_chave>>
A fechadura gira com um clique.
<<else>>
Sem a chave, o portão não cede.
<</if>>
Não há elseif nativo. Emule com if dentro do else, ou use condições combinadas.
Coleta um valor digitado pelo leitor e salva numa variável. Aceita placeholder, required, min, max e pattern.
<<input "Como você quer se chamar?" as nome placeholder:"Digite seu nome" required min:1 max:30 pattern:"^[A-Za-zÀ-ÿ\\s'-]+$">>
Prazer em te conhecer, {{nome}}.
Ficha de personagens, lugares, itens etc. (usados pelas referências @ID no texto).
@entities
character Helm:
name: "Willahelm"
apelido: "Helm"
descricao: "Caçador taciturno de Monte Dourado."
place MonteDourado:
nome: "Monte Dourado"
clima: "chuvoso"
@endentities
Use mundo/passagem no destino do link ou do <<goto>>.
@world tavern
:: inicio
[[Ir às ruínas -> ruinas/entrada]]
@world ruinas
:: entrada
[[Voltar à taverna -> tavern/inicio]]
Disponível para links com | if: e para <<if ...>>.
<<set tem_chave = true>>
<<set bebida = "Vinho">>
<<set sigilo = false>>
[[Abrir -> sala | if: tem_chave and (sigilo or bebida == "Vinho")]]
[[Bater -> beco | if: not tem_chave or bebida == "Cerveja"]]
<<if tem_chave and not (bebida == "Cerveja")>>
A fechadura gira e o aroma do vinho acompanha você.
<<else>>
Você hesita na porta.
<</if>>
Comparação de string sempre com aspas: var == "texto".
"Se molhou muito?"
<<choice Molhado? as Var_Molhado1>>
- Pouco
- Mais ou menos
- Bastante
<</choice>>
<<if Var_Molhado1 == "Bastante">><<goto toalhas>><</if>>
<<if Var_Molhado1 == "Pouco" or Var_Molhado1 == "Mais ou menos">><<goto entrada>><</if>>
[[Mercado -> cidade/mercado]]
[[Portão Leste -> cidade/portao | if: tem_chave]]
Escolha: {{Var_Molhado1}}
Chave? {{tem_chave}}
Lembre: a primeira interação na tela (choice/link/input) pausa o restante da passagem nesta etapa.
{{nome_da_variavel}}.<<choice>> e compare com elas.WorldWeaver é um projeto sem fins lucrativos. O foco é autonomia do autor: seu texto é o seu arquivo. 💙