Jogo ASCII - um compromisso de autenticidade e conveniência

Olá a todos! Enquanto desenvolvia um jogo estilizado como modo de texto, cheguei à contradição esperada. Por um lado, o jogo deve estar saturado com o espírito do modo de texto, porque para isso eu gosto e, espero, os fãs de jogos retrô gostem. Por outro lado, quero que a jogabilidade seja o mais divertida e moderna possível. Neste artigo, descreverei cinco pontos nos quais me desviei do modo de texto verdadeiro. Consegui manter o humor alfanumérico do tubo no jogo? Peço para expressar uma opinião!



1. Conjunto de Caracteres


Absolutamente todos os gráficos do jogo são criados usando os caracteres digitados no teclado. Para ser mais preciso, são usados ​​os caracteres da tabela ASCII do 32º ao 126º caracteres.



No entanto, os textos do jogo estão localizados em vários idiomas. Agora, suporte russo e inglês em paralelo, mas quero adicionar mais alguns, incluindo chinês. Os caracteres das tabelas ASCII, mesmo os estendidos, claramente não são suficientes para esses fins.



As caixas de diálogo no jogo podem conter personagens que não pertencem ao intervalo autêntico. No entanto, esses caracteres não estão envolvidos no design. Os gráficos são apenas ASCII.

2. Precisão de sub caracteres


Diferentemente dos modos de texto, o ASCIIDENT usa precisão de pixel para mover camadas de texto e sprites.



No modo de texto, a mudança de sprite em uma posição parece um salto perceptível. Para um jogo dinâmico como o ASCIIDENT - isso é inaceitável do ponto de vista da experiência moderna em jogos. Portanto, para sprites individuais e camadas de texto, que serão discutidas mais adiante, fiz um movimento suave.

Para manter a autenticidade, aderir à regra a seguir. Dentro de uma camada de texto, todos os objetos estáticos estão claramente alinhados na grade de caracteres. Além disso, cada sprite consiste em caracteres também alinhados em uma grade de caracteres.

Em relação umas às outras, camadas e objetos em movimento podem estar localizados a uma distância sub-simbólica. Isso garante um movimento suave e, consequentemente, uma jogabilidade confortável. Esse é um compromisso.

3. Parallax


O jogo tem várias camadas de texto que se movem em velocidades diferentes, percebendo o efeito de paralaxe. Os símbolos das camadas superiores se sobrepõem aos símbolos das camadas inferiores. Com precisão de subcaracteres, o critério de sobreposição é uma sobreposição de mais de 50% da largura e / ou altura da célula de texto. Usando um buffer z simples, essa sobreposição é fácil de implementar.



A paralaxe com movimento suave das camadas é uma técnica gráfica muito expressiva. Sim, isso pode violar bastante a autenticidade do modo de texto. No entanto, eu decidi usar paralaxe. Acontece muito bem.

4. Animação


Animação de sprites individuais no jogo "honesto", feito estritamente no modo de texto. A posição de cada caractere é alinhada na grade de texto. As animações são obtidas substituindo caracteres nas células.



Achei muito importante manter a integridade das animações de sprites. Esta é provavelmente a principal coisa que torna o jogo tão atraente. Além disso, com esse tipo de animação, torna-se tecnicamente muito simples criar e editar sprites ASCII animados. Não pude resistir e criei um editor ASCII embutido no jogo. A qualquer momento, qualquer elemento gráfico pode ser carregado e alterado. Você pode, por exemplo, editar o baú adicionando quadros de animação e depois de salvar todos os baús em todos os lugares do jogo, ele se tornará novo. Qualquer jogador pode fazer isso, criando assim o seu próprio mod do jogo.


No entanto, às vezes você precisa de animação suave! Por exemplo, no jogo existe um local onde a fibra óptica biológica é cultivada. Um drone voa acima das camas, o que irriga a fibra óptica com um líquido tóxico. O líquido deve pingar suavemente, caso contrário, é feio. Para implementar esses efeitos, criei geradores de sprites e sua ligação a quaisquer outros sprites no mundo do jogo. Tecnicamente, cada gota é um sprite separado que pode se mover com precisão de subpixel. Um compromisso razoável novamente.

5. Luz, cor e fonte


Muitas pessoas para quem eu mostro o jogo comentam que há muitas cores no meu jogo. Nos modos de texto, não havia tanta riqueza de tons. O fato é que implementei um mapa de luz em tela cheia que calcula qualquer número de fontes de luz. Ao mesmo tempo, a cor de cada caractere é de 24 bits (16.777.216 cores diferentes). Às vezes a imagem parece colorida.



Para emular os modos de cores retrô, fiz sete opções adicionais: três modos monocromáticos, dois modos de 16 cores (DOS / Mac), 2 bits e modo Game Boy. O modo de fonte LED também está disponível. Nesse modo, cada pixel de cada caractere é separado dos vizinhos. O vídeo abaixo mostra todos os modos - como eles afetam a imagem.


O algoritmo de conversão de cores para os modos monocromáticos fez isso. Primeiro, calculo o brilho da cor (R, G, B):

V = 0,3 * R + 0,59 * G + 0,11 * B Os

monitores retrô monocromáticos possuem tons de cores diferentes para diferentes brilhos de símbolos. Portanto, a sombra também deve mudar. Eu uso essa interpolação linear:

RR = sqrt (V) * (monoR1 * (1 - V) + monoR2 * V)

GG = sqrt (V) * (monoG1 * (1 - V) + monoG2 * V)

BB = sqrt (V ) * (monoB1 * (1 - V) + monoB2 * V)

Cor final (RR, GG, BB)

Para modos de 16 cores, eu uso um algoritmo diferente. Para cada cor (R, G, B), estou procurando a cor mais próxima da paleta. Isso é tudo.

O modo de 2 bits e Game Boy tem apenas quatro cores na paleta. Uma pesquisa simples pela cor mais próxima fornece uma imagem muito escura. Portanto, antes de procurar uma cor na paleta, faço a normalização:

d = 1 / max (R, G, B)

normR = d * R, normG = d * G, normB = d * B

As fórmulas são esquemáticas. Os cheques para divisão por zero não foram mencionados. Espero que todos que decidirem jogar ASCIIDENT possam escolher por si mesmos um esquema de cores que aqueça ao máximo sua alma retrô.

6. Console com um modo de texto honesto


No processo de criação do jogo, surgiu a idéia de colocar terminais de computador com um modo de texto honesto no mundo do jogo. Você pode abordá-los, conectar-se e trabalhar / se divertir.

Se o jogo em si é estilizado como um modo de texto de 80x25 com rolagem suave e paralaxe de camadas de texto, a tela do terminal interno possui uma resolução de 72x20 caracteres, sem possibilidade de ir além dessa grade.

Todos os aplicativos para terminais incorporados (incluindo o gerenciador de inicialização) são escritos na linguagem de programação DUHASM. Esse idioma é semelhante ao Assembler, mas possui variáveis ​​dinâmicas e matrizes. Aqui está, por exemplo, uma parte do código do jogo Pi-astre Hanter:



Um recurso divertido - os loops são implementados como parte de construções condicionais, onde LOOP é colocado em vez de END.

No lançamento, o jogo carrega aplicativos de arquivos * .duhasm e os compila em código de bytes. Quando um jogador ativa o console, um intérprete honesto é iniciado.

No momento, escrevi dois jogos no DUHASM, que já estão disponíveis na versão atual. Existe um plano para escrever um editor de código (também no DUHASM, é claro) para que cada jogador possa tentar criar um aplicativo / jogo que todos os outros jogadores verão.


Espero que em vão não tenha gasto muito esforço e tempo para implementar esse recurso e que haja pessoas que gostem dele. A linguagem DUHASM certamente precisa de algum refinamento. Não gosto muito de como, por exemplo, funções são chamadas com argumentos. De acordo com a história do jogo, a linguagem DUHASM surgiu com um ciborgue semi-sensível que escapou do laboratório de piratas espaciais. Surpreendentemente, essa linguagem de programação se enraizou nos arredores da parte habitada do universo.

CONCLUSÃO


Bem, havia muitos compromissos - um conjunto de caracteres, precisão de sub-caracteres, animação, cores. Mas também para manter um senso de autenticidade no modo de texto, comprometi-me muito nesses mais de dois anos de desenvolvimento. Para obter mais feedback e entender se estou indo na direção certa, decidi iniciar o jogo com acesso antecipado no Steam . Há algo magicamente atraente nos modos de texto. Quando qualquer imagem pode ser digitada com caracteres no teclado, às vezes é difícil resistir e não iniciar o jogo com o editor ASCII embutido, e nem mesmo desenhar um protótipo de um novo minijogo, que será implementado na linguagem DUHASM.



Obrigado a todos! Até!

All Articles