[GM8] Zelda Engine - Version 3.0 disponible ! (Morwenn)

Démarré par Morwenn, 13 Février 2010 à 12:55

0 Membres et 1 Invité sur ce sujet

14 Juin 2011 à 20:42 #50 Dernière édition: 18 Juin 2011 à 22:24 par Morwenn
Alors tu viens de m'en apprendre une bonne pour le coup. Après vérification, voici le verdict : les constantes sont utilisables même non enregistrées sous GM6.1. Cependant, il faut avoir la version enregistrée de GM8 pour pouvoir les utiliser....
Merci Yoyogames, mais c'est pas vrai, quoi -_______________-

Bon bah va falloir changer ça, ça va être des variables globales à la place des constantes....
Sérieusement, il devrait y avoir une limite à l'abus, quoi. Quel est l'intérêt de ne pas rendre accessible le panneau des constantes ? :blink:


EDIT: Ben voilà, c'est plus que des variables globales. Mais du coup, c'est vraiment la merde à lire, c'est dommage, surtout qu'on bénéficiait de la coloration syntaxique avec les constantes :/

EDIT²: Bon, je crois que la version 3.0 ne devrait pas tarder à sortir. J'ai juste quelques trucs à vérifier par-ci par-là, chercher des bugs, etc...
Et puis après, la nouvelle version du moteur serra à qui la veut. Il y a quelques nouveautés par rapport à la 2.1, mais le plus gros changement est probablement le fait qu'une bonne partie du moteur est été revue. J'ai changé des trucs, optimisé des machins, normalisé d'autres...

Bref, à très bientôt avec la 3.0 :)

Bon ben voilà, un an d'attente, quelques jours de programmation en plus, et la version 3.0 du Zelda Engine est enfin disponible ! Comme les précédentes, la nouvelle version apporte son lot de changements de code, d'ajouts divers et de corrections de bugs.


Comme d'habitude, une petite liste de ce qui a changé depuis la version précédente :

  • Le moteur passe à Game Maker 8. Je n'ai plus moyen d'utiliser la version 6.1 car elle ne marche pas sur les Windows les plus récents. Cette version n'est donc plus jouable si vous ne possédez pas au moins la version gratuite de Game Maker 8 :/
  • Ajout des ennemis dans le moteur. Vous pourrez notamment trouver les objets suivants :

    • obj_ennemi : objet parent gérant les  propriétés communes à tous.
    • obj_ennemi_vulnerable : objet parent décrivant les propriétés communes aux monstres pouvant être blessés à l'épée, à la bombe ou au lancer de buisson.
    • obj_anti_fairy : Le monstre Anti-Fairy, tuable ici au boomerang (histoire de pouvoir en faire quelque chose).
    • obj_tentacle : Le monstre avec quelques tentacules qui essaye toujours de suivre Link.
    • obj_ennemi_mort : Objet général pour l'animation d'un ennemi mort.
  • Les ennemis ont par ailleurs les propriétés suivantes :

    • Ils laissent (peut-être) un objet derrière eux quand ils meurent.
    • On peut choisir de les faire laisser un objet spécifique dans le creation code.
    • Ils blessent Link lorsqu'ils le touchent.
    • Les ennemis vulnérables reculent lorsqu'ils sont blessés, et peuvent avoir un nombre quelconque de vies.
    • Je ne vais pas détailler toutes les méthodes pour les tuer, mais toutes marchent très bien (enfin, je crois).
  • Ajout d'un écran-titre, avec l'épée qui descend depuis le haut de l'écran (inspiré du moteur d'origine de Link 57).
  • Link peut se faire toucher. Je crois que tout est comme dans le jeu original : il clignote, a une période d'immortalité après s'être fait touché, etc...
  • Il y a une base d'écran de Game Over d'implémentée, mais je complèterai cet écran de Game Over dans une autre version.
  • Link peut également se blesser avec ses propres bombes.
  • L'animation de blocs colorés qui se lèvent et se baissent est désormais complète \o/
  • De nombreux décalages de pixels et sautillements ont été réglés. je crois que c'est assez propre ^_^
  • Un ersatz de "hauteur" des objets portés par Link a été ajouté : Si vous vous tenez sous un objet de type "mur" et que vous lancez un objet vers le bas, il ne se brisera plus automatiquement. Ceci permet un meilleur "réalisme" du moteur. Petit ajout, mais toujours sympathique :P

Donc voilà pour les modifications visibles pour un utilisateur final d'un jeu^^


Cependant, je dirais que les plus différences apparaissent dans le code lui-même. Voici donc les principales modifications effectuées :

  • Refonte complète d'une partie du système pour gérer les animations de Link. Suppression de tous les appels à la fonction execute_string(). Tout a été remplacé par des tableaux d'animations avec, faute de pouvoir utiliser des constantes, des variables globales déclarées lors du lancement du jeu.
    Pour exemple, execute_string('sprite_index = obj_link_' + action + '_' + position) s'écrit maintenant
    sprite_index = animations[action, position], ce qui est beaucoup plus clair, et plus optimisé, je pense^^"
  • Les variables globales sont souvent différenciées par un en-tête : L_ pour Link (ex: L_MARCHE), E_ pour épée, OS_ pour les objets standards (objets en vrac), M_ pour les ennemis, etc...
  • Le système interne de l'épée a été en grande partie revu et assoupli. Moins de truc sont gérés à partir de Link, et plus dans l'épée elle-même.
  • Le script de gain de récompense a été globalement revu, et est beaucoup plus simple à comprendre et à utiliser :)
  • Un bon nombre d'actions diverses ont été exportées vers des scripts pour plus de flexibilité.


Donc voilà pour cette nouvelle version. J'espère surtout avoir généré un code plus propre et plus optimisé que le précédent. Bien entendu, quelques commentaires sont rajoutés par-ci par-là également. Enfin bon, voici toujours les liens de téléchargement de la version 3.0, en .gmk et en .exe :

Version 3.0 du moteur en .gmk : ici
Version 3.0 du moteur en .exe : ici

Si vous trouvez des bugs, n'hésitez pas à m'en faire part :)

Je permets de te dire bravo, j'ai essayer et ton moteur est vraiment pas mal.
Je met ici des supposition d'amélioration et d'objet pou une future version, ne le prend pas mal:
-les mouvement de Link l'épée charger sont trop rapide.
-rajout des objets que l'on peut pousser ( si tu veut un script j'en ai un )
-case noir Link tombe dedans ( sa aussi j'ai un script)

Voilà ma contribution si tu veut mes script demande les moi par MP.

Tu as probablement raison pour les mouvements trop rapides de Link pendant la charge, je n'ai pas vraiment regardé la vitesse du jeu original pour comparer^^"

Pour les objets qu'on peut pousser, comme je ne savais pas lesquels mettre, tu peux pousser et tirer les cristaux qui servent à activer les blocs bleus et oranges dans le moteur (y'a juste une variable à changer dans le create d'un objet pour qu'on puisse le déplacer comme ça) :P
Et pour les trous, c'est gentil de proposer, mais c'est déjà en préparation, donc aucune raison de s'inquiéter^^

Dans tous les cas, merci pour le commentaire, c'est constructif :)

Voici mes remarques :)


  • Après avoir obtenu le boomerang, j'ai du ouvrir/fermer l'inventaire plusieurs fois avant de le voir apparaître. Ça m'est arrivé qu'une seule fois, alors il y a peut-être certaines conditions qui causent ce bug...
  • Si je pose une bombe et la soulève et qu'elle explose lorsque Link se déplace (Soit dit en passant, les bombes explosent beaucoup trop vite), Link reste les bras en l'air et j'obtiens ce message d'erreur:

___________________________________________
ERROR in
action number 11
of  Step Event
for object obj_link:

Error in code at line 55:
       if _obj_current.etat = global.OS_PORTE
                       ^
at position 22: Unknown variable etat

    [/li]
  • Si Link est sur les blocs de couleurs baissés et qu'il est près des blocs levés, et qu'on inverse les blocs, Link reste coincé
  • Le système de poussée d'objets serait à revoir. Les objets se déplacent beaucoup trop lentement, en fait, normalement Link devrait le pousser sur une distance d'une case. Également, il faudrait une animation de poussée. En fait, J'ai remarqué que lorsqu'on marche vers un mur, Link prend l'animation de poussé mais pour SEULEMENT un frame, avant se remettre en animation de marche, normalement il devrait pousser jusqu'a ce qu'on relâche la touche directionnelle.
  • On peut lire une pancarte lorsque Link porte un objet; Il lance l'objet et lit la pancarte en même temps.
  • L'animation du lancé de boomerang est décalé vers la gauche lorsque Link est de face
  • Lorsqu'on soulève une pancarte, il devrait normalement y avoir une sorte de trou, enfin, une trace de pencarte à l'endroit où était la pancarte ^^

Hmmm... SMF devraient revoir leur BBcode, le tag Code agit de façon curieuse sur les listes XD

Voilà, bonne continuation :)

23 Juin 2011 à 21:03 #55 Dernière édition: 24 Juin 2011 à 02:31 par Morwenn
Alors, comme d'habitude, faut que tu trouves tous les détails qui fâchent, toi :P
Bon, bah je vais essayer de faire le point^^


  • Le truc du boomerang, ça ne m'est jamais arrivé, c'est étrange...
  • [Corrigé] La bombe, il me semble avoir constaté un truc comme ça récemment. Mais bon, ça doit venir du fait que j'ai changé une grosse partie du moteur. Je règlerai ça au plus vite. Le fait que les bombes explosent trop vite, c'est vrai, faudra que je trouve l'animation complète avec le bon nombre frames, toussa, ce n'est pas encore fait :P
  • Pour les blocs de couleur et leur interactions avec Link, ce n'est pas un souci majeur (enfin si, pour le le jeu c'est vachement problématique, mais ça ne fait pas partie de mes priorités^^").
  • Pour le système de poussée, je compte en effet implémenter le système case à case par la suite, mais j'ai utilisé celui de poussée des statues, qui ne prend pas en compte le case à case. Donc c'est normal.
  • [Corrigé] Le coup de la frame unique, j'ai remarqué ça aujourd'hui en lançant le jeu avec Wine. Du coup, tu me confirmes que ce n'était pas dû à Wine, c'est cool x)
  • [Corrigé] Le fait de lire la pancarte quand on tient un objet, c'est surtout qu'appuyer sur la touche action lance un objet, pancarte ou non. Donc la suite d'action me paraît logique. Sinon, au pire, y'a juste une condition à rajouter pour éviter ce genre de trucs ^_^
  • [Corrigé] Je pensais avoir réglé tous les problèmes de décalages de pixels, mais tu as encore réussi à en trouver un, tu as vraiment l'œil :D
  • Le trou dû à la pancarte, je pense que c'est géré au niveau des tiles ça. J'y ai souvent pensé, mais ma flemme de faire un mapping correct a pris le dessus....
En tout cas, une fois de plus, merci pour tout, tu as toujours l'œil expert pour trouver tous les petits détails qui font qu'un truc qui paraît sans bug ne l'est pas. J'avais déjà passé pas mal de temps à corriger la liste que tu avais reporté pour la démo 1.0, ben j'ai encore du travail. Mais bon, ça devrait être assez rapide (à part le système de poussée case à case) :)


EDIT : C'est vrai que le coup de lancer l'objet en lisant la pancarte ne fait pas très propre. Du coup, j'ai évité que ça se produise, comme tu le suggérait.

Cependant, je viens de retester le coup de la poussée pour une frame unique, et en fait, je n'ai aucun problème actuellement ; tout marche correctement. Je vais voir d'où peut venir le problème ;)

EDIT² : En fait, j'avais corrigé le truc de la frame unique depuis la démo. Je vois vraiment pas quand, mais j'ai dû oublier un truc ou deux. Bref, ça marche.

Pour la bombe, je crois que j'ai compris quand l'erreur survient : c'est quand on essaye de soulever un objet et qu'il se faire détruire par la bombe. C'est assez étrange, je vais essayer de régler ça dès que possible.

EDIT3 : Ok, c'était bien ça le problème de la bombe, c'est corrigé, merci encore de l'avoir vu :)

EDIT4 : Tant qu'à pourrir ce message... Je viens aussi de corriger le bug qui faisait qu'on pouvait utiliser une bombe ou lancer le boomerang (dangereux !) pendant que le texte d'ouverture d'un coffre était affiché. J'utilise à nouveau le debug du "move = false" qui permet de régler de plus en plus de trucs.

Ah, j'ai enfin eu le temps de tester ce moteur 3.0 ...
Je tiens à te féliciter, c'est un très bon moteur, utile pour apprendre le GML ou pour commencer un jeu !

Niveau remarques, HCkev les a déjà listé. Et pour l'instant, j'en ai que 3 de plus :
- quand l'épée est chargée, on ne peut pas se déplacer au Nord-Ouest.
- il faudrait mettre un petit temps d'attente avant de pouvoir donner un coup d'épée.
- l'affichage du texte se fait avec un screen_redraw/screen_refresh. J'utilisais ça avant, mais c'est plutôt limité : tu ne peux pas fermer la fenêtre du jeu quand le texte est affiché, en outre l'écran est gelé ... Je te conseille donc de te tourner vers les surfaces !

Bonne chance pour la suite !

05 Juillet 2011 à 11:59 #57 Dernière édition: 07 Juillet 2011 à 00:29 par Morwenn
Merci beaucoup pour le commentaire, tu ne peux savoir combien ça fait plaisir :)

Pour les remarques, je vais répondre point par point, comme d'habitude :P

  • Le problème de déplacement avec l'épée chargée ne vient pas du moteur, mais du clavier. C'était déjà noté dans une démo précédente, il semblerait que certaines combinaisons de touches sur certains clavier ne répondent pas tout à fait. Normalement, il y a quelques posts là-dessus dans la première page du topic.
  • Pour le temps d'attente, c'est à voir. J'aimais bien le fait de gagner en réactivité en pouvant marteler la touche de l'épée (ce que je fais dans environ tous les Zelda). Au pire, ce n'est pas trop compliqué à faire^^
  • Pour ce qui est du moteur d'affichage de texte, tu as raison, c'est très limité. Faudrait que je m'intéresse au surfaces, en effet. Je n'en ai jamais utilisées, il va être temps de m'y mettre :P
Je vais suivre tes conseils avisés et essayer d'améliorer ça au mieux.

EDIT : Après vérification, les surfaces ne sont pas utilisables dans la version gratuite de GM8, va falloir faire sans...

EDIT² : Problème de renommage de sprites pour le passage à la 3.0. Du coup, Link ne tient plus son bouclier quand il charge l'épée. Réglé pour la 3.0.