Making of NES gameinvitro "MULTIDEFENDER"

Portanto, no final de março, no nariz da Revisão 2020, ainda há um longo mês de auto-isolamento à frente e tudo começou, como sempre, com o fato de que decidimos escrever outra demo para o NES. Claro, a "demo" é um pouco falada. Com base em nossas próprias capacidades e na quantidade de tempo restante até o prazo final, o curso foi realizado para criar convites simples para o Multimatograma (demopartia russa em Vologda), consistindo de um scroller com informações e um efeito equalizador simples com base no logotipo Multimatograf.



Como funciona - analisaremos detalhadamente, cada parte, do começo ao fim.

Scroller e logotipo


A princípio, essa parte foi escrita como a principal. Todos os "kits para o corpo" foram inventados e introduzidos ao longo do caminho, como sempre acontece. O gradiente e o logotipo são feitos na camada de fundo. Passamos

opção de gradiente 1  opção de gradiente 2

por várias opções de aparência: Até finalmente aprovar o atual: A

gradiente final

agonia da escolha é explicada de maneira simples: organização não muito simples da tela do console e seus atributos. A tela do NES consiste em 32x30 blocos medindo 8x8 pixels. E, por exemplo, no ZX Spectrum ou no Commodore 64, um atributo bicolor atua em uma familiaridade, então aqui o atributo da paleta de quatro cores cobre uma área de até 2x2 familiaridade ou um quadrado de 16x16 pixels. Apenas quatro paletas estão disponíveis, portanto, para desenhar o logotipo gradiente e o vermelho, tivemos que usar 3 paletas com cores comuns em cada uma delas.

Fundo de Nesst

Para obter o efeito de um fundo estático, um gradiente quadriculado foi selecionado e o bit mais baixo foi redefinido para cada nova coordenada de rolagem, para que o fundo se movesse apenas em posições pares, criando a ilusão de um logotipo em movimento com um fundo aparentemente imóvel. Sim, os efeitos geralmente fazem exatamente isso: é impossível decidir na testa - decepção.

Ao longo do caminho, algumas nuances ficaram claras, como o fato de o xadrez no televisor CRT parecer completamente diferente do que parece no emulador, que foi testado em um decodificador real com uma TV real: de

distorção da textura do xadrez em uma TV CRT

fato, há pouco de bom. No entanto, como o cenário já foi torturado com tais dificuldades, e o programa deveria ser do emulador, pontuamos essas insignificantes, no final, não parece tão assustador com este moiré.

Resumo:

  1. — . , .
  2. .
  3. “” , “” + - , .


A linha com o scroller é separada da tela principal por "split". Essa técnica tem sido usada em muitos jogos clássicos, por exemplo, HUD em Super Mario. Mas, diferentemente do Super Mario, ambas as partes da tela "dividida" têm seu próprio rolo autônomo. A implementação da rolagem unilateral no Dandy é tão simples quanto possível; de fato, todos os plataformas com uma tela de rolagem são feitos: cada nova letra (ou coluna paisagem / labirinto) é desenhada na tela vizinha a cada +16 pixels, depois a câmera muda 16 pixels para a direita e tudo se repete novamente.

Para que a rolagem não parecesse completamente entediante, foram aplicados dois efeitos:

1. A semelhança de "gigaskrin" no NES. Por que não? Para fazer isso, a fonte foi desenhada com uma textura quadriculado: pixels pares com um índice de paleta, pixels ímpares com o segundo, entre os quais a transição foi feita de acordo com a tabela: primeiro pontos pares da textura e depois ímpares. Como resultado, obtivemos uma cor intermediária entre as cores existentes na paleta NES e, visualmente, a alteração de cor parece mais suave. Efeito pouco perceptível, se você não souber, mas olhando atentamente para o pergaminho, você pode entender do que se trata:

fonte de rolagem

2. “Saltos” da linha de rolagem ao ritmo do ritmo. Para fazer isso, o buffer do jogador e seu canal de ruído foram rastreados, e um vertical foi adicionado à rolagem horizontal.

Resumo:

O Dandy permite dividir a tela em pelo menos duas partes, cada uma das quais pode ser rolada independentemente. Essas duas partes foram suficientes para nós, tanto para o logotipo quanto para o scroller. Para maior clareza, sugerimos olhar para a “câmera” do logotipo:

animação da câmera de logotipo

E a “câmera” do rolo:

câmera de rolagem de animação

agora é hora de passar para os kits corporais.

NESDEV Logo


Em geral, este já é o nosso segundo trabalho nessa composição; portanto, para essa associação, o rótulo “equipe Nesdev” foi escolhido pelo nome do canal Telegram, no qual discutimos tudo relacionado a consoles, programação e notícias. A aparência da inscrição foi escolhida por analogia com o logotipo do Titan em seu trabalho de demonstração Overdrive, que, por sua vez, parodiou o estilo do logotipo da marca Sega e, sob o efeito gradiente, piquetamos uma certa quantidade do cartucho com tabelas para o desbotamento. O resultado foi ruim:

mesa desaparece animação

mas, devido à quantidade limitada de espaço livre no cartucho, após algumas revisões, foi decidido se livrar de algumas dessas tabelas e transferir o desbotamento para as soluções padrão da biblioteca neslib (exceto o texto sob o logotipo):

neslib desvanece animação

Renda Vologda


Animação de renda Vologda

Inicialmente, planejamos exibir esses monogramas com um desbotamento suave, usando as boas e antigas paletas, mas como o atributo NES afeta não apenas uma familiaridade, mas imediatamente 4, tivemos que abandonar esse método e decidiu-se usar sprites como uma animação preliminar antes do bloco de plano de fundo desejado ficará "impressionado" em familiaridade.

Usando o método google, várias referências adequadas foram selecionadas e foi decidido abordar uma delas, que foi levemente dopada para a nossa tarefa.

renda - referência  desenho de renda

Esta imagem tem 387 peças únicas. O problema é que a página de gráficos NES contém 256 blocos. Nesse caso, a mesma boa e velha tela dividida vem em socorro. Se antes da divisão tivemos a primeira página de gráficos ativa, depois da divisão podemos clicar no jar e ativar o segundo conjunto de caracteres. Isso é verdade apenas em relação aos mapeadores com CHR-ROM, mas, novamente, todos os detalhes no mesmo artigo, é altamente recomendável quem ainda não se familiarizou.

Havia mais duas latas gratuitas com gráficos restantes, então a tela foi dividida verticalmente em 2 partes e o local ideal para a divisão foi selecionado, no qual o banco de gráficos foi alternado. Assim, tivemos dois conjuntos de caracteres separados de 256 blocos para as partes superior e inferior, cada um dos quais abrigava aproximadamente 192 blocos. Isso foi o suficiente e permaneceu a margem necessária para peças adicionais para animar as partes que se cruzam do padrão.

Banco 1:

banco de renda 1

Banco 2:

banco de renda 2

É fácil perceber que as páginas de segundo plano dos bancos têm diferentes conjuntos de blocos e as páginas dos sprites são as mesmas: a granularidade dos bancos comutados é de 8 kilobytes (4 por segundo, 4 por sprite). O número de peças diferentes para a camada de sprite acabou sendo menor que 256, portanto, para conveniência da saída, todos os sprites são colocados em uma página, duplicada nos dois bancos de 8 kilobytes.

A paleta possui três cores que podemos alterar (a quarta é o plano de fundo, geral, atualmente preta), o que significa que podemos organizar 4 fases de animação de uma cor para uma familiaridade, usando uma combinação de sprite e blocos de plano de fundo.

fases de sprite e animação de fundo

Para fazer isso, desenhamos as três primeiras fases da animação no bloco de sprites com os índices da paleta 1, 2, 3 (na imagem para maior clareza, cada fase é destacada em vermelho, azul e verde, respectivamente) e o bloco de plano de fundo como o quarto bloco de animação.
Em teoria, fica assim:

Fase 1: índice da paleta 1 = branco, o restante é a cor de fundo (preto);
Fase 2: índice 1 e 2 da paleta = branco, o restante - cor de fundo;
Fase 3: índice da paleta 1, 2, 3 = branco.
Fase 4: remova o sprite e "digite" a fase final do plano de fundo para o plano de fundo.

Prosseguimos para a próxima familiaridade, etc.

Tradicionalmente, para maior clareza, você pode ver o que acontece na camada de sprite separadamente:

laço - animação de camada de sprite

Além do branco, é claro, você pode usar qualquer outra cor. A principal limitação para esse efeito específico é que a animação do sprite é sempre monocromática, enquanto os blocos de plano de fundo já podem ter mais cores, como fizemos. Assim, a conclusão foi um efeito adicional, pois a ponta do monograma exibido é animada apenas em branco e parece uma luz de fundo.

A imagem de fundo consiste em três cores: dois tons de cinza e uma cor branca (paleta 0). Tudo isso é duplicado na paleta 2, com uma exceção: uma das cores cinza é alterada para preto e, inicialmente, a tela é preenchida com essa paleta.

No processo de exibição de monogramas, substituímos "linha por linha" a paleta na tela, criando o efeito de "separar" uma camada adicional com monogramas detalhados. Na imagem abaixo, esse slot da paleta está marcado em cinza escuro, vermelho é a posição do sprite zero e amarelo é o tempo de espera antes de trocar o jar (por que exatamente - descrito abaixo):

rendas - dividir e trocar de lugar

Toda a animação é dividida em 3 fases (a fase 4 é combinada com a fase 1) para que mantenha-se ao som da peça musical de abertura.

Cada fase dura 4 quadros e, em cada quadro, é desenhada separadamente:

0 quadro - ladrilhos de fundo da parte superior
1 quadro - sprites da parte superior
2 quadros - ladrilhos de fundo da parte inferior e flores (sua aparência é definida pela tabela de acordo com o contador global de quadros)
3 quadros - sprites de fundo

Isso foi feito para atender à velocidade de execução do código, que, devo dizer, não é idealmente escrita em matrizes multidimensionais, o que é fortemente desencorajado desde a ligação que o compilador gera ao mesmo tempo parece monstruosa.

Um utilitário de prototipagem (javascript + html) foi gravado, várias camadas do plano de fundo foram desenhadas com a remoção de parte do gráfico para animar locais de interseção e várias camadas da máscara; depois, ela foi clicada quadro a quadro, resultando em binários para blocos, uma tela e código C com matrizes de dados de animação . Além disso, para completar a imagem, todos os efeitos e músicas planejados para esta parte foram adicionados para que, no estágio de prototipagem, você pudesse ver a imagem completa. O utilitário é adicionado ao repositório, o resultado do trabalho é armazenado em localStorage e, quando a página é atualizada, todos os dados são clicados e recalculados e a matriz de animação é exibida na forma de json no campo de texto.

utilitário de análise de animação

O método escolhido para analisar a animação acabou sendo difícil, e muitas vezes tivemos que redesenhar partes individuais das máscaras e, no final, não havia mais tempo e algumas falhas permaneceram conosco para sempre. Além disso, tudo foi originalmente escrito de acordo com o cânon para sistemas NTSC; portanto, existem problemas para a região PAL, mas provavelmente os levaremos em consideração apenas em nosso próximo trabalho.

Resultados: a combinação de sprites animados e renderização em segundo plano é familiar - essa é uma boa tradição antiga, usada em jogos e em alguns produtos de demonstração (HEOHdemo), mas realizada com abordagens diferentes, você pode obter efeitos diferentes, tudo depende da sua imaginação.

Mosaico "MULTIMATOGRAF"


Tudo é simples aqui - um logotipo dividido em "cubos" + matrizes de coordenadas e compensações iniciais. Provavelmente vale a pena mencionar é um pequeno hack usado. O limite de sprites NES é de 8 peças por linha raster, mas não conseguimos nos livrar do nono - "sprite zero", que divide a tela em duas partes, e isso criou um pequeno problema: um dos sprites de logotipo desapareceu, cruzando a posição Y do sprite "zero" . Eu não queria mudar a posição do logotipo, especialmente porque passava muito tempo desenhando-o na parte principal da introdução e, por tentativa e erro, encontramos um local adequado para o sprite zero (no início da linha anterior à divisão) e, após a divisão em si, o sprite ficou oculto fora da tela, além disso, um atraso no programa foi organizado até o final da linha, após o qual o banco com charters já estava trocando.Como resultado, o sprite do logotipo não exibiu apenas alguns quadros e apenas uma linha da tela, o que não machucou nossos olhos e se encaixou em nossos objetivos.

Intra ou jogo?


Enquanto isso, o mr287cc finalizou ferozmente o espaço livre do cartucho com a nossa próxima idéia: decidimos vencer o tópico atual sobre o "coronavírus" e, olhando como a demopatia do Vologda era organizada, avançamos cada vez mais, devido à quarentena, decidimos por todos os meios " proteger ”o multimatograma do coronavírus. Vários caminhos estriados foram feitos ao longo dos quais os vírus deveriam voar, e na parte inferior da tela havia uma nave espacial que deveria atirar nos vírus e transformá-los em cerveja. Mas como a cerveja dos vírus é um empreendimento mais ou menos, a idéia foi levemente redesenhada e acabamos de receber uma nave espacial do jogo Galaga, destruindo cadeias de vírus que voam por diferentes trajetórias.

a origem do jogo

Além disso, a IA piloto despretensiosa foi modificada para uma menos despretensiosa, depois foram criados efeitos sonoros para o surgimento de cadeias de vírus, sua destruição e animação da explosão, um contador de pontuação e cumprimentos e convites foram implementados na forma de uma tabela de pontuação próxima:

convida-cumprimentos

E em algum momento nós e decidiu que era necessário dar ao espectador a oportunidade de controlar o navio e destruir os vírus. Este foi o primeiro passo para transformar o Intra em um mini-jogo completo.

Todos gostaram muito dessa idéia e, tendo jogado o suficiente, alguém percebeu brincando que não havia chefe suficiente e aqui não podíamos ser impedidos. Embora naquela época algumas partes cênicas demo do trabalho ainda não estivessem completamente prontas, nós, após o arrebatamento que nos dominava, jogamos completamente toda a nossa energia na parte do jogo. mr287cc refez a mudança do navio de linear para inercial, e TmK cortou a primeira versão do chefe:

chefe - primeira versão

Inspirada pelo chefe de Castlevania, essa opção foi finalizada e um bom, adequado e completo chefe apareceu em nosso jogo vitro.

opção final do chefe

Em seguida, continuamos no processo e o comportamento do chefe foi completamente realizado de acordo com os cânones dos velhos jogos de dândi dos anos 90 firmemente enraizados no cérebro, desde um tempo despreocupado, quando ainda não podíamos programar e apertar gamepads firmemente em nossas mãos, sem poupar tubos de imagem, jogávamos dândi a noite toda . Acelerando a fase de animação antes de lançar projéteis de vírus, trajetórias de vôo de projéteis, tremer quando atingidos e quando atingidos diminuem abaixo de um determinado nível e até explosões após uma vitória: tudo isso é nossa experiência de jogo obtida no clássico gamedev dos anos 90.

Enquanto isso, o limite de ROM grátis terminou, apesar de eu ter transferido alguns dados do PRG para o CHR-ROM, e nos reconciliamos com o fato de que não poderíamos aprimorar ainda mais o jogo. No entanto, quase antes do prazo final, quando o vídeo para exibição foi renderizado, foi encontrado um código não ideal com ciclos abertos, após a edição da liberação de mais 3 kilobytes, os dados no CHR-ROM foram compactados e complementados com outros dados do PRG-ROM, graças aos quais foi possível obter mais aproximadamente kilobytes, mas não havia tempo para revisão.

Na época do prazo, nem todos os planos foram cumpridos, mas não desistiríamos.

Armado com a idéia de realizar torneios em demopati, continuamos a desenvolver e o que aconteceu - veja o lançamento final. No jogo, uma nave espacial e explosões de inimigos foram redesenhadas, na versão party, havia sprites emprestados, o nome de um jogador foi adicionado, uma tabela de pontuações altas, várias pequenas correções e melhorias cosméticas foram feitas, criando assim um jogo simples, mas bastante adequado para competições de torneios com jogabilidade despretensiosa: por um certo tempo, você precisa disparar o máximo possível de coronavírus lixo e marcar o máximo de pontos.

Informação do Jogo

Guia rápido:

  1. Estamos aguardando a conclusão do efeito introdutório com o laço Vologda, após o qual o modo de introdução e demonstração do jogo será iniciado.
  2. O botão "Selecionar" alterna a exibição da tabela de recordes, informações sobre o jogo.
  3. Clique no botão "Iniciar".
  4. : — 6 .

A hora é exibida no canto superior esquerdo como um ícone de ampulheta. Cerca de um minuto antes do final do jogo, o ícone pisca com uma certa intensidade, sinalizando que o tempo está se esgotando.

Inimigos atacam em ondas: 3 ondas de vírus (“super vírus” podem aparecer em cada uma dessas ondas, não é recomendável perdê-los, porque pontos extras são concedidos por eles). No final de 3 ondas, o chefe é gerado, e novamente de acordo com o padrão usual: 3 ondas, chefe, até que o tempo previsto acabe.

O chefe tem 10 pontos de vida, para a remoção de cada jogador é concedido 1 ponto. Pontos extras são concedidos ao derrotar o chefe. A cada golpe no navio, o jogador perde 1 ponto e é imobilizado temporariamente. Se ocorrer uma colisão durante a batalha com o chefe, nesse caso, o chefe receberá 1 ponto de golpe.

entrada de apelido no final do jogo

Resumo:

  1. Exibimos na Revisão;
  2. Convidamos você para o Multimatograph;
  3. Fizemos um gamevitro para uma plataforma que não estava bem representada no demosceno;

Agradecimentos especiais a bfox e Quiet por dicas e testes na jogabilidade.

PS de TmK:

Em geral, não foi fácil, basicamente escrevemos em C e apenas algumas coisas dependentes do tempo no assembler (por exemplo, a saída do analisador para o logotipo). Antes disso, eu tinha experiência no desenvolvimento para o NES em nosso trabalho anterior (NESPECCY), mas esqueci muito desde então (e o código escrito por mim no assembler agora parecia desconhecido e como otimizar o código C corretamente - em muitos momentos, a otimização era alcançada por simples força bruta de várias opções para escrever código).

Pedimos que você não adie o trabalho de escrever sobre demopati no último momento, comece hoje mesmo, talvez até agora, principalmente porque as datas aproximadas de todos os eventos já são conhecidas.

Algumas palavras sobre fundo musical de n1k-o / Stardust


Como o objetivo do nosso trabalho era convidar pessoas simpáticas ao demosceno ao partido Vologda, o primeiro pensamento foi tomar como base a trilha conhecida, na qual eles especificam constantemente - "onde, onde - em Vologda, é onde". A idéia de um remix de capa para esta faixa acabou sendo insustentável: não se encaixa muito bem no estilo do in-vitro, por isso foi decidido deixar a introdução do original e, na faixa, eu fiz uma pequena passagem para o motivo do refrão. Nesta parte, um remix de capa terminou e a faixa original foi além. (“Original” com algumas ressalvas: foi escolhida uma referência que funcionava bem com uma sequência de vídeo orientada a demo: possuía uma linha de baixo distinta, uma batida funky, uma melodia cativante, em geral, tudo para ouvir e não desligar pelo menos 2-3 ciclo.)

Nas primeiras abordagens, o principal motivo da música sobre o Vologda foi captado, torcendo-o para frente e para trás, desenhei a linha de batida e baixo, tentando fazer o que era sugerido na faixa "introdução".

rastreador vórtice

O esboço de todas essas abordagens é mais fácil para mim no Vortex Tracker, apesar do fato de este editor ser destinado principalmente para escrever músicas para o ZX Spectrum: ele funciona muito mais rápido e mais familiar para mim, e velocidade e qualidade são a principal coisa. Transferir notas de um editor para outro (FamiTracker) não é o maior problema: graças aos esforços de Ivan Pirog e companhia, o rastreador Vortex pode copiar dados para a área de transferência do Famitracker.

Assim, fiz na forma de rascunho quase todo o rascunho principal da trilha NES; se desejado, essa trilha também pode ser adicionada ao ZX Spectrum.

A segunda etapa do trabalho é a transferência da faixa do Vortex tracker para o FamiTracker, a tarefa é monótona - copie e cole. Felizmente, escrevo para alguns caras há quase um ano, e a interface do FamiTracker tornou-se quase nativa (mas não para esboços rápidos, aqui ainda estou tropeçando na interface). Depois de copiar todas as partes, comecei a prescrever cada uma delas, selecionar os instrumentos e tudo o que deveria saturar e dar uma olhada completa na pista.

FamiTracker

No início, me prometeram que eu poderia usar toda a funcionalidade do editor, com todos os seus comandos e capacidades, e eu, a propósito, nunca havia usado o editor antes das restrições às quais eu estava constantemente limitado - é tudo complicado codificadores tomam poder e manobras de músicos comuns, para que eles, codificadores, tenham mais poder e espaço para suas manobras. Portanto, você deve trabalhar em condições extremamente limitadas - para entender que também é impossível alterar o volume de instrumentos na coluna rastreador especialmente fornecida para isso, é assim que o formato do player Famitone é limitado. Em geral, o principal aqui é lembrar que nada é impossível, exceto que é possível, e isso é um pouco, portanto é mais fácil lembrar que você não pode estar enganado. Por analogia, isso é semelhante às limitações que estavam nos primeiros editores,que acabaram de aparecer nos anos 90 - tanto quanto está disponível.

Em geral, é como se você pudesse terminar a história, porque não havia mais nada, eu mudei a pista, saciei e desenvolvi um pouco mais, e os caras periodicamente tinham idéias de como ainda me carregavam de trabalho - eu fiz de tudo para invejar rapidamente, embora tenha oscilado por um longo tempo. Também era necessário suplementar a faixa final com batidas no final dos padrões, a fim de orientar os “saltos” da rolagem ou diluir as partes de baixo e percussão para relaxar a audição.

FamiTracker parte da pista

E no final, foi necessário fazer efeitos, e isso é essencialmente jogar eventos de jogo com instrumentos, ou seja, precisamos dar um tiro - isso significa que usamos as mesmas ferramentas do rastreador para representar esse tiro, salvando-o como uma faixa separada. No caso do rastreador, alguns provavelmente viram que pode haver várias melodias em um módulo .NSF, as mesmas regras se aplicam aos efeitos, mas, por sua vez, podem ter uma base de instrumentos separada.

som fx

Em geral, no final, quero dizer tradicional, escrever cenas de demonstração, criar jogos e não ficar entediado com todos esses eventos de coronavírus refletidos em nosso intra-jogo (ou seja, não fique doente).

Você pode baixar o pacote com a parte e a versão final aqui .

Repositório com o processo de desenvolvimento de

Créditos:

  • Codificado, pintado: TmK
  • Codil, graphomanil: mr287cc
  • Extração de som: n1k-o / Stardust
  • Drew, eficaz, segurou uma vela: Adam Bazaroff

PS: Convidamos os fãs do demoscene a participarem do Demopati Multimatograf . A data estimada é o início de julho, e tudo depende de quão bem você luta contra o vírus em nosso jogo.

All Articles