segunda-feira, 8 de março de 2021

projetos mortos 01: yorocutai

apresentação

yorocutai era essencialmente uma exploração de geração procedural de texto e geração procedural no geral. inspirado por Markov by Candlelight, em poética, mesmo que não em técnica. o jogo utilizava gramáticas para gerar o texto principal, não correntes de markov. acabei não desenvolvendo porque perdi um pouco de ânimo com o design e não tinha confiança na minha capacidade como escritora para produzir um jogo a base de texto.

a estética e atmosfera foi inspirada por um certo liricismo literário e pelo livro A Stranger in Olondria de Sofia Samatar (de forma bem lateral). tentei refletir isso tanto na geração do texto quanto na parte visual. o nome não significa nada, mas tenta seguir a estética dos nomes que o próprio jogo gera para suas entidades, como se fosse um nome próprio para o jogo em si.


uma tour silenciosa pelo jogo:




geração procedural de texto

a fundação do jogo era a produção de pequenos blocos de texto. descrições de comunidades de pessoas, animais e plantas. pequenos encontros narrativos.

o jogador jogava como uma entidade?? que habita esse ilha junto a comunidades, animais e plantas. além das descrições de cada uma dessas coisas, também ocorreriam eventos recorrentes que precisariam que se tomasse uma decisão.

 

no meio da tela há uma ilha em pixel art com nuvens formando um círculo em volta, do lado esquerdo uma lista de entidades que habitam o mundo do jogo e do lado direito um símbolo grande representando a entidade selecionada
screenshot do que pode ser chamado de tela principal

 

 

todos esses pedacinhos de texto seriam gerados por uma gramática de expansão, que refletiria uma série de tags associadas a cada entidade. essas tags faziam referência tanto a questões práticas e concretas dessas entidades, um grupo ser envolvido mais com comércio, arte ou guerra por exemplo, um animal ser mais pássaro ou mais mamífero, ter penas ou chifres, quanto questões atmosféricas, uma entidade podia estar mais associada a mistério, ou calma, etc.

além disso, toda entidade teria um certo valor em quatro tags estéticas. isso foi influenciado pela fala Five Strategies For Collaborating With A Machine da Emily Short. essas tags estéticas formavam associações subjetivas que eu fiz entre coisas diversas, cores, substâncias, atmosferas, locais. se não me engano o nome das tags eram piano de vidro, relógio de cobre, roda de pedra e... um quarto. tentei escolher nomes que fossem evocativos para me lembrar o que cada um remetia e que também evocassem a estética geral do jogo.

a ideia então era que todo bloco de texto expressasse as tags associadas a cada entidade. tags que remetiam a temáticas, atmosferas e estéticas. mas a própria geração do texto inseria novas tags na entidade, dependendo das porçõezinhas de texto e palavras que eram escolhidas no processo. portanto a geração de um bloco de texto tanto expressava quanto alterava as tags de uma entidade. visto que essa geração de texto era o foco do jogo, queria que ela tivesse um poder transformador de alterar o próprio estado do mundo, conforme o algoritmo escolhia porções de texto.

 

a metade direita da tela é ocupada por um textinho discorrendo sobre essa entidade, a parte esquerda mostra o ícone que representa ela, o tamanho da sua população e a intimidade que o jogador possui
tela representando uma entidade, com o texto gerado proceduralmente

 

 

meu objetivo era que cada entidade fosse essa coisa meio amorfa e transiente. a única existência concreta e duradoura dessas entidades são suas tags, os blocos de textos são expressões temporárias dessa fundação concreta, mas que altera a fundação no momento da expressão. a cada novo bloco de texto gerado essas entidades divergem e divagam conforme o algoritmo expressa suas tags de formas diferentes e acaba chegando a tags novas.

algo que nunca cheguei a implementar, era dar certos elementos recorrentes a cada comunidade, como alguma pessoa sob a qual se organizavam, ou um local especial para aquele grupo. essas coisas seriam continuamente referenciadas através de varias gerações de texto, mas também seriam simplesmente compostas de tags, então sua descrição também seria meio amorfa e transiente.

um local poderia ser associado à cor azul, mas o que efetivamente seria azul mudaria entre gerações de texto. um líder importante poderia ser associado ao combate, mas mudaria ao longo do tempo entre um soldado, um general, um pirata, etc.


design de jogo

como queria que as entidades permanecessem essa coisa amorfa e flexível, não queria que elas fossem enrijecidas pela concretude do design de jogo. para conseguir isso deixei as entidades em si meio que em paz e usei o design para desenvolver a relação entre elas e explorar melhor a própria fluidez da geração do texto.

cada entidade só teria dois dados, além das suas tags, a intimidade com o jogador e o seu tamanho. o tamanho no caso de plantas e animais faz referência ao tamanho da população dessa espécie na ilha toda, no caso de comunidades, o tamanho da população da comunidade. fora isso cada entidade formaria relações com as outras, que determinariam a forma como elas reagiriam ao crescimento uma da outra. uma entidade que fosse predatória com outra, faria que a segunda perdesse tamanho quando ela crescesse. uma entidade que apoiasse outra, faria com que a segunda crescesse junto dela. entre outros tipos de relação.

queria que esse sistema fosse simples e "leve". a ideia não era ser um jogo pesado em sistemas, mas esse infelizmente acabou sendo um dos motivos do jogo não ser terminado. me sinto mais segura fazendo design de sistemas do que trabalhando nos elementos estéticos, como o texto. acabei não confiando que eu conseguisse produzir sozinha um jogo bom com um conjunto de sistemas leve e simples.

a interação com o jogo entra exatamente nesse sistema de mudança de tamanho. ao desenvolver intimidade com uma entidade, o jogador poderia tanto apoiar, fazendo entidades crescerem, quanto suprimir aquela entidade, fazendo ela diminuir, além de mudar as relações que ela possui com as outras. as entidades formam uma teia, com relações específicas e variadas entre si, e cada ação do jogador tencionaria essa teia, causando uma cadeia de reações bem maiores que a ação que ele realizou diretamente. 

além de interferir nas relações dos grupos e manipular o tamanho das entidades, o jogador poderia obter "dons" de animais e plantas, o que consistiria em aprender algo útil que pudesse ser derivado deles. por exemplo, uma planta poderia ser usada para fazer tintura, o pó do chifre de um bicho poderia ser usado em medicina ou ferramentas. nada disso existia enquanto mecânica, só narrativa, mas refletiam certas tags que cada dom possuía. tintura teria tags relacionadas à expressão artística, ferramentas teriam tags relacionadas ao trabalho.

esses dons poderiam ser dados de presente aos grupos e comunidades do jogo. isso aumentaria um ponto de intimidade, melhorando a capacidade do jogador de interferir nas relações desse grupo e inseriria essas tags na entidade. isso era algo legal que queria explorar no jogo, a capacidade do jogador de brincar com o sistema de geração de texto mudando as tags de um grupo através dos presentes que dava para ele. presentear um dom seria refletido de forma estética na geração de texto e ganharia um peso maior ao se relacionar com o sistema de intimidade, tamanho e relações entre entidades.

isso permitiria que uma ação, presentear um dom a alguém, tivesse peso mecânico e concreto e fosse também expressa narrativamente (ao mudar as tags que influenciam a geração de texto), sem que uma coisa fosse diretamente relacionada à outra. o sistema narrativo poderia permanecer livre para escolher trechos textuais de forma simples, sem precisar considerar o estado do mundo de forma complexa, mas refletindo de forma indireta as ações mecânicas do jogador e as redes de relações que o levavam a obter dons às vezes.


estados de espírito, relações, eventos e objetivos

as interações com as entidades disponíveis ao jogador, como crescer uma entidade, impedi-la de decrescer, entre outras, dependem de onde o jogador posicionou essa entidade na "matriz de relações". um gráfico que pode ter no máximo 12 espaços e define qual a relação que o jogador decidiu ter com essa entidade.

 

no centro da tela há uma composição de quatro losangos. o jogador posicionou algumas entidades nos seus vértices, representadas por seus ícones.
a tela da matriz de relações, cada quadrante representa uma perspectiva, apoio é uma delas

 

 

cada quadra do gráfico define um aspecto da sua relação com a entidade: apoio ou confronto, mudança ou conservação. apoio permitiria ações que auxiliassem o crescimento, confronto permitiria ações que suprimissem seu tamanho. mudança permitiria que o jogador interferisse diretamente na entidade, conservação permitira que o jogador impedisse uma mudança já prevista.

os pontos disponíveis nesse gráfico, entretanto, seriam definidos pelo estado de espírito do jogador. ele pode estar mais ou menos sociável, aumentando ou diminuindo a quantidade de espaços disponíveis. pode estar num humor mais amigável, garantindo mais espaços de relação positiva. pode estar num humor revolucionário, garantindo mais espaços de mudança e menos de conservação.

o jogador poderia mudança seu estado de espírito quando quisesse, mas com o custo de alguns pontos de crescimento pessoal, que ele ganharia a cada turno que passasse. portanto, isso não poderia ser feito sempre a bel prazer e a escolha de mudar de estado de espírito influenciaria as relações do jogador por pelo menos alguns turnos.


na tela há um arranjo circular representando uma espécie de selo arcano. cada estado de espírito é representado por um símbolo no seu perímetro.
a tela de estados de espírito, note que um se conecta ao outro


todas essas ações seriam usadas pelo jogador para tentar completar seu objetivo atual. os objetivos eram super simples, normalmente envolviam entidades de um certo tipo, grupos ou plantas/ animais, conseguindo atingir um certo nível ou então pediam que o jogador realizasse algum tipo de ação, interferir em uma entidade ou conservar alguma mudança nela, uma dada quantidade de vezes. o jogador escolheria que objetivo queria tentar completar agora e poderia escolher um novo quando cumprisse o atual.

meu objetivo com o sistema de objetivos eram permitir um jogo aberto, sem restringir ou direcionar o jogador, mas de alguma forma reconhecer o que ele está fazendo. alguns jogos sandbox me passam uma sensação grande de indiferença. o jogo te permite fazer várias coisas, mas nunca parece prestar atenção nelas ou reconhecer algum padrão maior que uma única ação e seus efeitos. os objetivos, de um jeito muito simples, pedem que o jogador execute alguma espécie de padrão que cumpra algum tipo de arquétipo narrativo como revolução (muitas ações de mudança), megalópole (comunidades enormes), arcádia (grupos pequenos, mas plantas e animais populosos).

esses objetivos tem quase caráter de role-play e poderiam ser almejados pelo jogador num modelo sandbox de qualquer maneira, mas ao torná-los um objetivo eletivo queria que o jogador precisasse se comprometer com algo, tirando o caráter frívolo de alguns jogos abertos onde nada está sendo pedido do jogador, e ajudar o jogo a reconhecer padrões interessantes nas ações do jogador.

os objetivos também seriam bem fáceis de se conseguir, mas envolveriam ações bem grandes de reorganização do estado do mundo. queria que não fossem desafios, mas comprometimentos. no processo de completar um objetivo, o jogador teria causado uma série de impactos no mundo e teria que lidar com isso no processo de completar o próximo desafio.

 

na tela há outra composição visual semelhante à dos estados de espírito. dessa vez, os símbolo ao seu redor representam os objetivos. um deles está azul.
a tela de objetivos, o símbolo azul indica o objetivo atual

 

 

não é questão do impacto ser necessariamente negativo, como se fosse o custo de conseguir um objetivo, era mais uma questão de ritmo eu acho. completar um objetivo envolveria tensionar a rede de relações e tamanhos que compunha o mundo tentando alcançar um padrão radical, potencialmente lutando contra a resistência e a tensão dessa rede, e depois precisar reorganizá-la em um outro padrão, lidando com o que foi deixado pelo processo anterior. 

esse conjunto de mecânicas era finalizado por uma série de pequenos eventos narrativos com o qual o jogador poderia lidar ou não. essa parte do jogo, pelo que eu me lembre, foi a mais inacabada. esses eventos teriam um desfecho padrão que ocorreria depois de x turnos caso o jogador não tomasse a decisão de escolher outra opção. cada opção, entretanto exigiria que o jogador estivesse no estado de espírito apropriado para realizá-la. o desfecho do evento alteraria o estado do mundo de alguma forma.

alterar seu estado de espírito para poder escolher uma opção narrativa, mudaria a matriz de relações do jogador com as entidades e exigiria uma mudança de perspectiva em relação ao mundo, do mesmo modo, escolher um estado de espírito para possibilitar certas ações com entidades, limitaria as opções narrativas disponíveis.

as mecânicas do jogo seguiam dois princípios de design que eu queria explorar depois de finalizar meu jogo anterior, Interstellar Rising, elementos em relação não simultânea uns aos outros e o tensionamento constante da rede de relações que isso formaria. explico. todos os elementos do jogo, como os estados de espírito, os objetivos, as perspectivas de relação com as entidades existiam dispostos em um gráfico, formando conexões uns com os outros. ao invés de um design comum em que coisas desse tipo existem de forma simultaneamente disponíveis para serem utilizadas pelo jogador a hora que ele quiser, como uma lista de objetivos num jogo aberto para ele completar quando quiser, esses elementos aqui estariam organizados um relação ao outro.

de forma muito simples, o que isso significa aqui é que um objetivo A estando conectado aos objetivos B e C, significa que depois de completar o A você pode tentar o B ou o C. se escolher o C, você pode ir dali para tentar o D e o E, ou voltar ao A para tentar o B depois disso. a mesma coisa para os estados de espírito. jogar o jogo envolveria percorrer esses gráficos de relações varias vezes. queria a sensação que você estava caminhando pelo design do jogo como caminharia por um mundo digital, como se os elementos do design tivessem uma relação geográfica entre eles.

essas relações geográficas também poderiam envolver uma tensão entre esses elementos, onde o acionamento de um causaria uma cadeia de reações pelo sistema. um exemplo disso é a rede de relações entre as entidades, que reage à mudança de tamanho de uma delas. outro é mudança de estado de espírito tendo consequência na sua relação com as entidades e na escolha de uma opção narrativa em um evento.

falei isso acima em relação aos objetivos, mas a ideia era que o jogo inteiro envolvesse sequências de ações simples, mas que envolvessem um tensionamento da rede que formaria todo o design do jogo, com o respectivo impacto no estado do mundo. comprometimento e não desafio. como se o jogo estivesse vendo até onde você se disporia à forçar essa rede e tensionar essas relações. era para ser um jogo bem tranquilo, não tinha nada extremo nesse sentido, mas esse era um princípio geral do design.


interface e estética visual

queria que a estética remetesse a livros. o próprio jogo é estruturado como um, com as telas sucedendo uma a outra de forma linear que nem páginas, com um index no meio.

cada entidade recebia um símbolo gerado proceduralmente para representá-la na interface gráfica e ajudar a fortalecer a identidade de cada uma. os grupos recebiam uma composição que remetia a tapeçarias e os animais e plantas um desenho altamente iconográfico que tentava se assemelhar a um traço de pincel. 

tanto as tapeçarias dos grupos quanto os ícones dos animais e plantas eram coloridos por shader por uma cor ou paleta escolhida para refletir as tags dessas entidades. dessa forma, elas também poderiam ser geradas novamente várias vezes ao longo do jogo para continuar a refletir suas tags.

 

quatro composições quadradas em pixel art se assemelhando a tapeçarias coloridas abstratas
alguns dos possíveis símbolos dos grupos e comunidades

 

 

para finalizar a exploração geral de geração producedural, tanto a imagem da ilha na qual uma partida específica do jogo se passa, quanto o seu nome e o de todas as entidades são gerados proceduralmente. a ilha é criada por um processo simples que se assemelha a uma gramática em combinação com cellular automata (qual o nome disso em português?) e os nomes foram criados por uma corrente de markov que eu "cultivei" e lapidei para gerar nomes na estética que eu queria. pretendo falar desses dois processos nesse blog melhor no futuro.


conclusão

como falei acima, esse jogo acabou sendo abandonado pois perdi a confiança em produzir um texto bom o suficiente para sustentar ele. por mais que eu goste muito da estrutura do design e da geração procedural, ainda acho que era um jogo fundamentalmente sustentado na qualidade do texto. eventualmente ao longo do projeto eu comecei um protótipo do que seria o autonomous agent aramis e acabei sedendo à pressão interna e abandonei um pelo outro.

entretanto, ele foi muitíssimo importante para mim. consegui refletir e elucidar muitas questões importantes da minha filosofia de design de jogo além de ter tido a oportunidade de desenvolver e implementar várias técnicas de geração procedural, quase todas que pretendo aplicar em outros projetos.

os assets que fiz para esse jogo podem ser usados por qualquer um em qualquer projeto e podem ser baixados aqui: https://gramorim.itch.io/asset-packs

espero que esse projeto, através dessa descrição, tenha alguma sobrevida inspirando alguém. tentei explicar bem, mas caso alguém tenha alguma dúvida sobre, podem perguntar!


Sem comentários:

Enviar um comentário

Floreio, minha gramática de geração procedural de texto

Gostaria de falar um pouco da ferramenta de geração procedural de texto por gramática de substituição que eu venho desenvolvendo na Unity pa...