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. 💙