L'automne dernier, j'étais à Philadelphie, lors d'une petite
conférence de jeu vidéo. Sur le chemin de l'aéroport, je parlais de l'écriture
des jeux pour l'Atari 800 dans les années 80 et quelqu'un a suggéré que j'ai lu
le livre " Racing the Beam» sur la programmation de l'Atari 2600. Elle
d’écrit bien ce que j'ai fait.
Après avoir lu le livre, j'ai pensé qu'il pourrait être
amusant de jouer un peu avec l'écriture de mon propre code avec la machine. Je
n'avais pas écrit 6502 assembleurs en près de 30 ans, mais il s'avère que c'est
assez facile à ramasser à nouveau car il y a tellement peu d’instruction. Je
n'étais pas sûr de quoi écrire et j'ai donc créé un petit Master Chief de Halo
et fait courir autour de l’écran. J'ai ensuite créé un élite pour lui tirer
dessus. A ce stade, il n'était pas dans mon intention de faire un jeu complet.
La chose que vous devez comprendre à propos de l'Atari 2600,
c'est que c’est une machine incroyablement limité. Il a seulement 128 octets de
RAM et sans changer de banque la taille maximale du programme est un peu plus
de 4000 octels. Il y a seulement deux 8 pixels de large sprites monochromes,
deux balles un pixel, une "boule" et 40 pixels de large fond (et même
que j’exagère ...). Il n'y a pas de mémoire pour stocker l’image à l'écran
comme une console ou un PC moderne, à la place, il doit être établi à une ligne
à la fois en modifiant les valeurs des registres qui contrôlent les sprites et
les arrière-plans. Le processeur est si lent que seulement 76 cycles d'horloge
se produisent, alors une ligne de l'écran est en cours d’élaboration, et les
simples instructions de 6502 prendra au moins 2 cycles d’horloge. Il suffit
donc de dessiner une image du Master Chief et c’est assez difficile. Pour créer
un jeu complet tout en vivant au sein de ces contraintes est beaucoup plus
difficile.
Heureusement, la communauté homebrew Atari a créé une
multitude de ressources pour la wanna be Atari 2600 programmeur. Il est un bel
assembleur et plusieurs excellents émulateurs qui incluent tous le débogage
propose tout programmeur qui le voudrait. Il y a aussi des centaines de pages
de code d'exemple et de documentations pour vous aider dans votre quête.
Comme je suis devenu plus familier avec la machine j'ai
pensé qu'il pourrait être possible de faire quelque chose qui était vraiment
agréable à jouer. J'ai aussi rencontré quelques fans de jeux classiques à la
Game Developers Conference en Mars et ils m'ont encouragé à continuer et
essayer de faire un jeu fini. Au début, j'avais le joueur lutte à travers une
série linéaire de pièces. Il fallait tuer tous les ennemis avant qu'il ne
déverrouille les murs et vous permette de passer à la pièce suivante. Comme
vous pouvez l'imaginer, cela terne assez rapidement. Je le faisais de cette
façon parce qu'il était relativement facile sur l'Atari 2600, mais si, au
contraire, je pourrais faire une carte de 64 chambres le joueur avait à
explorer, un peu comme la vieille aventure de jeu Atari ? Pour mettre en œuvre
cette exigerait que je peux faire un " terrain de jeu asymétrique "
de sorte que certaines chambres peuvent avoir un mur d'un côté mais pas de
l’autre. Il s'avère que c'est assez difficile à faire sur le 2600, au moins
pendant que vous essayez de tout dessiné ce que vous voulez dessiner, mais j'ai
réussi à le faire fonctionner.
J'étais toujours inquiet qu'il n'y aurait pas assez de
variété et j'ai donc créé un genre à part entière de niveau où vous étiez au
volant d'un Warthog sur un terrain vallonné tout Banshees encerclé les frais
généraux et larguent une bombe. Mais comme j'ai progressé sur ce que j'ai
réalisé il y avait deux problèmes : d'abord, il était trop grand. Je m'étais
donné la limite de 4K pour le jeu entier et ma section Warthog était sur 1K
par lui-même et il n'a pas été complète. Deuxièmement, il n'était pas amusant.
Donc, je coupe le niveau Warthog et j’ai essayé de me concentrer sur la
création du jeu de base plus amusant.
Pour ajouter de la variété, j'ai divisé la carte en 4
"zones" : en plein air, la base de l’alliance, monde de glace, et la
zone de boss final. Chacun avait un look unique et des ennemis uniques. J'ai
aussi joué avec la capacité de l’Atari de s'étirer et de dupliquer des sprites
pour créer quelques nouvelles surprises pour le joueur. Ensuite, j'ai ajouté
quelques micros, le joueur pourrait les trouver pour les aider sur le chemin.
A la fin de la carte je voulais avoir une rencontre avec le
patron. Cela a posé plusieurs problèmes. Tout d'abord, les patrons sont censés
être BIG. Comment obtenir ce sentiment dans mon jeu ? Deuxièmement, il a dû
être passionnant. Comment pourrais-je faire la rencontre de patron différent du
reste du jeu ? J'ai résolu le premier problème en écrivant un noyau spécial
Boss pour la salle finale. Le reste de la partie a ce qu'on appelle un " noyau
deux lignes " ce qui signifie que tous les pixels de l'écran sont deux
lignes de balayage élevée. Que faire si je suis passé à un noyau d'une ligne
pour la rencontre patron? Cela rendrait le Master Chief à la moitié de la
hauteur. Que sentiriez-vous si vous venez de marcher dans une grande salle et
la caméra est en mesure de montrer le patron ? Bien sûr, cela signifiait
que je devais faire tout le traitement en une seule ligne (seulement 76 cycles
...) au lieu de deux, mais je l'avais écrit la section Warthog avec un noyau
d'une ligne, donc je savais que c'était possible pour moi de le faire.
Pour faire la rencontre différente j'ai fait un seul grand
patron qui monte et descend l’écran. Il utilise la largeur maximale de sprite à
être large et est de 24 pixels de haut par rapport à 12 pixels pour mes autres
sprites. Je voulais aussi qu'il soit capable de tirer trois missiles à la fois.
Bien sûr, cela a été un problème parce que l’Atari ne supporte que 2 missiles
et j'ai besoin de l'autre pour le Master Chief pour être en mesure de riposter.
J'ai résolu ce par " multiplexage " les missiles ennemis qui
signifie, fondamentalement, si il y a 3 missiles sur l'écran j'attire un cadre
pour chaque trois cadres. Cela a pour effet de les rendre vacillent un peu, mais
il n'est pas mauvais que les missiles se déplacent rapidement. La grande chose
était une fois ce travaillent pour le patron, je pourrais aussi l'utiliser dans
le reste de la partie. Jusqu'à ce point, un seul ennemi peut tirer à tout
moment car il y avait une seule balle pour eux de partager, mais maintenant,
ils pourraient avoir chacun leur propre balle virtuelle et le feu quand ils le
voulaient.
A ce stade, les ébauches du jeu étaient complètes mais il
faut beaucoup de vernis. D'une part, il a été brutalement difficile. Un de mes
testeurs m'a convaincu d'ajouter trois vies au lieu de l’original. Un autre m'a
convaincu que la course dans les arbres ne devrait pas vous tuer, et un autre
m'a finalement obtenu de faire que les murs ne vous tuent pas si vous avez été
accidentellement exécuté en eux. J'ai ajouté l'écran titre pour le moment mais
il a quelques étoiles très spastiques lequel un autre de nos testeurs a fini
par me convaincu à nettoyer. J'ai aussi ajouté des effets sonores et un peu de
la chanson thème de Halo 2 sur l'écran titre.
Tous ces changements ont été apportés supplémentaire
difficile parce que j'étais complètement hors de l'espace. Chaque fois que je
voulais corriger un bug ou ajouter un nouvel effet de son que je devais
retourner dans le code et de réécrire une partie de celui-ci à faire exactement
ce qu'il faisait avant, mais avec moins d'octets de code. Au début, il y avait
des moyens très faciles d'économiser de l'espace, mais, comme vous pouvez
l'imaginer, ce sont de plus en plus difficile quand je regardais quelque chose
que j'avais déjà réécrit deux ou trois fois avant.
Quand nos testeurs se plaignaient qu'il n'y avait rien après
avoir battu le boss, j'ai ajouté le mode légendaire, de sorte que si vous
battez le jeu, vous pouvez jouer tout le chemin à travers elle à nouveau avec
quelques paramètres tordu pour le rendre beaucoup plus difficile.
C'est à cette époque que j'ai découvert l'existence de ce
que j'appelle « Magic Land ». Je travaillais sur un bug avec le boss et
accidentellement je me suis retrouvé complètement en dehors de la salle de la
carte 64. Je me promenais dans la mémoire qui n'a jamais été destiné à être
interprété dans le cadre de la carte, mais le code a été fait de son mieux pour
interpréter ce qui a été lancée sur elle. Étranges, des monstres difformes
m'ont attaqué de façons encore plus étranges que j'ai erré dans ce pays bizarre
que j'avais involontairement créé. J'ai laissé un bug ou deux dans le jeu final
pour permettre aux autres de trouver et d'explorer ce paysage étrange comme je
l'ai fait.
Un des derniers changements que j'ai faits a à voir avec
l'Atari 2600 HMOVE (déplacement horizontal) registre. Fondamentalement, si vous
voulez déplacer un sprite horizontalement alors que l'écran est en cours
d'élaboration (quelque chose que je faisais 3 fois sur chaque écran.), Vous
devez stocker une valeur dans HMOVE . Vous êtes censé faire comme la première
chose sur une ligne de balayage et un effet secondaire de le faire est une
ligne noire laid sur un pouce de large sur le côté gauche de l’écran. Vous
verrez ces lignes noires sur presque tous les jeux Atari. Dans les temps
anciens, il était un peu difficile de voir sur un écran de télévision
phosphore, mais sur un téléviseur ou un écran d'ordinateur moderne, il est tout
à fait clair. Certains jeux masquer en ayant un fond noir ( pas de quelque
chose que je voulais faire ) ou en le faisant chaque ligne si tout le côté
gauche de l'écran est noir ( pas non plus grand pour le look que je voulais ) ,
j'ai donc dû genre de admis qu'il était inévitable et avait appris à l'ignorer,
mais à chaque fois j'ai montré le jeu à quelqu'un qui n'était pas familier avec
les jeux Atari , l'une des premières choses qu'ils me demandent est «ce sont
les lignes noires laides ? "
Lors de la lecture par le biais de la documentation , j'ai
remarqué qu'il était possible de faire un " HMOVE précoce» qui vise le
stockage à la HMOVE enregistrer quelques cycles d'horloge avant le début de la
ligne de balayage et que, dans ce cas, il n'a pas agi comme il était censé (
les choses ont évolué d'une manière drôle ), mais si vous pouviez faire
exactement sur le bon programme ( cycle de 74 dans mon cas ), puis la ligne
noire ne semble jamais à l'écran. J'ai écrit un programme de test simple avec des
canards qui vont et viennent sur l'écran pour me prouver que je pouvais
compenser le comportement fou causés par cette HMOVE début, font les canards se
déplacer comme je voulais qu’ils, et ne jamais avoir de voir que laid ligne
noire. Cela m'a donné la confiance nécessaire pour retourner dans mon noyau
principal et mettre en œuvre le début HMOVE dans Halo 2600 à se débarrasser des
lignes noires pour de bon.
C'est à peu près l’histoire. Je n'aurais pas pu faire le jeu
sans les incroyables ressources disponibles sur AtariAge.com et les nombreux
sites vers lesquels il pointe. Tout le travail que vous voyez dans le jeu est
la mienne, sauf pour quelques-uns des sprites qui ont été établis par Mike Mika
qui était un grand encouragement et de l'aide tout au long du processus. Chris
Charla , Colin Williamson , Tom Russo , Ian Bogost , et Albert Yarusso tous
m'ont aidé par playtesting et en essayant de parler sens en moi quand j'étais
têtu de ne pas fixer un certain problème flagrant .
J'espère que vous aurez autant de plaisir à jouer Halo 2600
comme je l'avais fait-il.
Ed Fries -
(En passant, vous venez de lire plus de 10 000 caractères
(octetsvg+ ), soit environ deux fois et demi la taille de l'ensemble de Halo
2600)
Voici une version de latari Version Halo
Aucun commentaire:
Publier un commentaire