Ma théorie sur ce qui s'est passé :
RPG Maker 2003 a une limite de 15 000 instructions par frames (environ, les jeux sont clockés à 1.67µs). Pour généraliser, on peut considérer que chaque ligne dans le déplacement prenait une instruction (c'est un peu plus compliqué que ça en vrai mais pour l'explication ça suffira).
Les instructions sont lues dans les events dont le code est actif dans l'ordre suivant :
-Event communs dans leur ordre
-Event de maps dans l'ordre de leur ID
Dans ton cas, le jeu lisait l'intégralité de l'event ID:0001, puis l'intégralité du 0002, etc., puis les mets tous dans sa suite d'instructions. Vu que t'as mis une boucle, à chaque Event le jeu entrait un grand nombre d'instruction car il lisait la boucle de manière débile non stop jusqu'à la limite programmée de la fonction (j'ai jamais essayé, mais j'estime qu'elle est dans les 1000, surement mise là pour éviter que le jeu plante).
Mais comme j'ai dis plus tôt, il est capable d'exécuter seulement 15 000 instructions par frames, donc celles qui sont après la 15 000eme se font squeezer car le jeu reprend sa lecture des events la frame d'après.
Ca expliquerait :
Citation: Au lancement du jeu, les events impassables sont toujours les mêmes |
Car toujours les mêmes instructions exécutées à chaque démarrage.
Citation: Après un changement de carte, les events impassables sont différents d'avant le changement de carte (voire il n'y en a pas) |
Les instructions en cours ne sont pas clean dans un changement de map (si l'event de téléportation a un ID plus faible que les autres il s'exécutera avant, puis au retour la suite s'execute. (oui, la fonction de téléportation de RM2k3 est un outil à fuite de mémoire)
Pourquoi Wait 0.0 fonctionne : car Wait, en réalité, c'est une fonction qui demande au jeu d'arrêter de lire les instruction de cet event pendant un certain nombre de frames et de passer au suivant. Wait 0.0 correspond à 1 frame (1/60 seconde).
Une autre solution aurait été d'utiliser le bouclage naturel des Parallel Process car le jeu lis bien le code de ces event qu'une seule fois par frame. Un peu comme si il y avait un Wait 0.0 caché à la fin d'eux.
Un autre conseil que je te donnerais plus général est d'éviter la fonction Loop comme la peste et de plutôt utiliser des étiquettes. Elles sont beaucoup plus flexible et permettent d'imbriquer des "boucles" sans bug (la fonction Break Loop de 2k3 est un cauchemar).
Un jour j'aurais la foi d'expliquer aux gens toutes les conneries qu'il y a dans la prog de RM2k3 qui font que les jeux peuvent se mettre à ramer pour des raisons débiles.
|