En quoi consiste exactement un écran dans un jeu C64 typique?

10

J'essaie de comprendre les bases du développement de jeux C64 après BASIC, et je pourrais utiliser quelques conseils sur quelque chose de très basique, mais important: qu'est-ce que tout cela à l'écran et comment le dessiner?

Jetez un œil à Katakis / Denaris :

Capture d'écran de Katakis

Il y a au moins 9 choses différentes à l'écran:

  1. La barre de score, avec différentes polices
  2. Le navire lui-même
  3. Un satellite attaché au navire, détachable
  4. Projectiles d'armes secondaires
  5. Projectiles d'armes primaires
  6. Objets en mouvement (peuvent être des navires ennemis)
  7. La barre d'état, avec une image du navire, le nombre de vies et trois sections qui peuvent remplir
  8. La barre de charge de l'arme principale peut se remplir jusqu'à la fin
  9. Un champ stellaire défilant en arrière-plan
  10. (non numéroté à l'écran) Objets solides comme des roches ou des murs métalliques qui font partie de l'arrière-plan

Le C64 ne prend en charge que 8 sprites par ligne de balayage horizontal, donc je ne pense pas que tout au milieu de l'écran puisse être un sprite? Je suppose que tout ce qui nécessite une collision serait un sprite (car je peux obtenir une détection de collision matérielle avec des sprites), mais même alors, j'ai rapidement atteint la limite de 8 sprites. De plus, mes armes peuvent tirer beaucoup plus d'un projectile - mon vaisseau, le satellite et 6 balles seraient déjà 8 sprites d'affilée (regardez environ 50 secondes dans la vidéo).

De plus, quel mode graphique un jeu comme celui-ci utiliserait-il? Le manuel de programmation répertorie le mode Bit Map qui modifie essentiellement la mémoire de l'écran directement. Est-ce le mode dans lequel je devrais habituellement travailler? Comment puis-je composer tous les éléments non-sprite ensemble pour les afficher à l'écran?

Beaucoup de choses dans la partition et la barre d'état sont statiques ("Area: 01" ou "frame"), donc je suppose que je ne les remplirai qu'une fois quand le niveau commencera. Les choses qui doivent être mises à jour - le score, les barres de charge en bas - seraient mises à jour en remplissant la mémoire de l'écran avec du noir et en dessinant ensuite le nouveau score à chaque image?

Ou dois-je dessiner la totalité de l'écran sur chaque image?

Michael Stum
la source

Réponses:

13

Sur c64, vous pouvez "multiplexer" les sprites. Une fois qu'ils sont dessinés, vous les déplacez vers un nouvel emplacement et les réutilisez. La plupart des objets au milieu sont probablement des sprites multiplexés. Dans c64, il est très facile d'utiliser plus de 8 sprites tant qu'ils n'occupent pas les mêmes lignes de balayage horizontales. En plus de cela, vous pouvez réellement créer des sprites logiciels en utilisant des graphiques de police si nécessaire (des projectiles au moins dans ce cas).

2, 3, 6. Ce sont probablement des sprites.

4, 5, 9. Ceux-ci sont susceptibles d'être des "sprites" logiciels de graphisme de caractères (8x8 pixels)

Le jeu n'utiliserait pas le mode bitmap, il faudrait trop déplacer une mémoire (à moins que vous ne fassiez quelques tours de puce VIC ...). Le mode utilisé serait le mode graphique de caractères.

Ce que vous devez dessiner dépendrait. Dans ce cas, si vous regardez de plus près, il y a certaines étoiles de motif de taille (x * y pixel) qui sont répétées, donc vous mettriez à jour la mémoire de caractères de ces polices pour émuler le défilement de Starfield.

Score / statut que vous remplissez au démarrage, puis mettez-les à jour si nécessaire.

Vous devrez mettre à jour les sprites et leur position à chaque image. Vous mettriez également à jour les projectiles. Vous mettriez également à jour ce motif de champ d'étoiles de x * y pixels.

Just old c64 geezer
la source
5
Regardé de plus près sur la vidéo Katakis. Certains de ces objets sont en fait des graphiques de polices. Vous pouvez réellement voir en regardant les couleurs utilisées. De plus, Starfield n'est pas en fait juste un pixel X * Y, mais légèrement différent, il est toujours dans les graphiques de police. Vous devez mettre à jour les graphiques des polices défilées tous les 8 pixels, car les registres de défilement matériel ne déplacent que les graphiques 8 pixels, ce qui est une ruse logicielle. En outre, vous ne souhaitez pas utiliser les collisions matérielles de sprites. Ils ne peuvent pas différencier les sprites qui entrent en collision s'il y a plus de 2 sprites impliqués. De simples calculs mathématiques sont utiles dans les collisions.
Just old c64 geezer
2

J'ai lu un article il y a quelque temps dans le magazine allemand C64. Les balles sont des personnages qui agissent comme des sprites comme quelqu'un l'a déjà souligné. Le navire et les ennemis sont des sprites.

Les niveaux sont faits de personnages aussi mais avec une touche. Étant donné que les niveaux sont si énormes et que la mémoire est précieuse, Trenz a écrit son propre ensemble d'outils pour regrouper les personnages en modules.

Il peut donc utiliser des modules plus grands et les composer. Il utiliserait également certains modules de correctifs pour obtenir l'intersection des modules agréable et propre.

Dans l'ensemble, c'est une sorte de compression, où les niveaux sont décrits comme des blocs de construction au lieu de caractère par caractère.

Vous remarquerez également que dans Katakis, certains niveaux ont des arrière-plans de parallaxe.

Cela se fait en ayant un motif pour remplir l'arrière-plan, principalement composé de caractères 2x2 ou 3x3, et en l'animant (bit-shifting) dans le sens contraire du défilement. Par exemple, le niveau défile de 2 pixels vers la gauche, le motif d'arrière-plan défile de 1 pixel vers la droite, il semble donc qu'il défile à un rythme plus lent.

J'espère que cela pourra aider

Une dernière chose que vous pouvez réellement voir les modules individuels et tels ici https://archive.org/details/64er_1989_10/page/n27 faites défiler jusqu'à la page 24

Kastor
la source