Hardcore Retrogaming

Démarré par upsilandre, Novembre 09, 2013, 04:00:23 PM

« précédent - suivant »

upsilandre

#30
Oui c'est vrai que j'aime bien l'idée d'ameliorer un peu, c'est ca aussi qui est interressant c'est que meme sur les jeux les plus minimalistes tu peux avoir une reflexion de gamedesign.
La barre de vie c'est une sorte de score inversé (plutot que d'atteindre un score X pour gagner, on part d'un score X et c'est celui qui atteind zero qui a perdu) je pourais le faire mais ca ne devrait pas changer grand chose du coup comme dit Hobes je préfere quand meme rester un minimum fidele a l'original (c'est Combat2013  :fou: ) et l'excercice etait aussi de representer un score a 2 digits qui etait une difficulté en soit, a voir...

Les items c'est chaud, aujourd'hui j'ai tenté d'ajouter mon item boost mais manque de bol le fait d'ajouter ca a mon moteur d'affichage en plus des 2 players, 2 obus et le playfield, ca a suffit a faire depasser le temps d'execution au dela des 2 scanlines de budget que j'ai. Du coup j'ai du remanier mon moteur d'affichage pour gagner quelques cycles CPU et faire a nouveau entrer tout ca dans mes 2 scanlines.

Maintenant c'est bon ca marche je peux afficher un item mais du coup j'ai pas avancé. De plus cette item je peux lui donner une seul forme (celle d'un petit carré de la meme couleur que le playfield) donc je peux meme pas l'utiliser pour representer d'autres items aleatoire car on ne pourait pas les distinguer donc faut choisir et booster la vitesse du tank c'est pas mal vu le contexte du jeu.

Faut de toute facon rester raisonnable, ca fera deja suffisement de petites ameliorations, je vais pas rester dessus trop longtemps et les limites de la machines sont bien plus contraignante qu'on ne l'imagine en regardant les jeux (bourés de tricks).


upsilandre

Citation de: Hobes le Novembre 18, 2013, 02:58:01 PM
En fait je ne l'avais pas sur Atari 2600 mais sur Interton VC4000 :
http://www.hautbasgauchedroite.fr/forums/index.php/topic,43.msg79772.html#msg79772

Mais j'imagine que le jeu était le même. Quand on appuyait sur un bouton ça changeait les couleurs et la position des murs. J'avais l'impression de jouer à un autre jeu :crazy:

Oui c'est vrai t'as raison, c'est pas le meme jeu mais on voit clairement qu'ils ont tenté de faire une bete copie de Combat qui etait le jeu qui a lancer l'Atari2600, devait pas y avoir grand chose d'autre a copier a cette epoque. T'as peut etre meme trouver le premier plagia du jeu video (quoiqu'il y a eu le pong et le ping pong de l'Odyssey mais j'ai du mal a considerer l'Odyssey comme du jeu video contrairement au Pong)

upsilandre

Par contre a la fin il me faudra un beta testeur pour tester au moins une fois quand meme :) (mais faut etre 2 pour y jouer c'est ca qui est chiant, j'ai pas encore implementer de mode online :D )
Donc vous pouvez deja commencer a DL l'emulateur  :o http://stella.sourceforge.net/downloads.php

upsilandre

Aujourd'hui je repensais a Joust un autre jeu culte de l'Atari2600 fin de periode que j'avais adoré et je me demandais comment ils avaient fait pour animer tous ces sprites animés independants, Jusqu'a 6 a l'ecran.
Alors on comprend vite qu'ils s'arrangent pour qu'il n'y en ai jamais plus de 4 par scanline mais meme 4 sprites totalement independants (pas comme les aliens de Space invaders) sur la meme scanline c'est impossible!

En fait j'avais pensé a la possibilité de decharger ton moteur d'affichage non pas seulement sur 2 scanlines comme on le fait classiquement mais aussi sur 2 frames (une frame t'affiche la moitié des sprites et l'autre frame les autres) mais j'avais pas le souvenirs d'un effet de flickering sur les sprites du jeu et sur l'emulateur aucun flickering visible... jusqu'a ce que je pense a deplacer l'emulateur sur mon plasma et la oui j'ai pu voir le flickering original sur les sprites  :D (une frame sert pour afficher les 2 sprites du joueurs et l'autres frames pour les 2 sprites ennemies) et effectivement en le voyant ca m'a rappelé des souvenirs.

Donc pour une experience plus authentique ca sera donc filtre composite + plasma  :cool:

upsilandre

J'ai terminé la mise en place du bonus "boost"  :crazy:
C'est donc un item (juste un carré qui clignote) qui au bout d'un certain temps de jeu apparait de facon aleatoire dans l'un des 4 coins de la map ou au centre. Si un joueur le prend alors le tank du joueur se met lui meme a clignoter pendant un certain temps et obtient un boost de vitesse de deplacement et de rotation tres utile. Ensuite ca s'arrete puis plus tard un autre boost apparait sur la map aleatoirement ect...
Ca marche parfaitement bien :)

Et pour la symbolique je viens tout juste d'atteindre les 50% d'occupation de la RAM. 64 octets sur 128. a titre de comparaison une PS4 c'est environ 9 milliards d'octets de RAM

L'aire de rien je me rend compte que la majorité de mon temps je le passe a optimiser mon code, je pourais souvent choisir la facilité et faire mon code tel qu'il me vient au premier jet mais je ne peux pas m'empecher de chercher chaque fois la meilleur solution en terme d'occupation ROM ou RAM (parfois aussi le temps d'execution mais en dehors du moteur graphique le temps d'execution n'est pas un probleme, je dois prendre a peine 10% du temps CPU or phase d'affichage ou la t'es a +95%) alors qu'en vrai j'en ai pas besoin j'ai largement asser de place en ROM ou en RAM  pour le finir sans faire aucun effort d'optimisation mais c'est aussi ce qui donne du sens a l'excercice.





AdamsVibe

tout simplement excellent.

C'est vraiment interressant et tout de suite, tu te rends compte de la préoccupation de l'époque : optimisation .
J'ai vite fait commencé à coder. Je te demanderai certainement des conseils pour certaine chose.

Rien de bien compliqué, il faut juste procéder par petite étape :D.

upsilandre

#36
ouai faut y aller tranquille et de toute facon on a pas forcement du temps a y consacrer
Ce que j'aime beaucoup dans ce cas particulier de l'Atari2600 c'est qu'on est au comble du minimalisme et donc y a cette sensation agreable de pouvoir vraiment en faire le tour pour une fois.
Y a meme pas besoin de savoir faire du graphisme ou de la musique et meme programmer y a pas besoin de savoir tu peux apprendre sur le tas et te confronter directement aux particularités du systeme.

Pour la NES on passe deja a une forme professionnel du jeux video, vaut mieux deja avoir une experience dans le devellopement de jeux video et avoir du soutient (graphisme, musique)

upsilandre

#37
J'ai ajouté le dernier element de gameplay, la sequence qui s'enclenche lorsque un tank est touché par un tire adverse. J'ai finallement reprit le choix fait sur l'original qui est le plus judicieux.
Le tank touché se met a tourner sur lui meme et est expulsé sur une certaine distance dans la direction de l'impacte.
Pendant cette sequence les collisions sont désactivées (ainsi que les inputs des 2 joueurs) pour que le tank touché passe au travers des murs le bute etant d'eloigner les 2 joueurs pour "redistribuer les cartes" apres un tire victorieux et ne pas pouvoir enchainer immediatement un autre kill.
Il a fallut aussi gérer le "out of bounds" quand le tank touché est expulsé en dehors de l'ecran/zone de jeu pour qu'il réaparaisse de l'autre coté. La transition est nickel et aucun bug a priori. Je suis satisfait du resultat, tout est tres propres.

Je vous met la ROM de cette dernier version qui du point de vue du gameplay est terminé (mais y a pas encore les bruitages) donc si quelqu'un veut beta testé et chercher si y a des bugs...
http://www.petit-fichier.fr/2013/11/24/combat2013v07-1/


J'ai aussi optimisé encore un peu mon moteur d'affichage car finallement c'etait encore possible (notement en exploitant le registre de stacking comme buffer temporaire) et ainsi pour pouvoir ajouter une option de selection d'autres arenes de jeux personnels (pour l'excercice et pour utiliser le bouton "game select" comme dans l'original)



Hobes

Ca marche plutôt bien. J'ai tenté de me mettre le long d'un mur et tirer (et espérant me planter dans le décor avec le recul) mais c'était prévu. Bon en solo c'est vite limité. Te reste à gérer une IA :ninja:

upsilandre

Citation de: Hobes le Novembre 24, 2013, 05:01:34 PM
Ca marche plutôt bien. J'ai tenté de me mettre le long d'un mur et tirer (et espérant me planter dans le décor avec le recul) mais c'était prévu.

Effectivement c'etait prevu :)  (par contre entre temps j'ai ajusté un autre petit truc, quand on se fait touché alors qu'on avait le boost maintenant on le perd aussitot ce qui n'etait pas le cas)


CitationBon en solo c'est vite limité. Te reste à gérer une IA :ninja:
Pourquoi pas mais ca me parait compliqué :vice:, c'est pas pour rien que le jeu video est né par le versus. On a tendance a l'oublier mais au depart le jeu video c'etait principalement du versus car c'etait la facon la plus simple d'avoir une couche d'interaction complexe sur des machines minimalistes.

De toute facon apres Combat je dois m'occuper de SpaceInvaders, au moins celui la on poura y jouer tout seul.



upsilandre

J'ai ajouté une seconde arène pour le principe. On switch d'une arène a l'autre avec le bouton "game select" de la console (F1 sur l'emulateur). Ca sert aussi de reset.
http://www.petit-fichier.fr/2013/11/24/combat2013v08/

Bon maintenant j'y touche plus. j'y suis presque  :lick:
Me reste plus qu'a faire les bruitages. C'est pas ce qui me passionne le plus mais j'ai pas du tout touché a cette aspect donc faut s'y mettre. ca va demander pas mal de test, ca sera pour la semaine a venir.

j'ai calculé qu'il me reste 275 octets pour faire les bruitages si je veux faire tenir mon jeu sur une cartouche 2Ko (comme l'original) au lieu des 4Ko auquel on a acces par defaut (qui est la cartouche typique sur Atari2600). Pourquoi pas, ca devrait etre faisable.

upsilandre

Ca y est je me suis occupé de la partie audio!

L'audio sur Atari2600 est comme le reste, minimaliste et asser simple a utiliser.
C'est pris en charge par le processeur video comme souvent dans les consoles.
Ici y a pas 256 ou 512 voix mais 2... et y a pas a hesiter entre du son 16bit ou 24bit, c'est du son 1bit.
Une frequence de 31,4khz (le TIA envoie 2 bits d'audio a chaque scanline) qu'on peut reduire par l'intermediaire d'un registre qui fait diviseur de frequence (de 1 a 32), un autre registre pour gerer le volume de chaque voix (0 a 16) et un 3eme pour selectionner une pattern du generateur de son.

Y a un generateur de son tres simple qui a l'aide d'un simple registre interne (et une simple combinaison de decalage de bit + un XOR entre 2bits du registre qui est répété indefiniment) va produire en output une sequence de bits qui peut aller jusqu'a une chaine unique de 500bits avant de revenir a sont etat initial et donc repeter la sequence.
Ce generateur peut donc générer une dizaine de sons differents (certain pure d'autre plus complexe notement les 3 qui sont composé d'une sequence de 400/500 bits).
Voila donc c'est asser simple, 2 Voix et 3 registres par voix soit seulement 6 registres pour gerer l'audio.

Le premier truc que j'ai fais c'est deja de coder un petit programme pour ecouter et selectionner un par un les differents sons du générateur et faire varier les frequences a la demande (et afficher le code binaire des registres pour savoir a quoi correspond chaque son) pour avoir un apercu de ce qui etait disponible et faire un choix sinon t'es a l'aveugle.
C'etait amusant a utiliser la premiere fois car en ecoutant les sons tout de suite tu visualises les jeux auquels correspondent certains sons du generateur bien identifiable. J'ai tout de suite reconnu "Pole Position" ou "Defender" mais aussi le bruit du moteur des tanks de "Combat" ce qui tombait bien.

Par contre pour le son des tires du tank je savais pas trop vers quoi me diriger et truc de dingue je fais un essai avec l'un des son que j'ai activé 16 frames en decrementant le volume a chaque frame et au miracle je retrouve pile poile le meme bruitage de tire que dans l'original, dingue!

Par rapport a l'orginal j'ai ajouté une 3eme variante du bruitage du moteur (a l'arret, en deplacement et en boost) et j'ai ajouté aussi un bruitage quand le tire touche un mur (en plus de celui quand on touche l'adversaire)
Je verrais si j'ajoute aussi un bruitage quand on chope l'item.
Plutot que d'utiliser une voix pour chaque joueur j'ai utilisé une voix pour les bruits de moteur et une voix pour les bruits de tires/collisions. au niveau de la superposition des sons c'etait plus interressant je trouve.



Tout ca m'a couté moins de 100 octets du coup il me reste encore pas mal de place meme quand je me bride a une cartouche 2ko donc je vais ajouter encore 2 autres arènes pour remplir ma cartouche 2Ko (ca fera un choix de 4 arènes) et faire quelques modifs de derniere seconde avec les quelques octets qui restera (je vais pas laisser plus de 10 octets vide sur la cartouche, on est sur atari2600 bordel!)

et je suis toujours a 50% de RAM (64 octets) malgres la mise en place de la sequence de kill et de l'audio car j'ai fais quelques optimisations qui ont compensé.
Je vous mettrais la ROM final quand j'aurais terminé demain ou apres demain.


upsilandre

Mon combat2013 est Gold.
la ROM 1.0 qui cette fois est une vrai ROM de 2Ko (et toujours seulement 64 octets de RAM)
http://www.petit-fichier.fr/2013/11/27/combat2013v1-0/

l'emulateur
http://stella.sourceforge.net/downloads.php


j'ai encore reussis a optimiser du coup j'ai pas ajouté 2 arènes mais 4 pour un total de 6 (touche F1 pour changer d'arène) et il reste seulement 6 octets libres sur la cartouche!
Y a encore une tres grosse optimisation que je pourais faire mais qui necessiterait de revoir quasiment tout le code. Peut etre dans une V1.1 si j'ai le courage de relever le defie, c'est tentant.


Apres ca j'hesite entre refaire un Space Invader, un PacMan ou un Pole Position. Ils ont apriori chacun leur tricks auquels il peut etre interressant de se confronter, c'est clairement autre chose que Combat.
Je pense  que je vais rester sur ma premiere idée de Space Invader car y a un vrai defie au niveau du moteur d'affichage qui est la partie la plus chiante car CPU bound.
Mais avant je ferais une pause en allant lire un peu ce que font les autres car pour l'instant je suis rester en vase clos avec comme seul source le document technique qui integre toutes les informations mais y a des forums ou y a sans doute des temoignages qui peuvent etre interressant et donner des idées. Maintenant que j'ai un bagage Atari2600 ca sera sans doute plus interressant a lire.

Apres j'aimerais bien peut etre tenter de faire un bomber man, je vois pas comment ca sera possible mais ca peut etre interressant d'au moins se poser la question jusqu'a ou on peut reduire et minimaliser le concept de Bomberman qui est deja un concept epuré mais je pense que j'irais faire un tour sur NES avant ca car ca sera dure d'attendre aussi longtemps. Le meilleur moment c'est quand meme la premiere semaine de decouverte d'une machine ou t'apprend plein de truc avec son lot de révélation.

upsilandre

Finallement j'ai pas pu resister a faire la derniere grosse optimisation que je voulais faire car ne pas la faire c'etait comme si toutes les autres optimisations que j'ai fais ne servait a rien
Je pensais que ca serait une grosse galere mais finallement ca c'est bien passé et j'ai pas economisé 5 octets, ni 20, ni meme 100 mais 323 octets!! (16% de la cartouche)

Du coup si je trouve encore 7 octets a economiser je vais pouvoir ajouter pas une ou deux map mais 7 de plus! (pour un total de 13 donc je fais plus que doubler les maps/arènes) ca sera la "GOTY edition" de Combat2013 avec tous les DLC inclus :cool:

Le code du jeu tiens presque dans 1Ko maintenant, le reste c'est pour les datas (ce qui me laisse quand meme penser qu'un minimum de 2Ko est bien la limite inferieur necessaire pour faire un jeu. Dailleurs sur la toute premiere console, la Fairchild, les cartouches faisaient aussi 2Ko)

upsilandre

Cette fois j'ai bouclé definitivement mon premier jeu Atari2600 que j'ai renomé Tank2600 pour cette version 1.1   :o 

Comme j'avais dis precedement j'ai ajouté des maps pour remplir tout l'espace ROM que j'avais liberé mais malheureusement pas possible d'en mettre 13 pour une raison d'indexation limité a 8bit dans mon moteur d'affichage (et pas possible d'ajouter des instructions dans ce moteur, le CPU est deja a 100% d'occupation) donc j'ai du me contenter de 10 Maps (ce qui est deja tres bien de toute facon).

Du coup il me restait encore 129 octets donc gros dileme car pour avoir le gout du travail achevé fallait que je trouve des trucs a ajouter. Je peux pas laisser autant d'espace inutilisé donc je me suis remis un petit peu au boulot. J'ai hesité entre ajouter des bruitages ou un ecran titre, j'ai choisie l'ecran titre.

Donc j'ai ajouté un petit ecran titre avec le nom du jeu (Tank 2600) et un petit effet de couleur bien kitch mais je voyais bien que ca m'avait demandé pas mal d'instructions et datas donc je commencais a douter.
Et la oh miracle apres avoir testé que ca fonctionne bien je verifie combien ca prend de place et ca tombait pile poile a 2 octets pret. Ca depassait de 2 octets que j'ai pas eu trop de mal a recuperer ailleurs (2 octets c'est grossomodo juste une instruction a enlever quelque part)
Et voila j'ai une ROM 2ko full a 100% et un jeu relativement complet maintenant. Je peux passer a autre chose avec le sentiment du travail accomplie.

Un dernier truc interressant a constater. Le ratio Code/Data est de l'ordre de 60% code et 40% data. C'est moins que j'imaginais (en me limitant a 2Ko je pensais plutot me retrouver avec 80 a 90% de code) mais c'est bien sure infiniment plus que sur les jeux d'aujourd'hui qui sont constitués essentiellement de datas



Voila donc la version final v1.1
http://www.petit-fichier.fr/2013/11/30/tank2600/


Les 10 Arènes du jeu