De la disparition des PNJ lors du Ditto Trick

Cet espace vous permet de discuter des glitches pokémon de façon générale. Vous pouvez créer des sujets à propos de glitches répertoriés sur le site, mais aussi discuter de ceux qui n'y ont pas leur place, comme les erreurs graphiques ou les glitches ne fonctionnant pas sur version française. Attention, tout ajout à un contenu existant doit se faire sur le forum "Soumettre une contribution" !
Avatar du membre
Krys3000
Fondateur
Messages : 1564
Enregistré le : lun. 28 mai 2012 21:02
Contact :

De la disparition des PNJ lors du Ditto Trick

Message par Krys3000 » jeu. 12 mai 2016 21:30

L'histoire n'est pas nouvelle ; de nombreuses personnes, c'est peut-être votre cas, ont déjà constaté qu'après un Ditto Trick, certains personnages non-joueurs disparaissaient. Cette bizarrerie, pourtant bien connue, n'a jamais fait l'objet de la moindre recherche ; elle s'est contentée de rester un mystère de plus dans le vaste monde de la glitchologie Pokémon...

Et pourtant, la solution n'était pas bien compliquée et pourrait s'avérer bien plus intéressante qu'il n'y parait. C'est TheZZAZZGlitch, le glitchologue bien connu notamment pour son travail sur le 8F récemment, qui a décidé il y a quelques jours de se pencher sur la question à la faveur d'une question posée sur le forum de nos amis anglophones, Glitch City Laboratories.

Comme je trouve ça très cool, j'ai décidé de vous expliquer ses découvertes ici-même. Comme vous le savez si vous avez lu notre page, le Ditto Trick n'est ni plus ni moins qu'un phénomène super simple : on change la valeur de l'adresse mémoire $CD2D, qui contient l'IDH du dresseur rencontré dans le cadre du glitch, alors que le script de rencontre est bloqué par notre fuite. Et, en retournant dans la zone du dresseur, le combat se déclenche finalement, mais contre le mauvais adversaire. Comment un banal changement de ce type pourrait-il impliquer la disparition d'un PNJ qui n'a rien avoir dans l'histoire ?

Les dresseurs ne sont pas les seuls à vous parler pour vous combattre

Et oui, c'est également le cas des Pokémon légendaires, qui eux aussi ouvrent une boite de dialogue pour vous crier dessus avant que le combat ne commence. Les IDH des dresseurs étant tous supérieurs à C9, ce cas est le seul dans lequel la valeur de $CD2D se trouve naturellement inférieure à C9. C'est la raison pour laquelle les développeurs ont crée un petit sous-programme qui est la cause de tout nos malheurs.

Ce sous-programme vérifie la valeur de $CD2D au moment du combat : s'il est égal ou supérieur à C9, c'est bien un combat de dresseur ; mais s'il est inférieur à cette valeur, c'est que nous sommes forcément dans le cas particulier d'une rencontre avec un Pokémon légendaire. Dans les deux cas, un combat se lance. Mais le combat contre un Pokémon légendaire possède une petite spécificité par rapport à celui contre un dresseur : à la fin du combat, le Pokémon légendaire doit disparaître.

Introduction sur la gestion des objets d'une map

La gestion des objets et personnages d'une map donnée est contenue dans une section de la RAM que l'on nomme missable object flags. Cette section, qui est modifiée à chaque entrée dans une nouvelle map, contient la liste des choses qui peuvent potentiellement disparaître sur ladite map. Sur la Route 24, cette liste contient notamment un personnage (le Rocket qui vous donne la Pépite) et un objet (la CT45 dans la Pokéball). A chacun de ces "objets" est lié une boite de dialogue - le texte prononcé par le Rocket (dont l'IDH interne, pour cette map, est 01) et celui qui indique que vous trouvez la CT45 (IDH 08).

Le fonctionnement est donc tout simple : lorsque la boite de dialogue en question s'affiche, l'objet lié disparaît.

Retour sur le mismatching des boites de dialogue

Dans notre page sur le Ditto Trick, nous parlons également d'un phénomène, lui déjà décrit depuis des années, appelé Walking lag glitch et dû le plus souvent à l'inattention de la personne qui fait le glitch. Lors d'un Ditto Trick, il est préférable que la dernière boite de dialogue ouverte par le jeu, avant le retour à la map du dresseur que vous avez fui, est le menu START. Cette boite de dialogue à un IDH universel sur toutes les maps : 00. Ainsi, lorsque vous arrivez sur la map, le menu START s'affiche et ensuite, le combat commence.

Si vous avez par inadvertance ouvert une autre boite de dialogue (c'est-à-dire parlé à quelqu'un, lu un panneau, ou ramassé un objet...) c'est la boite de dialogue ayant le même IDH interne sur la map qui s'ouvrira et non pas le menu START ; mais le combat aura tout de même lieu, ce qui ne change rien au glitch... sauf s'il n'y a pas de boite de dialogue de cet IDH sur la map (il y aura alors un code d'erreur) ou si la boite de dialogue de cet IDH correspond au texte d'un dresseur qui n'est pas encore combattu : le jeu se mettra alors à laguer et c'est quasiment impossible à réparer !

Je pense que vous avez déjà commencé à comprendre le concept que j'essaye de vous expliquer : si vous effectuez le Ditto Trick sur la Route 24 avec, comme dernière boite de dialogue, celle d'IDH 08, la CT45 disparaîtra après le combat, parce que la boite de dialogue 08 de la Route 24 (le texte de la CT45) aura été ouverte par le glitch !

Disparition des PNJ d'autres maps

Tout ça c'est bien, mais ça n'explique pas tout. Lorsque vous effectuez un Ditto Trick normal avec le menu START à la Route 24 - un des exemples les plus connus de ce glitch, le policier qui se trouve devant la maison cambriolée par la Team Rocket à Azuria disparait. Pourtant, ce garde n'est pas sur la Route 24 ; et sa boite de dialogue d'IDH 07 n'a en apparence aucun rapport avec votre menu START d'IDH 00. D'ailleurs, puisque ce menu a le même IDH partout, il n'y a jamais de PNJ dont la boite de dialogue porte l'IDH 00. Alors, que se passe-t'il ?

L'explication est que la liste des missable object flags n'est que partiellement mise à jour à chaque entrée dans une nouvelle map. Analysons une seconde la liste d'Azuria, telle qu'elle apparait dans les valeurs de la RAM :

01 05 02 06 06 07 0A 08 0B 09 FF

Les hexadécimaux en gras correspondent aux boites de dialogue des "objets" qui disparaissent sur la map et le reste des valeurs sont des références internes pour chaque objet, à l'exception du FF qui marque la fin de la liste. Lorsque vous montez sur la Route 24, le début de cette liste est remplacé par les deux seuls objets de la Route 24. Le reste de la liste contient donc des données restantes de la précédente map :

01 24 08 25 FF 07 0A 08 0B 09 FF

Lorsque vous effectuez le glitch avec une boite de dialogue qui ne correspond pas à un objet, comme le menu START, le jeu, qui rappelons-le considère que quelque chose doit disparaitre puisqu'un Pokémon légendaire vient d'être rencontré, ne comprend pas et lira la valeur se trouvant immédiatement la fin de la liste à la place, qu'il interprète comme un objet à faire disparaitre : ici, la valeur 07 renvoie à la boite de dialogue du policier ; et le policier disparait. Ceci vous permet ni plus ni moins que de faire disparaitre des objets ou des personnages appartenant à d'autres map.

Les conséquences de cette découverte en glitchologie et speedrunning

Quand on y réfléchit, ce travail peut être le début de quelque chose de très important, surtout en terme de speed runs sans exécution de code ni item underflow. Grâce à un simple ditto trick, on pourrait alors sauter des pans entiers du jeu !

A l'heure actuelle, tout cela n'est qu'embryonnaire. Je ne sais pas si TheZZAZZGlitch (merci et bravo encore à lui pour ce travail) prévoit de l'approfondir, mais il est certain que nous, nous le ferons dès que possible ;)

Et vous ?
Image
:bép: Head admin de PRAMA :dvo:
“Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that 'my ignorance is just as good as your knowledge.'” - Isaac Asimov

Avatar du membre
thelinekioubeur
Glitchologue confirmé
Messages : 109
Enregistré le : mar. 3 juin 2014 10:02

Re: De la disparition des PNJ lors du Ditto Trick

Message par thelinekioubeur » sam. 14 mai 2016 13:10

Merci pour ses explications !
J'avais déjà remarqué qu'on pouvait grâce au ditto trick faire disparaitre un des Ronflex et continuer le jeu sans Pokéflute (voir ici) mais je ne comprenais pas pourquoi.

S'il est possible de faire disparaitre les rochers de la route victoire ou le rocket qui garde l'entrée de l'arène de Safrania ce serait super !

Avatar du membre
MikaZ
Contributeur
Messages : 192
Enregistré le : mar. 3 mars 2015 17:38
Contact :

Re: De la disparition des PNJ lors du Ditto Trick

Message par MikaZ » lun. 16 mai 2016 18:49

Disparition de Ronflex effectué sur Pokémon Rouge FR 3DS après "Bug Croupier" ;)
"Attention au pouvoir de l'Aura." Lucario

"Tchii est Tchii, c'est Hideki qui a trouvé ce nom ." Tchii

Ma chaine YouTube

Avatar du membre
Krys3000
Fondateur
Messages : 1564
Enregistré le : lun. 28 mai 2012 21:02
Contact :

Re: De la disparition des PNJ lors du Ditto Trick

Message par Krys3000 » lun. 16 mai 2016 19:36

thelinekioubeur a écrit :Merci pour ses explications !
J'avais déjà remarqué qu'on pouvait grâce au ditto trick faire disparaitre un des Ronflex et continuer le jeu sans Pokéflute (voir ici) mais je ne comprenais pas pourquoi.

S'il est possible de faire disparaitre les rochers de la route victoire ou le rocket qui garde l'entrée de l'arène de Safrania ce serait super !
Pour le Rocket ça peut peut-être se faire, je vais travailler dessus. Pour les rochers par contre, je pense que ce ne sont pas des missable object flags, donc ça me parait pas possible :D
Image
:bép: Head admin de PRAMA :dvo:
“Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that 'my ignorance is just as good as your knowledge.'” - Isaac Asimov

Avatar du membre
thelinekioubeur
Glitchologue confirmé
Messages : 109
Enregistré le : mar. 3 juin 2014 10:02

Re: De la disparition des PNJ lors du Ditto Trick

Message par thelinekioubeur » mer. 18 mai 2016 01:46

J'arrive à faire disparaître le rocket qui garde la maison de la copieuse (qui doit donc avoir pour IDH 0A), et aussi l'autre Ronflex (celui de la piste cyclable).
Y a-t-il un moyen pour savoir facilement quel IDH correspond à quel objet ?

Pour le rocket de la copieuse :
- Aller à Safrania
- Aller à route 8
- Faire coucou au croupier puis vol à carmin sur mer
- Aller à route 11 battre un dresseur (fait sur le gamin le plus à l'est mais peu importe le dresseur non ? tant qu'on ne tombe pas sur un missingno qui fait planter le jeu)
- Vol à safrania (ou lavanville) et aller à route 8, battre le pokémon ou fuir.

Avatar du membre
Krys3000
Fondateur
Messages : 1564
Enregistré le : lun. 28 mai 2012 21:02
Contact :

Re: De la disparition des PNJ lors du Ditto Trick

Message par Krys3000 » mer. 18 mai 2016 17:22

Le plus simple est de procéder par Ditto Trick et de tester chaque valeur avec un Memory Viewer. Personne n'a dressé de liste de ça, je pense :noel:
Image
:bép: Head admin de PRAMA :dvo:
“Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that 'my ignorance is just as good as your knowledge.'” - Isaac Asimov

Avatar du membre
thelinekioubeur
Glitchologue confirmé
Messages : 109
Enregistré le : mar. 3 juin 2014 10:02

Re: De la disparition des PNJ lors du Ditto Trick

Message par thelinekioubeur » mer. 18 mai 2016 18:39

En fait on peut comparer les données du memory viewer et celles données par un éditeur de map (comme classicmap, qui donne le numéro des events moins un).
Par exemple à azuria : 01 05 02 06 06 07 0A 08 0B 09 FF
05 : le rival (numéro 0 dans classicmap, 01 dans la ram)
06 : le rocket (1 dans classic map, 02 dans la ram)
07 : le policier à côté de la porte (5 et 06)
08 : le gardien de la grotte inconnue (9 et 0A)
09 : le policier devant la porte (10 et 0B)

À Safrania, le rocket qui garde l'arène a pour IDH 0C, et est en troisième position de liste. Il faudrait faire le ditto trick dans une map qui a 2 missable objects flags...

EDIT : En faisant le ditto trick sur un pécheur de la route 12, qui a 3 missable objects, il est possible de faire disparaitre des missable objects qui sont en 4ème position dans la liste de leur map.
C'est le cas du gardien de la grotte inconnue (non testé), du rocket de safrania qui garde la maison à l'ouest (testé) ou encore de la pokéball contenant bulbizarre dans le labo de Chen (testé, il faut avoir choisi salamèche en début de partie sinon bulbizarre n'est déjà plus là...).

Avatar du membre
Krys3000
Fondateur
Messages : 1564
Enregistré le : lun. 28 mai 2012 21:02
Contact :

Re: De la disparition des PNJ lors du Ditto Trick

Message par Krys3000 » mer. 18 mai 2016 21:35

Pas mal ! Beau travail sur ce glitch. La Route 24 dispose de deux missable object flags, le truc c'est qu'en fait ça décale d'une valeur à cause du FF qui vient se foutre en 5ème position. Tu vois dans l'exemple plus haut, c'est 07 qui devient missable, or 07 n'est normalement pas une valeur de missable, c'est le 06 d'avant qui l'est. Y'a un 0C entre deux valeurs de missable object à safrania ?
Image
:bép: Head admin de PRAMA :dvo:
“Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that 'my ignorance is just as good as your knowledge.'” - Isaac Asimov

Avatar du membre
thelinekioubeur
Glitchologue confirmé
Messages : 109
Enregistré le : mar. 3 juin 2014 10:02

Re: De la disparition des PNJ lors du Ditto Trick

Message par thelinekioubeur » mer. 18 mai 2016 22:15

Non je pense que 07 est missable, un objet missable étant un objet pouvant disparaitre ou apparaitre. Le policier est missable car il n'est pas là au début du jeu (le policier qui est devant la porte a un IDH différent, donc si vous ne le saviez pas, sachez qu'il s'agit de son collègue ^^).
À Safrania tout les events sont missables, le rocket est le troisième objet missable, je ne me souviens pas de tout mais c'est quelque chose comme 01 XX 02 XX 03 0C 04 XX ......... Dans classicmap il apparait comme l'event numéro 2 (d'une liste commençant par 0...)
La route 24 conviendrait pour le faire disparaître, sauf qu'on ne peut pas y accéder sans passer par Azuria, ce qui écrase les données du rocket.

Sinon je viens de tester pour le gardien de la grotte inconnue, ça marche comme prévu, avec ditto trick sur la route 12. Je ferais une vidéo.

Avatar du membre
Krys3000
Fondateur
Messages : 1564
Enregistré le : lun. 28 mai 2012 21:02
Contact :

Re: De la disparition des PNJ lors du Ditto Trick

Message par Krys3000 » mer. 18 mai 2016 22:29

Non non, cette valeur 07 n'est pas un missable object. Elle correspond au policier qui se tient à côté, et ne bloque pas la porte, donc à celui qui ne disparait pas.

Dans la structure de la liste des missable objects, chaque objet est représenté par deux valeurs, la première étant l'IDH qui nous intéresse, la seconde étant une référence interne du missable object. A Azuria ta liste est comme ça :

01 05 02 06 06 07 0A 08 0B 09 FF

En gras, ce sont les missable objects, et entre ce sont les pointeurs internes. Le policier "non-bloqueur" n'est pas un missable object, simplement, quand on écrase avec une liste de deux objets :

XX XX XX XX FF 07 0A 08 0B 09 FF

Le FF écrase le troisième missable object, et on peut faire disparaitre le PNJ/item avec l'IDH de 07, de 08 et de 09, qui normalement ne sont pas censés disparaitre.

Regarde bien la liste de Safrania pour savoir si c'est jouable du coup.
Image
:bép: Head admin de PRAMA :dvo:
“Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that 'my ignorance is just as good as your knowledge.'” - Isaac Asimov

Répondre