Ca remonte tout ça ^^'
Bon alors déjà une première chose: il est délicat de modifier une liste pendant qu'on la parcourt (on risque de modifier les infos dont on aura besoin lors d'une itération ultérieure).
Ensuite, c'est plutôt lourd de trier plusieurs listes (perfs), alors qu'une seule suffirait. Si tu tiens absolument à garder plusieurs listes, pourquoi ne pas simplement créer une liste de positions et t'arranger pour maintenant la correspondance élément à élément avec la liste qui te sert d'ordre (alphabêtique en l'occurence). Ce qui te fait deux listes à réorganiser. Ensuite, tu parcours les éléments de la liste à positions et tu les utilises comme position pour récupérer les éléments depuis les autres listes (que tu n'as plus besoin de trier).
EDIT1: c'est la solution postée par Néo2 entre-temps

EDIT2: surtout que récupérer un élément par sa valeur est beaucoup plus coûteux que par sa position. (pour ceux qui me gueuleraient dessus, sachez que les listes Gml sont implémentées par des tableaux).
Sinon, je me demande s'il n'y a pas moyen de grouper toutes les infos relatives aux dragons dans un type d'objet et de créer une liste d'instances vers ces objets. Ainsi, tu n'as qu'une seule liste. Mais ça ne t'arrange pas pour le tri vu que tu ne disposes que de deux tris: croissant et décroissant qui se fera sur les id d'instance dans le cas présent :/
La meilleure solution que je vois passerait par une dll faite maison (un langage tel que le C permet de grouper toutes les données des dragons au sein d'une même structure et de trier selon l'une des caractéristiques via callback comparateur).
En fait, tout dépend du nombre d'ordre de tri que tu aimerais. Si tu ne veux qu'un tri alphabêtique en plus de l'ordre par défaut (id spécifique aux dragons commençant à 0 jusque ton nombre de dragons-1), alors je te conseille de passer par un conteneur map (nomDuDragon->idDuDragon). Je m'explique:
A) création des structures de données
- A1) Tu crées un tableau global pour chaque caractéristique du dragon (sauf le nom), et tu les insères dans l'ordre d'id des dragons. Par exemple
img[0] = imgBulbizarre, img[1] = imgHerbizarre, ...
type[0] = plante, type[1] = plante, ... - A2) tu crées une liste avec les noms de tes dragons
ds_list_add(nameList, "bulbizarre"), ds_list_add(nameList, "herbizarre"), ... - A3) tu crées une map avec comme clef le nom du dragon et comme valeur associée l'id du dragon
ds_map_add(map, "bulbizarre", 0), ds_map_add(map, "herbizarre", 1), ...
B ) Tri par id
- B1) par ordre croissant, il te suffit de parcourir tous les tableaux d'un coup avec un index allant de 0 jusque nombreDeDragon-1 (une seule boucle for dans laquelle tu accèdes à l'élément i de toutes tes listes)
- B2) par ordre décroissant, idem, mais de nombreDeDragons-1 à 0.
C) Tri par ordre alphabêtique (croissant comme décroissant)
- C1) tu tries la liste par ordre alphabêtique (croissant ou décroissant) : ds_list_sort(nameList, true)
- C2) tu parcours cette liste dans l'ordre et tu récupère le nom : name = ds_list_find_value(nameList, i)
- C3) tu utilise le nom dans la map pour récupérer l'id : id = ds_map_find_value(map, name)
- C4) tu utilises l'id dans chacun de tes tableaux pour récupérer l'élément associé : value = img[id], type = img[id], ...
Ca devrait fonctionner à condition que le conteneur map accepte le texte comme clef.
Si tu veux trier par type, ça sert à rien d'utiliser un conteneur map puisque plante correspond à plusieurs Pokémon --> lequel choisir ? En fait, la relation caractéristique <-> id doit être bijective
