Je pense à tout un truc:
Essaye de mettre un test du nom actuel de sprite dans "animation end",
si égal à marche0, sprite_index=marche1... (pour passer de la marche normale à l'autre)
Ou si sprite_index=abaisse, image_single=image_number-1 (ou sprite=abaisse, image_speed=0 et n° d'image est la dernière).
Si sprite_index=perso qui se relève, alors sprite_index=perso immobile
Pour la gauche et la droite, il y a un truc non négligeable pour diminuer le nombre de sprites, c'est la variable image_xscale.
Mis à -1, ça fait une symétrie en miroir... Donc
left: image_xscale=-1;
right: image_xscale=1; et il regardera à gauche ou à droite, mis à l'échelle...
Pour le saut: un test dans
step: si il n'y a pas de collision bloc en dessous,
si la vitesse verticale (vspeed) est plus petite que 0 (va vers le haut) ou est plus grande que 0 (va vers le bas), changer le sprite en conséquence... (saut monter ou descendre)
Si non, (donc si il y a un bloc sous ses pieds),
si il ne bouge pas horizontalement, et qu'il n'est pas en train de se relever, qu'il n'est pas abaissé... mettre l'image du repos,
si il bouge et que le sprite actuel n'est pas déjà égal à un sprite de marche,
mettre le premier sprite de marche.
bas: mettre le sprite_index=s'abaisse
bas: mettre le sprite_index=se relève
gauche: changer la vitesse horiz (pour le test dans step qui regarde si on bouge ou non)
droite: aussi
saut: juste la vitesse verticale, et le test dans step prendra la bonne image...
Et le image_xscale fait automatiquement la gauche et la droite...
Il faut donc des tests, enfin, à mon avis.
(Pas très clair, et peut-être pas très vrai, j'espère que ça va... )