Cobra, The real Story by his author: Philippe Marti |
So, i try to remember how i wrote "Cobra" , 26 years after it's a little bit confused in my memory (i'm not so young :-) ) So i apologize for approximations.
I began to code "Cobra" in 1984, i was in 5th form in high school, the second one because i played toomuch with "Dungeons & Dragons" 1 year before.... Ce qui veut dire que j’avais pas mal de temps libre, j’avais déjà fait l’année après tout... :-) De plus, il y avait trop de choses qui bougeaient à l’époque, les ordinateurs personnels poussaient comme des champignons, Bill Gates et Steve Jobs étaient déjà des légendes, les images de synthèse me fascinaient, les films d’Hollywood aussi (Tron, Wargames, Short Circuit)... ZX81 Sinclair Cet été, le macintosh m’avait carrément coupé le souffle, et plein de gens écrivaient leurs jeux . Il y avait comme une atmosphère de ruée vers l’or mais surtout de créativité. A mon club d’informatique (Micr’Oric 06 à Nice) il y avait un paquet de gens très très bons et les bonnes idées fusaient. Certains eurent d’ailleurs un brillant avenir (un est un prolifique créateur de jeux de plateau et l’autre est directeur de recherche à L’INRIA, par exemple). J’avais commencé trois ans auparavant avec un ZX81 et j’avais déjà écrit mes propres jeux en basic, mais rien de très sérieux. Mes copains me montraient à quel point le language assembleur était puissant et rapide et je m’essayais à écrire mes propres routines. Restait à trouver une idée de jeu... Je voulais faire une version de froggy mais quelqu’un l’avait déjà fait. :-( Les bons jeux ne manquaient pas à mon arcade local mais certains de mes préférés étaient au dessus de mes compétences (defender, joust ou battle tank). Une Borne d'Arcade |
Snake (ou nibbler) était un jeu qui me plaisait beaucoup et je me disais que ça serait très facile à faire. J’ai commencé par écrire l’algo pour bouger le serpent en basic mais c’était déjà trop lent et il était impossible de l’accélérer au fûr et à mesure des tableaux supérieurs. Alors j’écrivis la routine de dessin du serpent en assembleur. Je l’ai testé et le serpent s’est précipité instantanément contre le mur ! Impeccable, mais bien trop rapide ce coup-ci. Il a fallu rajouter une pause. Si ma mémoire est bonne, j’ai essayé une série de NOPs pris en sandwich dans une boucle controlée par une case mémoire, comme ça, super facile de controler la vitesse du serpent. Les nops étaient assez inutiles mais ca me rassurait plus qu’une boucle complètement vide. :-) Ensuite, j’ai écris la routine pour le chronomètre car là aussi, pas moyen de la faire en Basic sans tout ralentir. C’est une routine qui est attachée à un vecteur IRQ et donc qui est appelée a intervalles réguliers. On s’en rend bien compte lorsque l’on CTRL-C le programme en plein milieu du jeu (pour la version déplombée) et on peut voir les caractères au milieu de la première ligne continuer à gigoter et s’incrémenter, même quand le programme Basic s’arrête. Pour les mouvements du serpent, il y avait deux choses à prendre en compte, la tête et la queue. La tête bouge selon les commandes du clavier ou sinon, selon la dernière direction entrée par le joueur. Ensuite, si la tête ne passe pas au dessus d’un fruit, on doit faire reculer la queue: il suffit de mémoriser la position de la queue et d’afficher un espace dessus et ensuite, regarder les quatre directions adjacentes pour déterminer la nouvelle position de la queue. Si la tête passe au dessus d’un fruit, on ne fait rien pour la queue et le serpent s’allonge. Si la tête passe au dessus d’un mur, on meurt. Rien de sorcier, je suis sur que vous aviez tous déjà deviné tout ca... |
Dans cette boucle, on teste aussi si le chrono est arrivé à 9999. En regardant le code aujourd’hui, je me rends compte à quel point c’est un vrai cauchemar de fouillis ! J’ai rajouté plein de commandes sur chaque ligne, c’est vraiment pas lisible et ça me rappelle une anecdote avec l’éditeur Norsoft.
Ce qui m’amène à la deuxième partie de l’histoire de Cobra: Une fois Cobra fini, j’ai envoyé quelques lettres à des éditeurs. Je ne me rappelle plus du tout à qui mais Norsoft était l’un d’eux. Norsoft à l’époque venait juste de sortir Tyrann, avait des pages entières de publicités dans les grands magazines d’info "Science et Vie Micro" mais aussi "Jeux et Stratégies", un de mes magazines préférés. Et en bas de leurs publicités, il y avait une annonce pour les développeurs. (Je viens de trouver sur votre site sublime, une pub similaire : Donc Norsoft reçut aussi une lettre et une cassette... Quelques jours plus tard, je reçois un coup de fil d’un des auteurs de Tyrann. Je crois que c’était Remy mais je ne suis pas sûr. J’étais tellement excité que je me souviens juste qu’on avait discuté de Tyrann, de la force de sa protection logicielle (un copain et moi l’avions craqué sans trop de problème, il n’était pas enchanté de l’entendre) et finalement, une demande qui me laissa bien embarrassé:
“C’est pas mal ton jeu mais il faut qu’il soit compatible pour deux joueurs !”. Je dis oui oui pas de problème, mais j’étais vraiment sans une seule idée de comment faire ça... Je passe la soirée à voir comment je pouvais réaliser ce qui semblait être un tour de magie. A l’époque j’étais un programmeur amateur sans aucune expèrience de structure de données et après avoir bidouillé sans succès sur le plat de spaghettis qu’était devenu Cobra, je suis allé me coucher ce soir là très très dépité. Le lendemain je me reveille et la solution était en face de mes yeux: toutes les variables qui géraient mon joueur (nombre de vies, numéro du tableau, etc...) pouvaient simplement devenir une variable indéxée comme V devient V(1) pour les vies du premier joueur et V(2) pour le second joueur. Simple ! |
Cet épisode m’a montré à quel point il ne faut pas dénigrer un langage plutôt qu’un autre. A l’époque je vivais dans le culte de l’assembleur que je considérais pour les initiés, l’élite, et le Basic pour les mauvais.
Ca m’a remis les pendules à l’heure sur les avantages d’utiliser le langage adapté pour une tache bien précise: L’assembleur pour l’affichage et le temps réel et le Basic pour tout ce qu'il y à derrière et qui nécessite de la maintenance ou des modifications rapides. Une fois le jeu complètement fini et Norsoft satisfait du résultat, il ne restait plus qu’à faire la jaquette et commercialiser le jeu. Ce fût fait en quelques mois. Ce qu'il y avait de bien avec Norsoft c’était que c’était une petite boite de passionnés et ils m’ont inclus dans les décisions pour choisir la jaquette par exemple. C’était sympa. Finalement, vint le moment crucial de la paye. |
Je recus 2000 francs d’avance sur recettes mais comme les ventes du jeu n’arrivèrent pas à ce niveau, Norsoft me reclama la différence quelques mois plus tard. Malheureusement j’avais tout dépensé déjà et je n’ai jamais pu les rembourser. De plus, dans le milieu des livres, il est de tradition de ne jamais rembourser l’avance sur recettes, donc, je me sentais un peu moins coupable. Mais si vous lisez ces lignes, Rémy et Matthias, je vous prie d’accepter mes excuses quand même... Le problème, c’est que pendant 26 ans, j’ai toujours cru que mon jeu n’avait plu à personne, qu’il était naze ! J’aimais bien mon propre jeu (encore que je n’étais pas fier de l’implémentation) mais je pensais que c’était de l’amour paternel aveugle ! :-) Bref, quand un copain d’enfance de cette époque (merci Seb !) m’a envoyé le lien il y a quelques jours de cela et que j’ai vu les pages consacrées à Cobra sur votre site manifique, j’ai littéralement sauté de joie avec presque 3 décennies de retard ! :-) |
Voila, sinon, après Cobra, sur les encouragements de Norsoft, j’ai essayé de faire un autre jeu (Moon Landing) avec plus d’assembleur (mais toujours du Basic !) plus de graphiques HIRES et des caractères complètement différents du jeu standard. Ma philosophie à l’époque était de donner l’impression au joueur qu’il n’a plus un Oric dans les mains. J’étais influencé par le Macintosh, les jeux comme DPTLQ ou Damzel et aussi par le dernier microdisk avec cet operating system d’enfer dont j’ai oublié le nom. Malheureusement, un peu dépité par les maigres recettes de Cobra, le fait que Norsoft ne risquait pas de me rééditer et aussi par mes études qui devenaient plus sérieuses, j’ai laissé ce jeu dans les cartons. :-( Par la suite je me suis intéressé à la robotique et je me suis servi de la carte mere de mon Oric-1 pour réaliser des véhicules semi-autonomes mais le temps de développer des jeux était bel et bien fini: je suis passé a l’Atari, suis parti faire des études supèrieures, mais quoi qu’il arrive, je n’ai jamais oublié mon Oric (et Cobra)... :-) Merci a tous les hobbyistes passionnés pour votre incroyable dévouement pour ce jeu. Ca me fait chaud au coeur ! |