Salut les gens.
Avouez: ça nous est tous arrivé: on construit un niveau, tranquille, puis on se dit qu'on a besoin d'un custom NPC, donc on va en chercher un dans un parc graphique (ou on le construit nous-même), et à la prochaine sauvegarde:
Arr, le fameux type mismatch que tout le monde déteste. x( Quand vous vous foirez sur la taille d'une hitbox pour un custom NPC, voilà sur quoi ça débouche! Et le pire avec le mismatch, c'est qu'il
pourri votre niveau. Vous aurez beau le rouvrir autant de fois que vous voudrez, ça ne marchera jamais, vous retomberez toujours sur ce fucking message d'erreur!
Et bien j'ai trouvé la solution pour s'en sortir, et ainsi, sauver votre niveau, sans avoir à tout refaire, et c'est pour ça que je fais ce How-To! Faut un peu mettre la main à la pâte, mais ça se fait assez facilement!
Pour que ce soit plut concret, je m'appuierai sur un exemple, qui correspond à un problème que j'ai vraiment eu avec le type mismatch.
1. Corriger le problèmeCommencez par corriger le problème avec le NPC. Il vient forcément d'un document texte, mais il est parfois lié aux sprites en eux-même. Dans notre exemple, j'avais pris le "Christmas Kamek", du parc graphique de Red-Yoshi (gaffe d'ailleurs si vous l'utilisez, vu qu'il est buggé). Voici le document texte:
- Citation :
- width=103
height=64
gfxwidth=103
gfxheight=64
Une dimension impair, c'est pas normal, mais, le spritesheet faisait en effet 103px de largeur. J'ai donc corrigé le fichier gif (et j'ai aussi corrigé un problème de pixels parasites sur l'image), puis j'ai changé le fichier txt pour mettre une largeur de 102px.
2. Ouvrir avec le bloc noteEnsuite, vu que l'éditeur SMBX refuse d'ouvrir votre niveau, vous allez devoir vous-même aller bidouiller le code source du jeu pour vous en sortir.
Attention: ne faites pas de c*nneries, sinon, vous allez cumuler les problèmes et ça va être le souk pour vous en sortir après ça. Vous double-cliquez sur votre niveau dans le dossier où il est contenu, puis vous choisissez de sélectionner vous-même le programme à utiliser pour lire le fichier, et vous prenez le bloc note. Ou bien, si l'option se présente, clic droit --> ouvrir avec --> bloc-note, mais normalement, vous devriez pas avoir cette option.
(je vous conseille de décocher "toujours ouvrir avec ce programme", sinon vous allez avoir une icône du programme sur tous vos niveaux. En sois, c'est pas grave, ça risque pas de faire planter, mais c'est pas bô je trouve)
Je précise aussi qu'il faut impérativement utiliser le bloc-note, pas un traitement de texte comme World, parce que dans les traitements de texte, y'a des codes cachés partout (pour la police, le retrait, l'espacement entre 2 lignes, la casse ...), et ça, SMBX, il aime pas trop.
3. Localiser la tumeurUne fois le fichier lvl ouvert avec le bloc-note, vous tombez sur un fichier texte rempli de code qui ne veut rien dire à première vue, avec des #FALSE#, des nombres immenses en négatif, des "Default", des "next" et j'en passe c'est des meilleures. Je pourrais vous expliquer à quoi correspondent ces codes, parce que je me suis penché dessus longuement et j'ai compris comment tout cela marche ... mais ça serait beaaaaaaucoup trop long et c'est pas le sujet du topic: je suis là pour vous aider à éradiquer le type mismatch.
Donc en gros, pour vous expliquer quand même la structure générale: y'a d'abord les nombres qui correspondent au dimension du niveau, puis des codes auxquels faut pas toucher, puis les codes des block, puis ceux des background object, et après ça, on tombe sur les codes des npcs.
Voici la structure
général du code des npcs. Ça concerne un npc normal c'est-à-dire qui n'est pas enterré, qui n'est pas dans une bulle, pas lancé par un Lakitu, pas généré en boucle par un générateur, qui n'active aucun event ...
coordonnée x
coordonnée y
-1 (ce -1 est propre aux npc. Le code des block par exemple, ne possède pas de -1)
Code SMBX du npc (exemple: pour le Goomba de SMB3, le "code SMBX", c'est 1, car c'est le npc-1)
#FALSE#
""
#FALSE#
#FALSE#
#FALSE#
"nom du layer" (si le npc n'est pas un layer, alors le nom donné sera "Default")
""
""
""
""
""
Et c'est grâce à cette structure générale que vous allez trouver le problème: tout d'abord, placez-vous
en haut du bloc-note, et lancez une recherche (ctrl + F)
Dans "recherchez", vous tapez le code SMBX du npc buggé, que vous devez normalement connaître. Dans mon cas, je sais que c'est le Kamek, qui remplace le Lakitu de SMW. Je vais chercher le code SMBX du Lakitu: c'est le 284. Du coup, dans le champ de recherche, je tape "284", et important aussi: il faut cocher "bas" dans le champ "direction" (en gros, on se met en haut du bloc-note, et on lui dit de chercher "284" en se dirigeant vers le bas, donc où il y a tout le reste. Si on avait mis "haut", il nous aurait dit qu'il a rien trouvé, ce qui est normal, vu qu'il y a rien plus haut)
Il vous emmène au premier endroit où il trouve le nombre "284". Attention: il faut que la structure autour du nombre corresponde. Dans mon cas, voilà ce qu'il trouve en premier:
Ce n'est pas le nombre 284 seul, et en plus, on a pas le -1 spécifique aux npc, donc je sais que c'est pas le bon code. Du coup, il faut continuer: on retourne dans le champ de recherche, et on appuie encore sur Entrer, jusqu'à trouver quelque chose qui corresponde.
Bingo! On retrouve bien la structure générale que je vous ai affichée plus haut: coordonnée x, puis y, puis -1, puis le code SMBX du npc (284). Le 291 qui vient après, je vous en ai pas parlé mais en gros, ça veut dire que le Lakitu (284) jette le npc 291. Ensuite, False, "", 3 fois FALSE (bon, là c'est True, mais c'est parce que j'ai bidouillé un truc dans mon niveau, mais on voit bien que ça colle), "Default" et 5 fois "".
4. CorrigerComment faire pour corriger le problème ? Et bah plusieurs solutions! En fait, qu'est-ce qui fait crasher le jeu concrètement ? Et bien c'est la coordonnée à virgule: -205699.5. Donc pour corriger, il vous suffit de virer la virgule, pour mettre -205699 ou -205700 .
Vous n'êtes pas obligé de mettre un chiffre pair, le jeu marchera même avec un chiffre impair. Ou alors, deuxième méthode: carrément virer le npc purement et simplement, si vous voulez plus voir sa sale tronche! Pour ça, faut supprimer le code
mais attention: vous devez supprimer le code du npc en question, mais SURTOUT PAS une partie du code des npcs voisins, sinon ça va encore planter. Relisez bien la structure des npcs que je vous ai donnée plus haut pour savoir ce qu'il faut supprimer. La solution est en spoiler:
- Il faut supprimer ...:
Et voilà.
Après, si vous ne savez pas quel est le npc qui est buggé (et ça, c'est pas de bol), ou si le npc buggé remplace le Goomba par exemple, (c'est pas pratique de rechercher "1", il y en a partout des 1!!) et bien dans le recherche, au lieu de taper son code SMBX, vous tapez un point comme ça: .
Dans le code d'un niveau, il n'y a PRESQUE PAS de points: il peut y en avoir dans un event si vous avez mis une vitesse de déplacement de layer à virgule, pour une custom music, ou dans un dialogue, mais du moment que vous trouvez un point dans du code pur de npc, c'est qu'il y a un soucis. Et pour être encore plus précis, vous pouvez même rechercher .5 parce qu'en général, quand vous avez eu un soucis de hitbox avec un npc, la valeur foirée de coordonnée qui va s'afficher, va finir par .5
Et voilà, c'était mon tuto pour faire refonctionner un niveau après une erreur de type mismatch.
S'il y a un point qui vous semble obscur, n'hésitez pas à le dire.