Confira nesta página o manual com a documentação completa sobre a criação de novos jogos. Você também vai encontrar exemplos e uma FAQ com as dúvidas frequentes.
Baixe os arquivos do jogo “A Masmorra dos Exemplos” e confira em detalhes como a aventura foi montada. É um bom ponto de partida para você planejar a sua!
Adição de novos tempos verbais a todos os verbos do jogo. Agora é possível utilizar comandos como “ABRA a PORTA”, “USE a CHAVE”, “EXAMINE o ARMÁRIO”, “VÁ para NORTE”, ao invés de apenas “ABRIR PORTA”, “USAR CHAVE”, “EXAMINAR ARMÁRIO”, “IR NORTE”.
O jogo é composto apenas de arquivos no formato JSON, PNG (ou JPG/GIF) e MP3 (ou MP4/M4A/OGG). Os arquivos JSON utilizam uma estrutura de atributo/valor totalmente legível e de fácil interpretação. Uma vez que você compreenda a lógica de funcionamento dos arquivos do jogo, é possível criar aventuras sem a necessidade do conhecimento de linguagens de programação avançadas. A estrutura é dividida em 5 categorias:
Arquivo de configuração: dados-do-jogo.json
É um arquivo único que estabelece todas os parâmetros funcionais do jogo.
Arquivo de itens: items.json
É um arquivo único que traz todos os itens do jogo.
Arquivos de salas: estudio.json, antesala.json, masmorra.json
É um grupo de arquivos que traz todo o conteúdo das salas/local do jogo.
Arquivos de imagem de itens: espada.png, escudo.png, livro.png
É um grupo de arquivo de ilustrações referentes a cada item do jogo. Seu uso é opcional.
Arquivos de imagens de salas: estudio.png, antesala.png, masmorra.png
É um grupo de ilustrações referentes a cada sala/local do jogo. Seu uso é opcional.
Arquivos de áudio: vento-soprando.mp3, grito.mp3, latido.mp3
É um grupo de arquivos de música ou efeitos especiais utilizados em cada sala/local da aventura.
Dentro do arquivo estrutura-do-jogo.json é obrigatória a configuração dos parâmetros funcionais do jogo. São eles:
{
“setup” : {
“PASTA_DO_JOGO” : “masmorra-dos-exemplos”,
“NOME_DO_JOGO” : “A Masmorra dos Exemplos”,
“SLOGAN_DO_JOGO” : “Jogo demonstrativo de funcionalidades”,
“AUTOR_DO_JOGO” : “Cospefogo”,
“HISTORIA_DO_JOGO” : “Você acordou em uma masmorra. Não lembra quem é. Não sabe como foi parar ali. A única coisa que consegue pensar é em encontrar uma saída. Boa sorte!”,
“HISTORIA_DO_JOGO_IMAGEM” : “historia.png”,
“LOGO_DO_JOGO_IMAGEM” : “logo.png”,
“DICAS_DO_AUTOR” : “Experimente acender a tocha antes de atravessar a sala escura! Ainda: aparentemente o prisioneiro tem fome e sede!”,
“DICAS_DO_AUTOR_MENSAGEM” : “Não sabe mais o que fazer?”
},
“funcionamento” : {
“MAXIMO_NO_INVENTARIO” : 3,
“MODO_SOMENTE_TEXTO” : false,
“MENSAGEM_DE_NOVO_JOGADOR” : “Digite {OLÁ} para criar seu perfil.”,
“MENSAGEM_DE_COMANDO” : “e agora?”,
“EXIBIR_NOME_JOGADOR” : true,
“EXIBIR_SAIDAS_OBVIAS” : true,
“DESTACAR_TERMOS_NO_TEXTO” : true,
“SEPARAR_CONTEUDOS_NO_TEXTO” : 2,
“SEPARAR_CONTEUDOS_ICONE” : false,
“EXIBIR_PREFIXOS_VERBAIS” : true,
“SEMPRE_EXIBIR_IMAGEM_DE_ITEM“: true
},
“visual“: {
“TEMA_VISUAL” : 8,
“FONTE” : 1,
“CAIXA_ALTA_GERAL” : false,
“CAIXA_ALTA_NOS_TERMOS” : true,
“SCANLINES” : true,
“CARET_EM_BLOCO” : true,
“BOTAO_DE_AJUDA” : true
}
}
PASTA_DO_JOGO
Pasta/diretório que figura no URL do jogo:
jogostexto.com.br/aventuras/PASTA_DO_JOGO/
NOME_DO_JOGO
TEXTO: Informe o título do jogo
SLOGAN_DO_JOGO
TEXTO: Informe um slogan/subtítulo do jogo
AUTOR_DO_JOGO
TEXTO: Informe o nome do autor
HISTORIA_DO_JOGO
FALSE ou TEXTO: Informe a história (texto contínuo). Para destacar palavras, escreva entre chaves: {palavra}
HISTORIA_DO_JOGO_IMAGEM
FALSE ou TRUE: Caso verdadeiro busca uma imagem ‘historia.png’, caso falso exibe a imagem ‘titulo.png’
LOGO_DO_JOGO_IMAGEM
FALSE ou TRUE ou IMAGEM.PNG: Caso TRUE exibe o logo padrão do projeto JogosTexto. Caso seja informado um nome de arquivo, irá exibir a imagem referente e caso falso exibe o nome do jogo e o slogan em formato texto tradicional.
DICAS_DO_AUTOR
FALSE ou TEXTO: Informe dicas de jogo (texto contínuo). Para destacar palavras, escreva entre chaves: {palavra}
DICAS_DO_AUTOR_MENSAGEM
FALSE ou TEXTO: Mensagem que precede a exibição das dicas. Para destacar palavras, escreva entre chaves: {palavra}
MAXIMO_NO_INVENTARIO
NUMERAL: Número máximo de itens que o jogador pode carregar. Mínimo: 1 item
MODO_SOMENTE_TEXTO : FALSE ou TRUE: Jogo com ou sem imagens
MENSAGEM_DE_NOVO_JOGADOR
TEXTO: Mensagem que precede o comando na criação de perfil de jogador
MENSAGEM_DE_COMANDO
TEXTO: Mensagem que sucede o título de comando
EXIBIR_NOME_JOGADOR
FALSE ou TRUE: Se exibe ou não o nome do jogador no título de comando
EXIBIR_SAIDAS_OBVIAS
FALSE ou TRUE: Se exibe ou não um resumo automático com as saídas de cada sala
DESTACAR_TERMOS_NO_TEXTO
FALSE ou TRUE: Se destaca ou não palavras marcadas com chaves {palavra} e nomes de itens.
SEPARAR_CONTEUDOS_NO_TEXTO
FALSE ou 1, 2, 3: Explicação abaixo:
false : Sem espaços, modelo literário texto contínuo.
1 : Somente quebra de linha, sem parágrafo.
2 : Com quebra de linha e parágrafo.
3 : Com quebra de linha, parágrafo e legenda indicativa.
SEPARAR_CONTEUDOS_ICONE
FALSE ou TRUE: Ícone visial de bullet nos blocos separados, quando ativo (1, 2 ou 3 acima)
EXIBIR_PREFIXOS_VERBAIS
FALSE ou TRUE: Se exibe ou não um prefixo automático (seguido da mensagem personalizada) ao executar alguns verbos. Por exemplo: PEGOU ITEM, LIGOU ITEM, COMEU ITEM, LEU ITEM.
SEMPRE_EXIBIR_IMAGEM_DE_ITEM
FALSE ou TRUE: Se exibe obrigatoriamente a imagem de um item (se existir) em todas as ações verbais ou se exibe APENAS ao OLHAR e EXAMINAR.
TEMA_VISUAL
NUMERAL: Número indicador do tema visual
1 : cyberpunk: com margens,
2 : pergaminho: com margens,
3 : marinho: com margens,
4 : floresta: com margens,
5 : carmim: com margens,
6 : negativo: sem margens,
7 : fosforo: sem margens,
8 : ciano: sem margens,
9 : vermelho: sem margens,
10 : papel: sem margens,
FONTE
NUMERAL: Número indicador da fonte/tipografia
1 : volter,
2 : nokia,
3 : zx-spectrum,
4 : Reactor 7,
5 : ChronoType,
6 : SteelFight,
7 : LucidaSans,
CAIXA_ALTA_GERAL
FALSE ou TRUE: Se exibe todos os textos da interface em letras sempre maiúsculas
CAIXA_ALTA_NOS_TERMOS
FALSE ou TRUE: Se exibe caixa alta nos termos do jogo (palavras escritas entre chaves {palavra} e títulos de itens)
SCANLINES
FALSE ou TRUE: Se exibe efeito visual de monitor de tudo antigo
CARET_EM_BLOCO
FALSE ou TRUE: Se exibe o tipo de cursor estilo terminal bancário na linha de comando
BOTAO_DE_AJUDA
FALSE ou TRUE: Se exibe um botão na interface que abre a ajuda com clique de mouse (a ajuda também pode ser aberta digitando o comando AJUDA)
ITENS:JSON
{
“chave“: {
“article” : “a”,
“title” : “Pequena chave metálica”,
“room” : “estudio”,
“look” : “Muito pequena. Não serve para abrir portas.”,
“image” : “chave.png”,
“image2” : “chave-abrindo-escrivaninha.png”,
“required” : “examinou_poltrona”,
“message” : “É realmente leve e pequena.”,
“excuse” : “Não vejo isso aqui.”,
“usage” : “Parece uma chave de algum mobiliário de escritório.”,
“verb” : “usar”,
“goal” : “estudio”,
“bingo” : “Pronto! Você destrancou a tampa da escrivaninha!”,
“discard” : “Você descarta a chave pois a mesma não tem mais uso.”,
“setAction” : “usou_chave”,
“setObject” : “mapa”,
“setCounter” : “cantil@1”,
“resetCounter” : “cantil”,
“max” : “5”,
“limit” : “O cantil está seco. Você não pode mais beber.”,
“dec” : “score@5”,
“inc” : “score@5”,
“placeVerb“: “examinar”,
“placeObject“: “chave”,
“updateVerb“: “mover”,
“updateRoomImage” : “estudio-com-passagem-secreta.png”,
“updateRoomDesc” : “O estúdio agora tem uma passagem secreta aberta.”,
“resetRoom” : “estudio”,
“setEquip” : “bolso-da-calça”
}
}
article: (Obrigatório) — Artigo/gênero do item, usado nas descrições. Ex: Pegou A chave, largou O elmo
room: (Obrigatório) — Sala inicial onde o item pode ser encontrado
look: (Obrigatório) — Descrição principal do item
message: (Obrigatório) — Mensagem exibida ao pegar (Quando com REQUIRED, exibida APÓS DE CUMPRIR a restrição)
title: — Nome bonito do item exibido nas descrições ao olhar quando em janela popup
image: — Imagem principal do item
♦ Caso inexistente, exibe interação em retorno em modo APENAS TEXTO
required: — Restrição que precisa ser cumprida para PEGAR o item (e item de inventário só pode ser USADO se for PEGADO anteriormente)
excuse: — Mensagem exibida ao pegar ANTES CUMPRIR a restrição (Uso somente em conjunto com REQUIRED)
verb: — Se usável, é o VERBO DE INTERAÇÃO. Ex: COMER o PÃO, ABRIR a GAVETA, MOVER a ALAVANCA
goal: — Sala onde o VERBO definido acima pode ser EXECUTADO
bingo: — Mensagem de sucesso ao interagir com SUCESSO usando o verbo definido
discard: — Exibe uma mensagem de descarte PERMANENTE de item após INTERAGIR com sucesso
♦ Caso existente, APAGA o item para sempre do JOGO, mas permanece como informação (-1) dentro do motor. Ex: BEBER CERVEJA
♦ Caso não setada, o item CONTINUA no inventário (1) e pode ser usado de novo. Ex: OLHAR MAPA
usage: — Dica de uso ao EXAMINAR o objeto ou ao tentar INTERAGIR com o objeto usando VERBO ERRADO.
♦ Quando EXAMINANDO, este texto é um adendo ao texto geral
image2: — Imagem a ser exibida ao olhar o item APÓS interação verbal
♦ Caso existente e caso o item não tenha sido descartado, essa passa a ser a imagem principal do item em interações futuras
♦ Caso inexistente, utiliza a imagem original
inc: — Incrementa pontos na variável definida. Ex: score@1, score@10, felicidade@5, medo-de-escuro@1, etc
dec: — Decrementa pontos no variável definida. Ex: score@1, envenenamento@10, etc
setAction: — Seta uma ação AO PEGAR o item como TRUE no perfil do jogador.
♦ Só acontece uma vez. Ex: “sabe-sobre-a-chave = 1”
♦ SetAction só funciona com PEGAR. Outros verbos não utilizam, pois, ao executá-los, uma action automática é criada. Ex: abriu_arca, usou_computador, moveu_alavanca
setObject: — Adiciona, ao PEGAR ITEM A, um segundo ITEM B no inventário do jogador.
♦ Ex: chave = estudio (estava na sala estúdio) fica chave = 1 (passa para o inventário do jogador)
♦ OBRIGATÓRIO setar um ITEM existente em ITEMS.JSON
♦ Também pode ser usado para REVERTER o estado descartado de um item (-1) de volta para (1)
♦ CUIDADO para extrapolar o limite de itens no inventário
setCounter: — Cria uma entrada com a contagem de USO de itens. Ideal para simular durabilidade de um objeto, carga de energia, quantidade de uso, etc
♦ Formato igual às ações INC e DEC. Ex: lanterna@1, comida@1, poção@1
♦ OBRIGATÓRIO combinar com MAX, que determina o número máximo de usos
♦ Funciona somente em ITEM de inventário no verbo USAR e NÃO FUNCIONA COM a ação OLHAR (Olhar/examinar não incrementa a contagem de interação)
max: — Número máximo de vezes que determinado item pode sofrer interação verbal. Usar um número inteiro.
limit: — Mensagem permanente exibida após limite ser atingido. Sobrescreve a mensagem padrão de OLHAR (look).
♦ NÃO USAR com DISCARD — Item esgotado nunca é descartado
♦ Pode-se deixar o item operacional novamente com SETCOUNTER. Ex: Encher o cantil numa fonte com — setCounter : cantil@0 (retorna o cantil para 0 usos, reiniciar o contador do cantil)
resetCounter: — Reseta uma caontagem de USO de item iniciada previamente. Ex: “resetCounter : cantil“.
placeVerb: — Valor obrigatório que informa o verbo a ser usado na função de inserção de um item automaticamente na sala, listada abaixo.
placeObject: — Insere um item na SALA CORRENTE após a execução de uma ação com o VERBO informado acima.
updateVerb: — Valor obrigatório que informa o verbo a ser usado nas funções de update abaixo.
updateRoomImage: — Cria uma entrada no sistema com uma nova imagem para a ONDE É USADO.
♦ Ex. Se a sala ONDE o ITEM É USADO era “estudio.png“, usando “updateRoomImage : estudio-revirado.png” faz a sala usar essa nova imagem como aparência padrão, ou até ser resetado através de “ResetRoom“.
updateRoomDesc: — Cria uma entrada no sistema com uma nova descrição para a sala ONDE É USADO.
♦ Ex. Se a sala ONDE o ITEM É USADO era “estudio.png“, usando “updateRoomDesc” faz a sala usar o novo texto descritivo permanentemente, ou até ser resetado através de “ResetRoom“.
resetRoom: — É possível resetar uma sala alvo a seus valores padrões utilizando “resetRoom: estudio”
setEquip: — É possível setar o local em que o ITEM será EQUIPADO. Isso previne do usuário equipar coisas duplicadas, ex: 2 elmos, 2 botas, etc.
♦ setEquip : peito (Acesse os exemplos abaixo para conferir o funcionamento)
♦ setEquip : bolso-da-calca, setEquip : cabeca, setEquip : apetrecho-de-defesa
ESTUDIO.JSON
{
“info“: {
“name“: “estudio”,
“image“: “estudio.png”,
“description“: “Você está no confortável estúdio do Professor Lagarto.___Há uma escada na parede leste.___Você vê etc etc etc”,
“music“: false
},
“data“: {
“exits“: {
“norte“: “vestibulo”,
“escada“: {
“required“: “!medo-de-fantasma”,
“target“: “sotao”,
“else“: “sotao-com-fantasmas”
},
“descer“: {
“required“: [“elmo”, “espada”],
“target“: “porao”,
“excuse“: “É perigoso descer sem armas. Procure por uma espada e um elmo!”
},
“alcova“: {
“hidden“: true,
“target“: “sala-secreta”
},
“voltar“: “sala-inicial”
}
},
“olhar“: {
“tapete“: “Um antigo tapete persa”,
“quadro“: {
“article“: “o”,
“title“: “Quadro na parede”,
“image“: “quadro.png”,
“message“: “Um enorme quadro com moldura grossa. Contém uma pintura chinesa, óleo em tela.”
},
“mesa“: {
“article“: “a”,
“title“: “Mesa de estudo com tampa”,
“image“: “mesa-com-tampa-fechada.png”,
“image2“: “mesa-com-tampa-aberta.png”,
“required“: “usou_chave”,
“message“: “É uma simples mesa de estudos. Foi aberta com uma pequena chave de metal.”,
“excuse“: “É uma simples mesa de estudos. Está trancada.”
},
“poltrona“: {
“article“: “a”,
“title“: “Poltrona de veludo”,
“image“: “poltrona-com-chave-no-assento.png”,
“image2“: “poltrona-sem-chave-no-assento.png”,
“required“: “!poltrona_investigada”,
“message“: “É uma simples poltrona de veludo azul. Alguém deixou cair uma pequena [CHAVE] de metal entre o encosto e o assento.”,
“excuse“: “É uma simples poltrona de veludo azul. Foi aqui onde você encontrou uma pequena chave de metal.”,
“setAction“: “poltrona_investigada”,
“placeVerb“: “olhar”,
“placeObject“: “chave”,
“inc“: “score@1”
}
},
“examinar“: {
“parede” : {
“article“: “a”,
“title“: “Parede”,
“message“: “Esta repleta de musgo. Parece sempre úmida.”,
“gone“: “Está sempre molhada.”
}
},
“usar“: {
“sino“: “O sino faz bóng!”,
“bandeira“: {
“article“: “o”,
“title“: “Bandeira branca”,
“message“: “Você desenrola e é uma bandeira da paz.”,
“gone“: “A bandeira tremula aberta em suas mãos.”,
“updateVerb“: “usar”,
“updateRoomDesc“: “Aqui vai um novo texto de descrição na sala, sobrescrevendo o texto original.”,
},
“computador“: {
“article“: “o”,
“title“: “PC-88”,
“image“: “pc.png”,
“message“: “Você acessa o Gmail”,
“bingo“: “Não há mais necessidade de utilizar o PC. Você já encontrou o que procurava.”,
“setAction“: “leu_email”,
“updateVerb“: “usar”,
“updateRoomImage“: “nova-imagem-da-sala.png”,
“inc“: “score@10”
}
},
“falar“: {
“silvana“: {
“article“: “a”,
“title“: “Silvana”,
“1“: “Primeira mensagem”,
“2“: “Segunda mensagem”,
“3“: “Agora a terceira mensagem”,
“4“: “Última mensagem, não tenho mais nada a dizer…”,
“rand“: false,
“loop“: true,
“inc“: “score@1”
},
“marines“: {
“article“: “a”,
“title“: “Marinês”,
“1“: “Primeira mensagem”,
“2“: “Segunda mensagem”,
“3“: “Agora a terceira mensagem”,
“4“: “Última mensagem, não tenho mais nada a dizer…”,
“rand“: true,
“setAction“: “falou_com_marines”
},
“velho“: {
“article“: “o”,
“title“: “Velhote”,
“image“: “velho-corcunda.png”,
“required“: “livro“,
“excuse“: “Cade o livro?”,
“1“: “Obrigado pelo livro!”,
“2“: “Eu sou um velho velho.”,
“3“: “Eu sou um guri velho.”,
“4“: “Eu não tenho mais nada a dizer.”,
“loop“: false
},
“jovem“: {
“article“: “o”,
“title“: “Jovem mudo”
}
},
“abrir“: {
…
},
“fechar“: {
…
},
“mover“: {
…
},
“empurrar“: {
…
},
“puxar“: {
…
},
“ligar“: {
…
},
“desligar“: {
…
},
“amarrar“: {
…
},
“desamarrar“: {
…
},
“ouvir“: {
…
},
“ler“: {
…
},
“comer“: {
…
},
“beber“: {
…
},
“synonyms“: {
“tapete“: [“tapete persa”, “capacho”],
“quadro“: [“obra de arte”, “pintura”],
“mesa“: [“mesinha”, “escrivaninha”, “lousa”],
“poltrona“: [“sofá”, “sofa”]
}
}
Na descrição de texto da sala é possível criar espaço entre parágrafos usando 3 símbolos de underscore juntos, em sequência. Exemplo:
Meu texto, meu texto, meu lindo texto.___Meu parágrafo novo, onde continua meu texto.
Formato simples:
direção: (Obrigatório) — Sala destino da saída, precisa usar verbos de navegação válidos (e não sinônimos!)
♦ Sinônimos servem para acessar a saída, mas no json precisa ser o verbo
Formato com saída alternativa:
required: (Obrigatório) — Restrição a ser cumprida para poder utilizar a saída
target: (Obrigatório) — Sala destino
else: (Obrigatório) — Sala destino caso não cumpra o restrição => Não usar com EXCUSE!
Formato com excuse:
required: (Obrigatório) — Restrição a ser cumprida para poder utilizar a saída
target: (Obrigatório) — Sala destino
excuse: (Obrigatório) — Mensagem de bloqueio de caminho caso não cumpra o restrição
♦ Não usar com ELSE!
Formato simples:
nome-do-objeto: (Obrigatório) — Descrição do ato verbal
♦ “cadeira” : “A cadeira faz um ruído ao ser movida.”
♦ “sanduíche” : “Está uma delicia, aplaca levemente a sua fome.”
Formato array:
article: Obrigatório Artigo/gênero do objeto, usado nas descrições. Ex: Usou O Computador, Abriu A porta
title: — Nome bonito do item exibido em algumas descrições
image: — Imagem principal do objeto
image2: — Imagem a ser exibida ao olhar o item APÓS interação com o objeto
required: — Restrição a ser cumprida para interagir com o objeto
message: Obrigatório Mensagem exibida ao interagir com o objeto ANTES DE CUMPRIR a restrição
♦ Quando sem REQUIRED, mensagem padrão ao interagir, como no formato simples)
excuse: — Mensagem exibida ao interagir com o objeto APÓS CUMPRIR a restrição
♦ Uso somente em conjunto com REQUIRED)
firstuse: — Mensagem a ser exibibida uma única vez na PRIMEIRA INTERAÇÃO com o item (não tem relação com OLHAR)
gone: — Mensagem a ser exibida permanentemente APÓS a INTERAÇÃO com o ITEM (não tem relação com OLHAR)
inc: — Incrementa pontos no score
dec: — Decrementa pontos no score
setAction: — Seta uma ação interagir com o objeto como TRUE no perfil do jogador. Ex: “sabe_sobre_a_chave = 1” (Só acontece uma vez)
setObject: — Seta um segundo objeto interagir com o objeto no inventário do jogador.
♦ Ex: chave = estúdio (estava na sala estúdio) fica chave = 1 (passa para o inventário do jogador)
♦ CUIDADO para não setar um ITEM não existente em ITEMS.JSON
♦ CUIDADO para extrapolar o limite de itens no inventário
placeVerb — Verbo responsável por executar a inserção como item disponível da sala
♦ Obrigatório informar para que a função de placeObject abaixo tenha efeito
placeObject — Deposita um ITEM existente na lista geral no chão da SALA CORRENTE
♦ Ideal para quando examina algo e encontra uma coisa escondida
♦ Funciona somente com qualquer verbo menos EQUIPAR, DESEQUIPAR e LARGAR
updateVerb — Verbo responsável por executar o update na imagem e texto da sala
♦ Obrigatório informar para que as funções de update abaixo tenha efeito
updateRoomImage — Atualiza a imagem geral da sala com o novo valor setado
♦ Pode-se usar em qualquer verbo dentro da sala e item do inventário
updateRoomDesc — Atualiza a descrição geral da sala com o novo valor setado
♦ Pode-se usar em qualquer verbo dentro da sala e item do inventário
Formato de diálogo linear:
article: (Obrigatório) — Artigo/gênero do personagem
title: — Nome bonito do item exibido nas descrições ao olhar quando em janela popup
image: — Imagem principal do personagem
image2: — Imagem a ser exibida ao olhar o item APÓS conversar com o personagem E CUMPRIR algum requerimento
1: — Primeira frase de diálogo: “Você é novo por aqui?”,
2: — Segunda frase de diálogo: “Quer comer uma pizza?”,
3: — Terceira frase de diálogo: “Ou prefere comer um pastel?”,
required: — Restrição a ser cumprida para FALAR com o personagem
message: (Obrigatório) — Mensagem exibida ao FALAR com o personagem ANTES DE CUMPRIR a restrição
Quando sem REQUIRED, mensagem padrão ao falar, como no formato simples
excuse: — Mensagem exibida ao FALAR com o personagem APÓS CUMPRIR a restrição
Uso somente em conjunto com REQUIRED
Formato de diálogos com looping e aleatórios
Com o uso de parâmetros rand e loop é possível apresentar modelos diferentes de conversação.
rand: false — As mensagens seguem uma ordem aleatória
loop: true — As mensagens recomeçam do início após terem sido esgotadas
O comando ABRIR ARCA também pode ser atingido com o sinônimo BAÚ.
“synonyms“: {
“tapete“: [“capacho“, “carpete“],
“arca“: “baú“,
“computador“: [“laptop“, “aparelho“],
“sofa“: [“poltrona“, “divã“]
}
Os tipos de saídas disponíveis para uso nas salas são listados abaixo. O jogador pode acessar essas saídas pelo termo principal ou por sinônimos, conforme abaixo:
n — norte
s — sul
l — leste
o — oeste
baixo — descer, abaixo, inferior
dentro — entrar, interno, adentrar, interior
fora — sair, externo, exterior
janela — janelão, janelao, janelinha, báscula, bascula
porta — porta, portão, portao, portinhola, umbral
corredor — caminho, tunel, túnel, acesso
escada — degrau, degraus, escadas
buraco — abertura, alçapão, escotilha, rachadura, brecha, fenda, fissura, ranhura
sala — saleta, quarto, aposento, câmara, câmera, camera, cela, camara, galeria, salão, salao, gabinete, estudio, estúdio
voltar — volta, retornar, retroceder, regressar
continuar — continua, prosseguir, avançar
passagem — secreto, escondido, esconderijo
sim — ok, aceito, aceitar, concordo, concordar
não — nao, recuso, recusar, discordo, discordar
Algumas formas de navegação (e outros verbos) aceitam partículas conectoras ao digitar:
n = norte = ir norte = ir para norte = ir ao norte
subir = acima = ir escada = ir para escada = ir acima
passagem = ir passagem = ir para passagem
pegar espada = pegar a espada
ler livro = ler o livro = ler este livro
As partículas conectoras são ignoradas pois tem apenas função estética voltada à digitação do jogador.
Dica: a saída/caminho com o termo VOLTAR fica visualmente mais interessante se inserida no final da lista de saídas da sala. Ao escrever o comando X (ou caminhos) é exibida uma lista de saídas possíveis e — esta lista — é construída na ordem em que o array de saídas está formulado no arquivo da sala.
Cada sala pode ter vários verbos disponíveis para interação com seus OBJETOS. Já os ITENS tem verbos específicos que só funcionam com eles. Ao criar uma objeto que pode ser movido em uma sala, deve-se utilizar o parâmetro MOVER. Lembre-se que, o mesmo item também pode ser OLHADO ou EXAMINADO. Também é necessário criar suas respectivas entradas.
“olhar“: {
“article“: “a”,
“title“: “Alavanca de metal”,
“message“: “Uma alavanca de metal.”
},
“examinar“: {
“article“: “a”,
“title“: “Alavanca de metal”,
“message“: “Está presa em um mecanismo da parede e pode ser movida.”
},
“mover“: {
“article“: “a”,
“title“: “Alavanca de metal”,
“message“: “Você move a alavanca e um som distante é ouvido.”,
“gone“: “A alavanca não se movimenta mais.”,
“setAction“: “abriu_passagem_secreta”
},
olhar
examinar
ler
usar
falar
abrir
fechar
mover
puxar
empurrar
ligar
desligar
amarrar
desamarrar
ouvir
comer
beber
atacar
O verbo de interação é definido com o parâmetro “verb” : “verbo-de-interação” em cada item no arquivo ITEMS.JSON. Exemplo: a lanterna pode ser usável com o valor “verb” : “usar“. O sanduíche pode ser consumido com “verb” : “comer“. Qualquer interação que não diferente do verbo compatível especificado irá retornar uma resposta negativa.
usar
ler
dar
equipar
desequipar
abrir
fechar
comer
beber
Já os verbos de adição e remoção de itens do inventário são inerentes (automáticos) à sala, não requerem nenhum tipo de configuração.
pegar
largar
Sinônimos:
Todos os verbos interativos também operam com sinônimos. Use sua criatividade na hora em que estiver jogando. Exemplo:
FALAR: conversar, dialogar, etc
LIGAR: acender, ativar, etc
COMER: ingerir, devorar, etc
LER: estudar, decifrar, etc
DAR: doar, entregar, ofertar, etc
O parâmetro REQUIRED é utilizado para checar uma restrição a determinada ação do jogo, podendo ser utilizado conforme a tabela abaixo. É válido tanto para itens quanto para salas:
“required” : “lanterna” — Item no inventário ou item existe
“required” : “!lanterna” — Sem item e sem ação
“required” : “#lanterna@5” — Variável “lanterna” com 5 pontos ou mais
“required” : “-lanterna” — Item pegado e obrigatóriamente largado
“required” : “-lanterna@room” — Item obrigatoriamente largado na sala X
“required” : “+lanterna” — Item pegado (estando ainda no inventário ou largado em qualquer sala)
Uma boa dica é usar REQUIRED + setAction. Por exemplo:
♦ Uma poltrona que possui uma chave escondida nela.
♦ Ao examinar a primeira vez, descreve a poltrona com “message” e dá um setAction : poltrona_investigada.
♦ Ao examinar a segunda vez, verifica a existência de poltrona_invetigada no perfil do jogador e nesse momento apresenta outra descrição com excuse mencionando “… foi aqui onde você encontrou uma chave.”
A imagens ilustrativas da sala são opcionais. Para efeito retrô com mais ênfase, sugere-se desenhar em baixa resolução e com poucas cores. Na tela de jogo a imagem final é exibida em 540×180 pixels, porém, se provida com menores dimensões, ela será escalonada. Quando usada com scanlines, o resultado será um interessante efeito de tela de computador antigo. No lado direito da imagem de jogo é possível usar um logo quadrado. Pode ser um símbolo da aventura, uma bússola, um logotipo, ou até uma imagem referente ao jogo! Use sua criatividade.
135 x 40 pixels (Ampliado 4X na tela de jogo)
270 x 90 pixels (Ampliado 2X na tela)
540 x 180 pixels (Exibido em tamanho real na tela desktop)
45 x 45 pixels (Ampliado 4X na tela de jogo)
90 x 90 pixels (Ampliado 2X na tela)
180 x 180 pixels (Exibido em tamanho real na tela desktop)
Os finais de jogo são compostos de entradas variáveis. O jogo pode ter múltiplos finais, pois os mesmos são atrelados à salas JSON. Uma sala com uma armadilha mortal pode ter um final ruim, enquando uma sala com a saída do labirinto pode ter um final bom. OS dados de final são atrelados ao grupo DATA do JSON, local onde ficam os caminhos de saída da sala. O final é executado (ouvindo ou não o requerimento) no momento que o usuário acessa a sala.
Também é possível ter finais múltiplos em uma MESMA sala, bastando colocar as entradas de requerimento em formato decrescente, maiores em cima, menores embaixo.
Exemplo:
FINAL.JSON
{
“info“: {
“name“: “final”,
},
“data“: {
“ends“: {
“melhor-final“: {
“required“: [“coroa”, “tesouro”, “score@1000”],
“image“: “final-excelente.png”,
“title“: “Parabéns!”,
“text“: “Você encontrou os tesouros e fez 1000 pontos! É melhor final!”,
“showscore“: “score”,
“showmoves“: “moves”,
“showerrors“: “errors”
},
“final-ok“: {
“required“: “score@500“,
“image“: “final-mais-ou-menos.png”,
“title“: “Ok…”,
“text“: “Você terminou o jogo, mas não encontrou os tesouros!”,
“showscore“: “score”,
“showmoves“: “moves”,
“showerrors“: “errors”
},
“final-ruim“: {
“title“: “Que fiasco…”,
“image“: “final-ruim.png”,
“text“: “Você não conseguiu fazer nada direito no jogo!”,
“showscore“: “score”,
“showmoves“: “moves”,
“showerrors“: “errors”
}
}
}
}
♦ SEMPRE LEMBRAR DE SETAR O ARTICLE: “o” ou “a”
♦ SEMPRE LEMBRAR DE SETAR O TITLE!
♦ Verificar se OBJ ou ITM possuem todos os KEY => VAL em seus ARRAYS
♦ Se faltar um único KEY => VAL obrigatório nada mais funciona
♦ Objetos sem LOOK
♦ Verificar a construção do JSON, não podem haver VÍRGULAS perdidas
As saídas das sala ficam no grupo DATA : EXITS.
SAÍDAS em uma SALA.JSON:
“exits“: {
“subir“: “sotao“,
“descer“: “porao“,
“alcova“: “sala-secreta“,
“norte“: “caminho-na-floresta“
}
“exits“: {
“descer“: {
“required“: [“lanterna”, “corda”],
“target“: “subterraneo“,
“excuse“: “É perigoso descer sem uma lanterna e uma corda. Encontre esses utensílios primeiro!“
},
“subir“: {
“required“: “!medo_de_fantasma“, // Com ! na frente significa que NÃO PODE POSSUIR a action setada (ver tabela de usos com required)
“target“: “sotao“,
“excuse“: “Enquanto você tiver medo de fantasmas, não pode subir ao sótão!“
},
“subir“: {
“hidden“: true // Esconde a exibição desta saída quando o jogador digita “x” ou “caminhos” para ver a lista de saídas
“target“: “sala-secreta“
},
“norte“: {
“required“: “facao“,
“target“: “caminho-na-floresta-aberto“,
“else“: “caminho-na-floresta-bloqueado“
}
}
Um antigo livro escrito em idioma estranho.
Requer os itens LUPA e DICIONARIO, no formato array.
OBJETO em uma SALA.JSON:
“tomo“: {
“article“: “o“,
“title“: “Tomo antigo“,
“message“: “O tomo revela segredos incríveis! Agora você pode terminar o jogo.“,
“required“: [“lupa”, “dicionario”],
“excuse“: “Um tomo antigo. A escrita é minúscula e num idioma estranho. Seria interessante uma lupa e um dicionário…“
}
Exemplo 1:
Uma nota que, ao ser examinada, revela um segredo.
Usa “setAction” para gravar uma única ação.
OBJETO em uma SALA.JSON:
“nota“: {
“article“: “a“,
“title“: “Nota secreta“,
“message“: “A nota foi escrita à mão. Ela mostra a combinação do cofre.“,
“setAction“: “sabe_combinacao_cofre“
}
Uma nota que, ao ser examinada, revela 3 segredos.
Usa “setAction” para gravar um array de ações.
“nota“: {
“article“: “a“,
“title“: “Nota secreta“,
“message“: “A nota foi escrita à mão. Ela mostra: a combinação do cofre, o local da chave, o caminho de saída.“,
“setAction“: [“sabe_combinacao_cofre”, “sabe_local_chave”, “sabe_caminho_saida”]
}
Nota: Sempre que EXAM qualquer objeto ou item, adiciona uma action “examinou_item || examinou_objeto” no perfil do jogador.
Um tapete que, ao ser examinado, revela uma espada escondida embaixo dele.
Usa “placeObject” para automaticamente deixar a espada largada na sala após o tapete ser examinado.
Caso tenha a action EXAMINOU_TAPETE (“examinou_coisa” é criado automaticamente ao “EXAM COISA” ou “OLHAR COISA”)
mostra uma mensagem de “havia uma espada aqui”. Se é a primeira vez que examina, mostra uma mensagem de
“há uma espada aqui” e usando “placeObject” coloca a espada disponível para ser pegada na sala.
OBJETO em uma SALA.JSON:
“tapete“: {
“article“: “o“,
“title“: “Tapete persa“,
“required“: “!examinou_tapete“,
“message“: “Um tapete persa. Embaixo dele há uma espada otomana.“,
“excuse“: “Um tapete persa. Foi onde você encontrou uma espada otomana.“,
“placeVerb“: “examinar“,
“placeObject“: “espada“
}
Nota: Sempre que EXAM qualquer objeto ou item, adiciona uma action “examinou_item || examinou_objeto” no perfil do jogador.
Importante: a condição para o PLACEOBJECT funcionar deve-se sempre informar qual é o VERBO de interação que vai ativá-la.
Uma pequena mesa com uma CHAVE sobre ela, que, ao ser examinada, insere automaticamente nas coisas do jogador.
Usa “setObject” para inserir no INVENTÁRIO.
OBJETO em uma SALA.JSON:
“mesinha“: {
“article“: “a“,
“image“: “mesa-com-chave-em-cima.png“,
“image2“: “mesa-sem-chave-em-cima.png“,
“required“: “examinou_mesa“,
“message“: “Uma pequena mesa de centro, sem nada em cima. Foi onde você encontrou uma CHAVE.“,
“excuse“: “Uma pequena mesa de centro com uma chave em cima. Finalmente você encontrou a chave! Você pega a CHAVE e coloca em suas coisas.“,
“setObject“: “chave“
}
Nota: importante observar que o item a ser inserido automaticamente no inventário do jogador PRECISA EXISTIR no arquivo de ITEMS.JSON.
Pode-se fazer a imagem geral e a descrição da sala mudar através do parâmetro “updateRoomImage” e “updateRoomDesc”.
Importante: os updates são EXECUTADOS SOMENTE 1 VEZ.
Se trabalhado com required, só são executados quando a ação cumprir a restrição.
“olhar“: {
“quadro“: {
“article“: “o“,
“image“: “quadro.png“,
“message“: “O quadro possui um mapa com a localização da saída pintado nele.“,
“setAction“: “descobriu_a_saida“,
“updateVerb“: “olhar“,
“updateRoomImage“: “sala-com-o-mapa-no-quadro.png“,
“updateRoomDesc“: “Novo texto descritivo da sala, nova descrição, mudanças, etc.“
}
}
“abrir“: {
“cortina“: {
“article“: “a“,
“image“: “cortina.png“,
“message“: “Agora a sala está muito mais iluminada.“,
“setAction“: “descobriu_a_saida“,
“updateVerb“: “abrir“,
“updateRoomImage“: “sala-iluminada.png“,
“updateRoomDesc“: “Novo texto descritivo da sala, nova descrição, mudanças, etc.“
}
}
“bomba“: {
“article“: “a“,
“title“: “Bomba“,
“room“: “sala“,
“message“: “Você pega a BOMBA.“,
“verb“: “usar“,
“bingo“: “Você explode a bomba perto da parede. Uma passagem se abre!“,
“discard“: “A bomba não existe mais.“,
“updateVerb“: “usar“,
“updateRoomImage“: “sala-com-buraco-na-parede.png“,
“updateRoomDesc“: “Novo texto descritivo da sala, nova descrição, mudanças, etc.“
}
Pode ser usado em qualquer objeto em qualquer sala.
Ao ser interagido restaura a imagem e descrição de um sala modificada aos valores iniciais.
“mover“: {
“alavanca“: {
“article“: “a“,
“message“: “Um som é ouvido ao longe.“,
“gone“: “Agora a alavanca está presa. Não se move mais.“,
“resetRoom“: “estudio“
}
}
É possível interagir com objetos da sala usando vários verbos.
Cada interação é vinculada a seu verbo.
“usar“: {
“fonte“: {
“article“: “a“,
“title“: “Fonte Ijuí“,
“image“: “fonte.png“,
“firstuse“: “Nossa! Posso encher meu cantil aqui!“, // Mensagem exibida uma única vez no primeiro uso
“message“: “Você enche seu cantil.” // Mensagem exibida subsequentemente
“gone“: “Puxa vida, a fonte secou.” // Mensagem de encerramento. Aparece caso setada. Serve para encerrar uma interação em um contexto informativo
}
}
No caso se usar com “setCounter”, “gone” (se existente) será ignorado em favor da mensagem “limit”.
Logo, “gone” não precisa ser setado em OBJETOS de SALA que tenham contador de interações.
“usar“: {
“pc“: {
“article“: “o“,
“title“: “NEC PC-88“,
“image“: “pc.png“,
“firstuse“: “Nossa! Um PC cheio de jogos.“, // Mensagem exibida uma única vez no primeiro uso
“message“: “Você joga um adventure em modo texto.” // Mensagem exibida subsequentemente
“setCounter“: “computador@1“, // Incrementa 1 uso no PC
“max“: “3“, // Máximo de 3 usos no PC
“limit“: “Acabaram os jogos.” // Alcançou o limite
}
}
“mover“: {
“estante” : {
“article“: “a“,
“title“: “Estante com caixas“,
“image“: “estante.png“,
“message“: “Uma passagem secreta se revela atrás dela.“, // O sistema adiciona { Você moveu a estante. } como sufixo.
“gone“: “Há um escuro túnel atrás da estante.” // Mensagem permanente no caso de haver outra tentativa de movimento
}
}
Alguns verbos não interagem com o inventário, como no caso, MOVER, PUXAR, EMPURRAR e ESCUTAR.
Estes verbos operam somente a nível de SALA.
Um cantil com 5 goles generosos dágua. Ao chegar no limite, exibe mensagem de cantil vazio. Não permite mais usar.
Usa “setCounter” para incrementar o número de usos com “cantil@1”.
Usa “max” parar estabelecer o limite máximo de usos.
Usa “limit” para exibir uma mensagem quando chegar no máximo.
Usa “verb” como “usar” para designar o verbo de interação com o item (poderia ser BEBER, COMER, ETC).
Se o contador de usos está sendo considerado, automaticamente o sistema informa o número de usos restantes após cada interação em um bloco de sufixo na descricão.
Se está sendo usado, o sistema exibe a mensagem de BINGO (sucesso de uso) e mais dois blocos adicionais informativos.
Ao OLHAR/EXAMINAR (não contabiliza usos, apenas informa):
Um cantil de couro que armazena água fresca. { Você pode usar por X vezes || Você ainda pode usar por mais X vezes || Você não pode mais usar isto. }
Ao USAR (contabiliza usos):
{ Você usou o CANTIL. } Aah! Que gole delicioso para aplacar sua sede. { Você ainda pode usar por mais X vezes, || Você não pode mais usar isto. }
Como o item tem “image2”, ele exibe essa imagem a cada uso (e também quando o limite é atingido).
ITEM em ITEMS.JSON:
“cantil“: {
“article“: “o“,
“title“: “Cantil“,
“room“: “estudio“,
“image“: “cantil-cheio.jpg“,
“image2“: “cantil-seco.jpg“,
“verb“: “usar“,
“look“: “Um cantil de couro que armazena água fresca.“,
“message“: “Você pega o CANTIL.“,
“bingo“: “Aah! Que gole delicioso para aplacar sua sede.“,
“setCounter“:”cantil@1“,
“max“: “5“,
“limit“: “Acabou a água!“
}
Se adicionar “setAction” combinado com “setCounter” o funcionamento é independente.
“setCounter” funciona somente com os verbos de uso (USAR, MOVER, ABRIR, etc).
“setAction” funciona em todos os verbos.
Ao OLHAR/EXAMINAR:
Um cantil de couro que armazena água fresca. { Você pode usar por X vezes || Você ainda pode usar por mais X vezes || Você não pode mais usar isto. }
Ao USAR:
{ Você usou o CANTIL. } Aah! Que gole delicioso para aplacar sua sede. { Você ainda pode usar por mais X vezes, || Você não pode mais usar isto. }
Como o item tem “image2”, ele exibe essa imagem a cada uso (e também quando o limite é atingido).
ITEM em ITEMS.JSON:
“cantil“: {
“article“: “o“,
“title“: “Cantil“,
“room“: “estudio“,
“image“: “cantil-cheio.jpg“,
“image2“: “cantil-seco.jpg“,
“verb“: “usar“,
“look“: “Um cantil de couro que armazena água fresca.“,
“message“: “Você pega o CANTIL.“,
“bingo“: “Aah! Que gole delicioso para aplacar sua sede.“,
“setAction“: “descobriu_o_cantil“,
“setCounter“: “cantil@1“,
“max“: “5“,
“limit“: “Acabou a água!“
}
Nota: Sempre que USAR qualquer objeto ou item, adiciona uma action “usou_item || usou_objeto (comeu_item, moveu_objeto, etc)” no perfil do jogador.
Utilizando um objeto em uma sala com a entrada “resetCounter“, fazendo voltar ao valor zero a contagem do objeto especificado.
O número de RESETS (recargas) é infinito. Todas as vezes que o OBJETO for usado, reseta o contador do item.
O jogador pode encher seu CANTIL ao usar uma FONTE em alguma sala do jogo.
Ao usar o sistema adiciona na frente da mensagem informações padrão de { Você usa a FONTE. && Você usa a FONTE novamente. }
“fonte“: {
“article“: “a“,
“message“: “Seu cantil está cheio novamente.“,
“bingo“: “Pronto! Seu cantil está cheio mais uma vez…“,
“resetCounter“: “cantil“
}
O jogador pode recarregar seu REVOLVER ao usar um ITEM de caixa de MUNIÇÃO encontrada em alguma sala do jogo.
O número de RESETS (recargas) é único, 1 vez apenas.
Ao usar o sistema adiciona informações padrão:
{ Você usa a MUNIÇÃO. } Sua arma foi carregada. { Este item não tem mais uso. }
“munição“: {
“article“: “a“,
“title“: “Munição“,
“room“: “estudio“,
“image“: “municao-cheia.png“,
“image2“: “municao-vazia.png“,
“message“: “Você pega a MUNIÇÃO.“, // Mensagem exibida quando PEGAR a munição (pode disparar setAction, Inc, Dec apenas)
“verb“: “usar“,
“bingo“: “Sua arma foi carregada.“, // Mensagem exibida ao usar a munição
“discard“: “Este item não tem mais uso.“, // Mensagem de descarte, item é removido do jogo (Podendo retornar se feito uso de setObject: municao em outra situacao da aventura)
“resetCounter“: “livro“,
}
No exemplo abaixo, o jogador utiliza a ESTATUETA para abrir uma passagem secreta na sala “ALTAR.JSON”
“estatueta“: {
“article“: “a“,
“title“: “Estatueta“,
“room“: “hall“, // Sala onde se encontra no início do jogo
“goal“: “altar“, // Única sala do jogo onde o “VERB” setado vai funcionar
“verb“: “usar“, // Único verbo que funciona com o item
“image“: “estatueta.png“,
“message“: “Você a acomoda cuidadosamente em suas coisas.“, // Com o prefixo { Você pegou a estátua. } adicionado automaticamente.
“bingo“: “A estátua está fixada permanentemente no pedestal.“, // Mensagem permanente que é exibida depois do uso com sucesso
“fx“: “fx.mp3“, // Som que toca no uso
“updateVerb“: “usar“,
“updateRoomImage“: “laboratorio.png“, // Nova imagem permanente para a sala “ALTAR.JSON”
“updateRoomDesc“: “Novo texto texto texto texto texto texto.” // Nova descrição permanente para a sala “ALTAR.JSON”
}
Dois itens que são equipáveis, mas que NÃO DEVEM ser AMBOS EQUIPADOS AO MESMO TEMPO
“elmo“: {
“article“: “o“,
“title“: “Elmo mágico“,
“room“: “deposito“,
“image“: “elmo-magico.png“,
“message“: “Você pega o ELMO.“,
“verb“: “equipar“, // Verbo que deixa o item equipável
“bingo“: “Sua cabeça agora está protegida.“, // { Você equipou o ELMO. } + Mensagem exibida ao equipar o elmo
“setEquip“: “cabeça“
},
“capacete“: {
“article“: “o“,
“title“: “Capacete de eletrecista“,
“room“: “deposito“,
“image“: “capacete.png“,
“message“: “Você pega o CAPACETE.“,
“verb“: “equipar“, // Verbo que deixa o item equipável
“bingo“: “Sua cabeça agora está protegida da eletricidade.“, // { Você equipou o CAPACETE. } + Mensagem exibida ao equipar o elmo
“setEquip“: “cabeça“
}
Com ambos usando o parâmetro “setEquip” como “cabeça”, só será possível equipar um por vez.
O jogador pode desequipar um item usando o comando “desequipar item” (ou “remover item”) ou então LARGANDO o item na sala (desequipa automaticamente).
“espada“: {
“article“: “a“,
“title“: “Espada torta“,
“room“: “deposito“,
“image“: “espada.png“,
“message“: “Você pega a ESPADA.“,
“verb“: “equipar“, // Verbo que deixa o item equipável
“bingo“: “Seu ataque melhorou!“, // { Você equipou a ESPADA. } + Mensagem exibida ao equipar o elmo
“setEquip“: “mãos“
}
Já a espada pode ser equipada em conjunto com um dos outros dois elmos, pois ela está setada para ser usada nas “mãos”.
NOTA: o verbo EQUIPAR não considera GOAL, ou seja, uma sala “alvo” de uso, no caso, de equipar
Também não considera DISCARD.
Diálogo mais simples possível com um NPC.
“padeiro“:
“article“: “o“,
“title“: “Padeiro“,
“1“: “Meus pães são ótimos.” // O diálogo permanece encerrado nesta instância
}
Diálogo onde a conversa permanece fixa na última fala da lista estabelecida.
“padeiro“: {
“article“: “o“,
“title“: “Padeiro“,
“image“: “padeiro.png“,
“1“: “Meus pães são ótimos.“,
“2“: “Também são boas minhas cucas.“,
“3“: “Ah, mas a pizza, meu grande destaque.” // O diálogo permanece encerrado nesta instância
}
Pode-se também informar rand/loop = false || true:
“padeiro“: {
“article“: “o“,
“title“: “Padeiro“,
“image“: “padeiro.png“,
“1“: “Meus pães são ótimos.“,
“2“: “Também são boas minhas cucas.“,
“3“: “Ah, mas a pizza, meu grande destaque.“,
“4“: “Desculpe, não tenho mais nada a dizer!” // O diálogo permanece encerrado nesta instância
“rand“: “false”,
“loop“: “false”
}
O parâmetro loop faz a conversa permanecer em looping, retornando sempre à primeira mensagem e o parâmetro rand embaralha constantemente a ordem das falas do NPC.
No exemplo o mago requer que o jogador tenha dado um AMULETO em seu inventário. É necessário uma combinação de parâmetros. Configura-se o amuleto com verbo de interação como “DAR” que tem como alvo/goal a sala que está o mago, no caso, a biblioteca.
No arquivo da SALA.JSON onde se encontra o NPC Mago — como exemplo — BIBLIOTECA-DO-FEITICEIRO.JSON
“mago“: {
“article“: “o“,
“title“: “Mago“,
“image“: “mago-sem-amuleto.png“,
“image2“: “mago-com-amuleto.png“,
“required“: “deu_amuleto“, // Requerimento necessário
“excuse“: “Onde está meu amuleto? Preciso equipá-lo para recuperar meus poderes!“, // Diálogo de requerimento não cumprido
“1“: “Obrigado por devolver meu amuleto. Já está em meu pescoço. Estou forte de novo.“, // Requerimento cumprido, sucesso
“2“: “Como agradecimento, vou abrir a passagem da masmorra.“, // Requerimento cumprido, sucesso
“3“: “Não temos mais nada a conversar”, // Conversa termina aqui
“setAction“: [“mago_equipou_amuleto”, “mago_abriu_masmorra”]
}
No arquivo do ITEMS.JSON:
“amuleto“: {
“article“: “o“,
“title“: “Amuleto de ametista“,
“room“: “hospedaria“,
“look“: “É feito de ametista num tom verde brilhante.“,
“image“: “amuleto.png“,
“usage“: “Deve pertencer a algum feiticeiro. Talvez seja interessante devolver a ele.“,
“verb“: “dar“,
“goal“: “biblioteca-do-feiticeiro“,
“message“: “Você acomoda em seu inventário.“,
“discard“: “O feiticeiro imediatamente toma o amuleto em mãos e pendura em seu pescoço.“,
“inc“: “score@1“
}
No exemplo, depois de adquirir o ITEM requerido,
o velho fica bêbado (Usando setAction):
“velho“: {
“article“: “o“,
“title“: “Velhote“,
“image“: “velho.png“,
“required“: “deu_vinho“, // Requer cumprir alguma ação
“excuse“: “Estou com muita sede… Mas não quero água!“, // Diálogo exibid enquanto a ação não for cumprida
“1“: “Aaah, um Cabernet Sauvignon! Obrigado!“, // Diálogo 1 agradece por cumprir
“2“: “Que vinho delicioso, você acertou!“,
“3“: “Já bebi quase toda a garrafa…“,
“4“: “Acho que bebi demais… Hiccup!“, // O diálogo permanece encerrado nesta instância
“setAction“: “velho_ficou_bebado“,
“loop“: false // Não executa looping
},
Pode-se fazer exibir diálogos aleatórios após cumprir o requerimento:
“guarda“: {
“article“: “o“,
“title“: “Guarda-Belo“,
“image“: “guarda.png“,
“required“: “usou_ineta“, // Requer cumprir alguma ação
“excuse“: “Zzzzzz… Zzzzz… Ronc… Z….“, // Diálogo exibid enquanto a ação não for cumprida
“1“: “OHHH! Você me acordou com essa sineta!“, // Diálogo 1 agradece por cumprir
“2“: “Estava tão bom de dormir.“,
“3“: “Que sineta barulhenta essa sua!“,
“4“: “Continuo com sono!“, // O diálogo entra em looping e volta à instância 1
“setAction“: “acordou_guarda“,
“loop“: true // Não executa looping
},
Sempre que um item é usado, um prefixo automático é adicionado na mensagem de retorno. Por exemplo, ao LIGAR um COMPUTADOR, o retorno traz:
{ Você ligou o computador. } Seguido então da mensagem estabelecida como “message” no item ou objeto: “Está funcionando normalmente”.
Se desejar SUPRIMIR o prefixo automático (pode ser necessário em alguns contextos), basta indicar com o símbolo % no início da frase. Veja:
“tocha“: {
“article“: “a“,
“title“: “Tocha“,
“room“: “sala-escura“,
“look“: “É feita de madeira resistente e possui trapos embebidos em óleo inflamável em uma das extremidades.“,
“image“: “tocha.png“,
“image2“: “tocha-acesa.png“,
“usage“: “Você pode acendê-la com fogo.“,
“verb“: “ligar“,
“goal“: “sala-central“,
“message“: “Serve para iluminar ambientes e não é muito pesada.“,
“bingo“: “%A chama agora tremula fracamente.“,
“inc“: “score@1“
}
No modelo acima temos uma tocha que pode ser acesa em uma sala (sala-central) onde há uma fogueira. Para atear fogo ao objeto, usa-se, nos parâmetros do item, o verbo LIGAR (que responde por vários sinônimos como ativar, acender, etc). Como o prefixo automático trabalha com o retorno { Você LIGOU a TOCHA. } (inerente ao verbo principal e não a seus sinônimos) torna-se interessante o uso do % para suprimir tal informação.
Depois de entrar com o comando — ACENDER TOCHA — o jogador receberá então apenas o retorno: “A chama agora tremula fracamente.”, pois o % suprimiu o prefixo automático.
Mensagem com o prefixo automático {Você LIGOU as TOCHA. A chama agora tremula fracamente. } pode soar estranha em algumas situações de jogo.
Se você quer escrever uma história e está interessado em montar um jogo — entre em contato conosco e faça parte da nossa equipe!