O que exatamente compõe uma tela em um jogo C64 típico?

10

Estou tentando descobrir o básico do desenvolvimento de jogos em C64, além do BASIC, e poderia usar alguns conselhos sobre algo muito básico, mas importante: o que é realmente tudo isso na tela e como desenhá-lo?

Dê uma olhada em Katakis / Denaris :

Captura de tela de Katakis

Há pelo menos 9 coisas diferentes na tela:

  1. A barra de pontuação, com fontes diferentes
  2. O próprio navio
  3. Um satélite conectado ao navio, destacável
  4. Projéteis de Armas Secundárias
  5. Projéteis de Arma Primária
  6. Objetos em movimento (podem ser naves inimigas)
  7. A barra de status, com uma imagem do navio, o número de vidas e três seções que podem preencher
  8. A barra de carga da arma principal, pode ser preenchida até o fim
  9. Um campo de estrelas de rolagem em segundo plano
  10. (não numerado na tela) Objetos sólidos, como pedras ou paredes de metal que fazem parte do plano de fundo

O C64 suporta apenas 8 sprites por linha de varredura horizontal, então não acho que tudo no meio da tela possa ser um sprite? Suponho que qualquer coisa que exija uma colisão seria um sprite (já que posso obter detecção de colisão de hardware com sprites), mas mesmo assim atingi rapidamente o limite de 8 sprites. Além disso, minhas armas podem disparar muito mais que um projétil - minha nave, o satélite e 6 balas já seriam 8 sprites seguidos (observe cerca de 50 segundos no vídeo).

Além disso, qual modo gráfico seria usado em um jogo como esse? O Manual de programação lista o modo de mapa de bits que modifica essencialmente a memória da tela diretamente. É nesse modo que eu normalmente deveria estar trabalhando? Como eu comporia todos os elementos não-sprites juntos para exibi-los na tela?

Muitas coisas na barra de pontuação e status são estáticas ("Área: 01" ou "quadro"), então acho que vou preenchê-las apenas uma vez quando o nível começar. O que precisa ser atualizado - a pontuação, as barras de carga na parte inferior - seria atualizado preenchendo a memória da tela com preto e desenhando a nova pontuação a cada quadro?

Ou tenho que desenhar a tela inteira em todos os quadros?

Michael Stum
fonte

Respostas:

13

No c64, você pode "multiplexar" sprites. Depois de desenhados, você os move para um novo local e os reutiliza. A maioria dos objetos no meio são provavelmente sprites multiplexados. No c64, é muito fácil usar mais de 8 sprites, desde que eles não ocupem as mesmas linhas de varredura horizontais. Além disso, você pode criar sprites de software usando gráficos de fontes, se necessário (projéteis pelo menos nesse caso).

2, 3, 6. É provável que sejam sprites.

4, 5, 9. É provável que sejam "sprites" de software de gráficos de caracteres (8x8 pixels)

O jogo não usaria o modo bitmap, exigiria muita movimentação da memória (a menos que você faça alguns truques de chips VIC ...). O modo usado seria o modo de gráficos de caracteres.

O que você precisa desenhar depende. Nesse caso, se você observar com bastante atenção, há certas estrelas de tamanho padrão (x * y pixel) repetidas, então basicamente você atualizaria a memória de caracteres dessas fontes para emular a rolagem do campo estrela.

Pontuação / status que você preenche no início e atualize-os quando necessário.

Você precisaria atualizar sprites e suas posições em cada quadro. Você também atualizaria projéteis. Além disso, você atualizaria esse padrão de campo estrela x * y pixel.

Apenas velho geezer c64
fonte
5
Observou mais de perto o vídeo Katakis. Alguns desses objetos são realmente gráficos de fonte. Você pode ver olhando as cores usadas. Além disso, o campo estrela não é apenas um pixel X * Y, mas é um pouco diferente, mas ainda está nos gráficos das fontes. Você precisaria atualizar os gráficos das fontes roladas a cada 8 pixels, porque os registros de rolagem de hardware movem apenas os gráficos 8 pixels, depois das trapaças do software. Além disso, você não deseja usar colisões de sprites de hardware. Eles não conseguem diferenciar quais sprites realmente colidem se houver mais de 2 sprites envolvidos. Apenas matemática simples é útil em colisões.
Apenas velho c64 geezer
2

Li um artigo há algum tempo na revista alemã C64. As balas são personagens que agem como sprites como alguém já apontou. Navio e inimigos são sprites.

Os níveis são feitos de personagens também, mas com um toque. Como os níveis são enormes e a memória é preciosa, Trenz escreveu seu próprio conjunto de ferramentas para agrupar caracteres em módulos.

Para que ele possa usar módulos maiores e compor esses. Além disso, ele usaria certos módulos de correção para obter uma interseção agradável e limpa.

Em suma, é um tipo de compactação, onde os níveis são descritos como blocos de construção em vez de char por char.

Você também deve ter notado que, nos Katakis, alguns níveis têm paralaxe.

Isso é feito com um padrão para preencher o plano de fundo, composto principalmente de caracteres 2x2 ou 3x3, e a animação (troca de bits) na direção da rolagem. Por exemplo, o nível rola 2 pixels para a esquerda, o padrão de fundo é rolado 1 pixel para a direita e, portanto, parece ser rolado em um ritmo mais lento.

espero que ajude

Mais uma coisa que você pode ver de fato nos módulos individuais aqui https://archive.org/details/64er_1989_10/page/n27 role para a página 24

Kastor
fonte