#random-posts img{float:left;margin-right:10px;border:1px solid #999;background:#FFF;width:36px;height:36px;padding:3px}

15 août 2014

Halo : Waypoint - Jeux - Halo 2600

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