Forums de Grospixels
Bienvenue sur le forum de Grospixels : [ S'Enregistrer ]
Déjà inscrit ? [ Connexion ]
 
retour sur le site
rechercher
Index du Forum » » Groblogs » » Groblog Odysseus: à la découverte du hacking de ROM
17 messages • page
1
Auteur Groblog Odysseus: à la découverte du hacking de ROM
Odysseus
Pixel planétaire

Score au grosquiz
0004305 pts.

Joue à lâcher trois poissons-ballons sur la ligne de départ.

Inscrit : Sep 15, 2002
Messages : 10891
De : Αἰαία

Hors ligne
Posté le: 2014-10-26 00:02


Qui, au détour d'un ROMset douteux, n'a pas croisé un hack de Sonic où le célèbre hérisson bleu est remplacé par Mario? Qui, en confondant malencontreusement l'original de Megaman 2 avec l'un de ses nombreux hack, n'a pas halluciné devant les clignotements vert-orange de l'écran à chaque pression du bouton de tir?
Mais qui a modifié ces jeux? Qui sont les vils malandrins qui ont osé toucher au sacro-saint Mario Kart? Et surtout comment ont-ils fait?

Sous leurs airs parfois maladroits, ces jeux cachent souvent des trésors d'ingéniosité, de bidouille et surtout de tâtonnements expérimentaux. Car s'il existe aujourd'hui certains outils qui facilitent un peu le travail de ces Livingstone vidéoludiques, reste que l'essentiel de ces modifications nécessitent de mettre la main dans le cambouis, à trifouiller des données, des valeurs et à se prendre la tête entre les deux mains.
Cependant, c'est aussi la façon la plus incroyable de découvrir et de comprendre ce qui se cache derrière de nombreux jeux retro, d'observer leur fonctionnement interne et d'analyser leur construction. Mieux, c'est aussi l'occasion d'abattre certaines idées reçues sur les capacités de certaines machines dont on mésestime encore la puissance.

L'idée de ce Groblog est donc de proposer une exploration du hack de ROM. Non pas des jeux en eux-mêmes, mais de découvrir comment bidouiller un jeu original en modifiant certains de ses éléments pour en faire autre-chose. Il peut s'agir de petits détails, comme une modification de couleur, le changement de tout ou partie d'un sprite, d'un élément de décor, d'une musique voire de gameplay.
J'y posterai donc des petits tutos à la difficulté progressive, avec les captures d'écran qui vont bien, en essayant d'être le plus clair possible. Sauf exception, ces tutos seront mis en ligne chaque dimanche, avec pour condition évidente qu'il y ait un minimum de retours réguliers.*

Comme toujours, j'invite ceux qui le souhaitent à réagir, à poser des questions, à apporter des informations complémentaires si besoin est. Mais surtout, tous les Grospixeliens passant par là sont conviés à tester ces tutos, ne serait-ce que par curiosité.
Et pour les plus impatients, le premier tuto vous attend ci-dessous!

* Si à terme la sauce ne prend pas, je demanderai au Soviet Suprême de fusionner ce Groblog avec celui consacré à la création de jeux. Mais avouez que ce serait dommage d'en arriver là...
_________________

"Il n'est pas de lutte plus violente et déterminée que celle d'un homme face à son envie d'aller aux toilettes" - Karate Boy


Odysseus
Pixel planétaire

Score au grosquiz
0004305 pts.

Joue à lâcher trois poissons-ballons sur la ligne de départ.

Inscrit : Sep 15, 2002
Messages : 10891
De : Αἰαία

Hors ligne
Posté le: 2014-10-26 00:03   [ Edité le: 2014-10-26 01:04 ]
Tuto 1: changer un sprite par un autre

Niveau: très facile

Durée: 10 minutes

Pré-requis: aucun


Avant toute chose, vous allez avoir besoin de plusieurs éléments, à savoir:

- Un émulateur NES (perso, j'utilise FCEUX, disponible ici)
- Une ROM de Super Mario Bros., que l'on peut par exemple trouver .
- Une ROM de Pac-Man sur NES, trouvable dans ce coin.
- Le logiciel Tile Layer Pro, téléchargeable à cette adresse.

Une fois tout ça installé, démarrez Tile Layer Pro puis allez dans File > Open et ouvrez la ROM de Super Mario Bros. Votre écran ressemble à ça:



Pour le moment, nous n'allons nous intéresser qu'à la fenêtre de gauche, le reste sera vu dans un prochain tuto.
A l'intérieur de celle-ci se trouvent tous les sprites du jeu, ou plus précisément les morceaux de sprites.
En effet, et sauf exception, tous les sprites sont découpés en tuiles de 8x8 pixels, lesquelles une fois assemblées constituent justement le sprite complet. C'est un point important car cette notion sera régulièrement utilisée par la suite.
Pour voir les "vrais" sprites, vous allez devoir faire défiler l’ascenseur tout en bas. Vous y découvrirez divers morceaux de Mario, de Peach, de champignons ou encore d'ennemis divers. Les éléments de décor avec lesquels le joueur peut interagir ainsi que les bonus sont également présents:



Notez que les tuiles constituant un sprite sont généralement alignées côte à côte, lisibles de gauche à droite, ce qui peut vous aider à vous y retrouver. Par exemple, nous avons ici les quatre tuiles d'un sprite de champignons ennemi qui, une fois montées correctement, donnent ceci le sprite complet:






Maintenant que vous avez situé le truc, tout en restant dans cette fenêtre, allez de nouveau dans File > Open puis ouvrez votre ROM de Pac-Man. Vous obtenez ce résultat:



Nous allons faire un truc tout simple: changer le sprite des champignons ennemis de Super Marios Bros. par le sprite d'un fantôme de Pac-Man. Pour ça, il nous suffit de repérer le sprite du fantôme dans la liste des tuiles de la ROM de Pac-Man, puis de faire les glissés-déposés correspondants:



Cependant, il faut veiller à placer les bonnes tuiles aux bons endroits, soit la tuile supérieure-gauche du fantôme sur la tuile supérieure-gauche du champignon, la tuile inférieure-gauche du fantôme sur la tuile inférieure-gauche du champignon, etc. Si vous avez du mal à situer le truc, il vous suffit de suivre les tuiles selon les chiffres indiqués sur ces captures:





Une fois toutes les tuiles déplacées, vous devez avoir ce résultat dans la ROM de Super Mario Bros.:



Une fois fait, cliquez sur la fenêtre de la ROM de Super Mario Bros. puis allez dans File >Save as, et enregistrez la nouvelle version du jeu en ajoutant le mot "hack" à la fin, pour ne pas écraser le fichier original.
Il ne vous reste plus qu'à lancer votre ROM depuis votre émulateur et là, magie, tous les champignons ennemis sont désormais représentés par des fantômes de Pac-Man! Congrats, vous venez de hacker votre premier jeu!





Bien sûr, vous pouvez vous amuser à modifier les sprites de Super Mario bros. avec ceux provenant d'autres jeux, comme par exemple changer les champignons bonus par la cerise de Pac-Man.
Un point essentiel à souligner cependant: si les tuiles que vous transférez d'un jeu à l'autre comportent des couleurs qui ne sont pas gérées par la ROM sur laquelle vous les placez, les tuiles d'origine resteront affichées.
Pour faire court, bien que chaque support comporte un certain nombre de couleurs (56 pour la NES), les changements de couleurs ne sont pas liés à la console sur laquelle tournent ces jeux mais à la palette propre à chaque ROM (8 couleurs pour Super Mario Bros.). Ainis, et par exemple, il est "impossible" de changer le petit champignon de l'écran de sélection de Super Mario Bros. par la Pac-Gum de Pac-Man, le jaune de cette tuile n'étant pas inclus dans la palette du classique de Nintendo.

-----------------------

Prochain tuto Dimanche 9 Novembre. Et si vous avez des questions, des remarques ou des suggestions d'ici là, n'hésitez pas!
_________________

"Il n'est pas de lutte plus violente et déterminée que celle d'un homme face à son envie d'aller aux toilettes" - Karate Boy


BlackBelt35
Pixel imposant


Joue à Cloudbuilt

Inscrit : Jun 08, 2013
Messages : 570
De : Rennes

Hors ligne
Posté le: 2014-10-26 01:06   [ Edité le: 2014-10-26 01:10 ]
Voilà qui est plutôt intéressant.

Il m'arrive régulièrement de m'essayer à des hacks reconnus par curiosité. Je pense notamment à Kaizo Mario, Zelda Parallel Worlds ou Super Parigot Kart. Même si ce Groblog concerne surtout la modification d'une ROM, je vais suivre ça de très près.
_________________

Image


chatpopeye
Camarade grospixelien


Joue à Alan Wake 2

Inscrit : Jan 19, 2003
Messages : 6279
De : Poitiers

Hors ligne
Posté le: 2014-10-26 10:52
Ca c'est rigolo !

Hop, j'ai fait ton tuto sans souci. Et j'ai même essayé de remplacer les champignons par les aubergines de Kid Icarus. Bon, ça marche mais l'aubergine est toute blanche (pas de violet sans doute dans Super Mario Bros).
Mine de rien, il faut quand même super bien connaître les jeux pour arriver à retrouver parmi les pixels ceux que l'on veut modifier. Et il faut de bons yeux aussi.

Mario86
Pixel monstrueux

Score au grosquiz
0001260 pts.

Joue à Super Mario Kart

Inscrit : Feb 07, 2012
Messages : 2207
De : Gare de l'Est

Hors ligne
Posté le: 2014-10-26 16:00
Citation :
Le 2014-10-26 01:06, BlackBelt35 a écrit :

Il m'arrive régulièrement de m'essayer à des hacks reconnus par curiosité. Je pense notamment à [...] Super Parigot Kart.

La gloire.
_________________

Citation :
Le 2011-06-09 14:26, petitevieille a écrit :
Ah non, si je fais venir Mario86 ici vous allez souffrir les enfants. Il est encore plus aigri que moi !


  Voir le site web de Mario86
nicko
Pixel visible depuis la Lune

Score au grosquiz
0004797 pts.

Inscrit : Jan 15, 2005
Messages : 7541

Hors ligne
Posté le: 2014-10-27 10:29
Très intéressant ce grosblog, bravo et merci. Je me suis toujours demandé comment les auteurs s'y prenaient...

Youpla
Pixel monstrueux

Score au grosquiz
0002030 pts.

Inscrit : May 13, 2009
Messages : 3452
De : Villeurbanne

Hors ligne
Posté le: 2014-10-27 12:38
Encore une super idée ce topic. C'est une excellente approche ludique pour commencer à s’intéresser au hardware. Si des gens qui connaissent la machine passent par là, ça serait super qu'ils donnent un peu plus de détails sur les caractéristiques et limitations techniques de la NES en terme de sprites, ainsi que la façon dont la console gère tout ça en interne.

Citation :
Le 2014-10-26 00:03, Odysseus a écrit :
Un point essentiel à souligner cependant: si les tuiles que vous transférez d'un jeu à l'autre comportent des couleurs qui ne sont pas gérées par la ROM sur laquelle vous les placez, les tuiles d'origine resteront affichées.

Pas compris ce point. Tu veux dire que Tile Layer Pro n'accepte de faire le transfert d'un Tile que si la palette de la ROM de destination est compatible avec ce dernier ?

BlackBelt35
Pixel imposant


Joue à Cloudbuilt

Inscrit : Jun 08, 2013
Messages : 570
De : Rennes

Hors ligne
Posté le: 2014-10-27 15:37   [ Edité le: 2014-10-27 15:41 ]
Citation :
Le 2014-10-27 12:38, Youpla a écrit :

Pas compris ce point. Tu veux dire que Tile Layer Pro n'accepte de faire le transfert d'un Tile que si la palette de la ROM de destination est compatible avec ce dernier ?


Oui, voilà. Chaque ROM intègre un nombre maximum de couleur à afficher, et une palette avec des nuances précises qui peuvent varier d'un jeu à l'autre.

En gros, le jeu ne va pas pouvoir afficher une couleur qui n'existe pas dans les données de la ROM. Donc c'est la couleur par défaut qui est utilisée à la place.

En fait, il est davantage question de modifier la ROM que d'intégrer des données qui viennent de l'extérieur. Quand tu intègres un sprite externe, tu ne fais que modifier l'agencement des pixels, un peu comme des blocs de LEGO.
_________________

Image


Sebinjapan
Camarade grospixelien


Joue à Disgaea (PSP)

Inscrit : May 02, 2007
Messages : 7781
De : Thionville

Hors ligne
Posté le: 2014-10-30 15:08
Génial ce Groblog, merci Odysseus.

J'ai une info sympa pour ceux qui s'intéressent à ce type de hack : certaines consoles "low cost" qu'on trouve dans les magasins de jouet, supermarchés et autres solderies, vous savez ces machines laides qui embarquent des centaines de jeux, et bien elles intègrent souvent des hacks "évolués" dans le genre.
J'ai appris il y a pas très longtemps, grâce à l'excellent site Bootleg Games, que la plupart de ces bécanes étaient basées sur du hardware Famicom un peu boosté (affichage de 16 couleurs ...), la technologie Famicom / NES étant tombée dans le domaine public depuis plusieurs années déjà. Les jeux par contre sont sous copyright et il faut donc en développer de nouveaux, ce que font pas mal de compagnies basées en Asie, ou pour les plus malins / feignants faire du hack pour qu'on ne reconnaissent pas trop le jeu d'origine !

Concrètement, si vous allez dans un magasin VIMA en ce moment, vous trouverez parmi les jouets une console portable "Arcade Vision" à 15 euros. La console comporte 204 jeux, c'est une bonne affaire
Nombre de ces jeux sont des hacks : amusez vous à reconnaître le titre Famicom d'origine ! Dans les jeux d'action, il y a un sympathique jeu de plate forme mettant en scène un Panda qui saute et tape des coffres aux trésors pour recevoir des bonus. Il s'agit de Super Mario Bros (niveaux / jouabilité / gameplay 100% identiques) avec de nouveaux sprites, décors, sons et plus de couleurs. A découvrir !

  Voir le site web de Sebinjapan
upsilandre
Tout petit pixel



Inscrit : Aug 02, 2014
Messages : 22

Hors ligne
Posté le: 2014-11-03 20:10   [ Edité le: 2014-11-03 20:13 ]
Citation :
Le 2014-10-27 12:38, Youpla a écrit :

Encore une super idée ce topic. C'est une excellente approche ludique pour commencer à s’intéresser au hardware. Si des gens qui connaissent la machine passent par là, ça serait super qu'ils donnent un peu plus de détails sur les caractéristiques et limitations techniques de la NES en terme de sprites, ainsi que la façon dont la console gère tout ça en interne.


Je peux repondre aux questions si il y en a.
En tout cas ce genre de hack c'est ludique et en meme temps un bon moyen d'aborder le hardware.



Citation :

Pas compris ce point. Tu veux dire que Tile Layer Pro n'accepte de faire le transfert d'un Tile que si la palette de la ROM de destination est compatible avec ce dernier ?


je pense qu'il fait allusion au format du tile. chaque machine a sa facon de stocker l'information des pixels d'un tile en mémoire.
Par exemple sur NES c'est du 2bpp ca veut dire 2 bit par pixel soit 4 couleurs (ou 3 couleurs + transparence) alors que la Master system c'est du 4bpp (16 couleurs). Si tu veut récuperer un sprite SMS pour le mettre sur une ROM NES ca fonctionnera pas de cette facon meme si le sprite SMS utilise que 4 couleurs sur les 16 car c'est pas le meme codage.

Et d'ailleurs c'est pas seulement une question de bpp, 2 machines qui utilisent des tiles 2bpp peuvent stocker l'information dans un ordre tres different. Par exemple sur NES c'est du bitplan c'est a dire que les 8 premiers octets vont stocker le premier bit de tous les pixels du tile et les 8 octets suivant le second bit.
Mais on peut imaginer un autre format ou le premier octet contient le premier bit de tous les pixel de la premiere ligne du tile et le deuxieme octet le second bit, puis la meme chose pour les lignes suivante. Ou alors le premier octet contient les 2 bit des 4 premiers pixel de la premiere ligne et le deuxieme octet les 4 derniers pixels.
Donc meme en 2bpp on peut imaginer au moins 3 formats different de donnée et chaque fois c'est la meme information mais stocker dans des ordres differents qui empeche de pouvoir faire un simple copier-coller (mais y a sans doute moyen de convertir dans ce cas. Le plus embetant c'est quand meme de pas avoir le meme bpp)

Youpla
Pixel monstrueux

Score au grosquiz
0002030 pts.

Inscrit : May 13, 2009
Messages : 3452
De : Villeurbanne

Hors ligne
Posté le: 2014-11-04 10:44
Citation :
Le 2014-11-03 20:10, upsilandre a écrit :
je pense qu'il fait allusion au format du tile. chaque machine a sa facon de stocker l'information des pixels d'un tile en mémoire.
Par exemple sur NES c'est du 2bpp ca veut dire 2 bit par pixel soit 4 couleurs (ou 3 couleurs + transparence) alors que la Master system c'est du 4bpp (16 couleurs). Si tu veut récuperer un sprite SMS pour le mettre sur une ROM NES ca fonctionnera pas de cette facon meme si le sprite SMS utilise que 4 couleurs sur les 16 car c'est pas le meme codage.

Merci de partager avec nous ta connaissance de ces machines Upsilandre. Néanmoins dans le tuto d'Odysseus il n'est pas question de sprites SMS, mais uniquement NES, et il évoque bien un problème de compatibilité de couleurs.

Ce qui m'amène à me demander comment sont gérées les palettes sur la NES. Les 2 bits qui sont alloués pour chaque pixels permettent de piocher dans une palette, mais laquelle ? est-ce que chaque sprite possède sa propre palette ou s'agit-il de palettes partagées ? J'ai fait quelques recherches, mais je n'ai rien trouvé de limpide à ce sujet.

Bonaf
Gros pixel

Score au grosquiz
1044270 pts.

Inscrit : May 09, 2005
Messages : 1948

Hors ligne
Posté le: 2014-11-04 11:01
LA NES a tout instant à sa disposition 4 palettes de 4 couleurs (3+couleur transparente en fait) pour les décors et 4 palettes de 4 couleurs pour les sprites (donc 12+12+1 = 25 couleurs affichables à l'écran).
Les palettes de 4 couleurs sont définies en piochant parmi une palette générale de 54 couleurs.

  Voir le site web de Bonaf
upsilandre
Tout petit pixel



Inscrit : Aug 02, 2014
Messages : 22

Hors ligne
Posté le: 2014-11-04 11:54
Citation :
Le 2014-11-04 10:44, Youpla a écrit :

Citation :
Le 2014-11-03 20:10, upsilandre a écrit :
je pense qu'il fait allusion au format du tile. chaque machine a sa facon de stocker l'information des pixels d'un tile en mémoire.
Par exemple sur NES c'est du 2bpp ca veut dire 2 bit par pixel soit 4 couleurs (ou 3 couleurs + transparence) alors que la Master system c'est du 4bpp (16 couleurs). Si tu veut récuperer un sprite SMS pour le mettre sur une ROM NES ca fonctionnera pas de cette facon meme si le sprite SMS utilise que 4 couleurs sur les 16 car c'est pas le meme codage.

Merci de partager avec nous ta connaissance de ces machines Upsilandre. Néanmoins dans le tuto d'Odysseus il n'est pas question de sprites SMS, mais uniquement NES, et il évoque bien un problème de compatibilité de couleurs.

Ce qui m'amène à me demander comment sont gérées les palettes sur la NES. Les 2 bits qui sont alloués pour chaque pixels permettent de piocher dans une palette, mais laquelle ? est-ce que chaque sprite possède sa propre palette ou s'agit-il de palettes partagées ? J'ai fait quelques recherches, mais je n'ai rien trouvé de limpide à ce sujet.


Chaque sprite a le choix entre 4 palettes (que le programmeur a constitué) mais cette information la n'est effectivement pas inclus dans le tile lui meme mais dans une table d'attribut des sprites interne au GPU et donc quand tu fais ce genre de hack tu peux modifier l'agencement des pixels des tiles mais pas changer la palette car ce choix la est fait a un moment inconnu dans le programme. Cette information est noyé quelque part dans le code du jeu.
Donc oui a priori t'es obligé de faire avec la palette du sprite d'origine.

Youpla
Pixel monstrueux

Score au grosquiz
0002030 pts.

Inscrit : May 13, 2009
Messages : 3452
De : Villeurbanne

Hors ligne
Posté le: 2014-11-04 12:23   [ Edité le: 2014-11-04 12:47 ]
Merci pour ces deux explications claires et complémentaires.

Mais du coup ça me ramène à ma question de départ. Je ne comprends pas ce passage :

Citation :
Le 2014-10-26 00:03, Odysseus a écrit :
Un point essentiel à souligner cependant: si les tuiles que vous transférez d'un jeu à l'autre comportent des couleurs qui ne sont pas gérées par la ROM sur laquelle vous les placez, les tuiles d'origine resteront affichées.
Pour faire court, bien que chaque support comporte un certain nombre de couleurs (56 pour la NES), les changements de couleurs ne sont pas liés à la console sur laquelle tournent ces jeux mais à la palette propre à chaque ROM (8 couleurs pour Super Mario Bros.). Ainis, et par exemple, il est "impossible" de changer le petit champignon de l'écran de sélection de Super Mario Bros. par la Pac-Gum de Pac-Man, le jaune de cette tuile n'étant pas inclus dans la palette du classique de Nintendo.

Puisque les palettes sont définie de manière dynamique à l’exécution, comment pourrait-il y avoir incompatibilité d'une tuile avec une ROM (hormis le fait qu'elle s'affichera avec les mauvaises couleurs).

upsilandre
Tout petit pixel



Inscrit : Aug 02, 2014
Messages : 22

Hors ligne
Posté le: 2014-11-04 12:43   [ Edité le: 2014-11-04 12:45 ]
A priori Tile Layer Pro lui meme ne peut pas connaitre la palette qu'utilisera tel ou tel sprite donc j'imagine qu'il ne t'empeche pas de le faire (si c'est le meme format de tile) d'ou les guillemets.

Florent06
Gros pixel

Score au grosquiz
0001710 pts.

Joue à Demon's Souls, Doom PS3, Hotline Miami, Toy Story 3, Picross 2

Inscrit : Jun 06, 2013
Messages : 1914

Hors ligne
Posté le: 2014-11-04 20:50
Merci pour ce tuto. Je me suis souvent demandé comment les hacks des jeux sont créés, voilà la réponse. Par contre, j'ai essayé de faire la même démarche pour un jeu au pif sur Super Nintendo (ActRaiser) : en effet, faut vraiment connaître le jeu par coeur pour deviner où sont les morceaux de sprites que l'on souhaite changer.

Odysseus
Pixel planétaire

Score au grosquiz
0004305 pts.

Joue à lâcher trois poissons-ballons sur la ligne de départ.

Inscrit : Sep 15, 2002
Messages : 10891
De : Αἰαία

Hors ligne
Posté le: 2014-11-09 12:23
Un petit mot pour dire que je n'ai pas eu le temps de terminer le tuto d'aujourd'hui, mais que j'éditerai ce message dans la semaine à venir pour le mettre dans on intégralité.
_________________

"Il n'est pas de lutte plus violente et déterminée que celle d'un homme face à son envie d'aller aux toilettes" - Karate Boy



Index du Forum » » Groblogs » » Groblog Odysseus: à la découverte du hacking de ROM

17 messages • page
1




Forum www.grospixels.com (© 2011-2019 Grospixels)