Logique d'évènements pour la création avatar en 2D non jouable?

Bonjour à ceux qui me lisent.

Je voudrais faire une feuille d’évènement dans GD5 dont l’objectif est de faire apparaitre sur l’écran un sprite qui aura des couches de sprites empilés sur le sprite de base. Ce serai simple si je voulais juste cela. Mais je voudrais proposer aux joueurs de choisir à partir de listes d’objets affichés, le type de corps, un t-shirt, une veste, un pantalon, un chapeau. Cette scène de DRESSUP est juste un moment du jeu et ce n’est pas le jeu. Une fois que le joueur valide son corps, son style, pour former son look, je voudrais pouvoir afficher son look quand je veux dans le jeu.

De plus j’aimerais associer des variables à ces sprites pour mémoriser ces choix. Ainsi par example je pourrais créer une variable SCORE pour une note de look par exemple et pouvoir par la suite dans le jeu conditionner les actions selon ce score.

Voilà un example de script YAML qui est le Markup Language du moteur de Visual Novel, RenJS où j’ai réussi à faire un prototype de choix d’items pour avoir à la fin un sprite avec un ti-shirt, un pantalon empilé sur un corps. Avec des variables et des conditions j’arrive à ce que je veux. Je cherche quelque chose de similaire sur GD5 avec la feuille d’évènements.

- scene: bodyChoice
bodyChoice:
  - show body_1: AT 400,300 WITH CUT
  - var body: 0
  - var bottom: 0
  - var top: 0
  # Let user choose a body type
  - visualchoice:
- body_1 AT 200,400: 
  - var body: "{body} + 1"
  - deuzi says:  body est égal à {body}
  - scene: topChoice
- body_2 AT 400,400:
  - var body: "{body} + 2"
  - scene: topChoice
- body_3 AT 600,400:
  - var body: "{body} + 3"
  - scene: topChoice
 
topChoice:
  - hide body_1: AT 400,300 WITH CUT
  - if ({body}=="1"):
- show body_1: AT 400,300 WITH CUT
  - if ({body}=="2"):
- show body_2: AT 400,300 WITH CUT
  - if ({body}=="3"):
- show body_3: AT 400,300 WITH CUT
  - deuzi says: je suis à topChoice

  # Let user choose a top 
  - visualchoice:
- top_1 AT 200,400:
  - show top_1: AT 400,300 WITH CUT
  - var top: "{top} + 1"
  - deuzi says:  top est égal à {top}
  - scene: topBottom

- top_2 AT 400,400:
  - show top_2: AT 400,300 WITH CUT
  - var top: "{top} + 2"
  - deuzi says:  top est égal à {top}
  - scene: topBottom

- top_3 AT 600,400:
  - show top_3: AT 400,300 WITH CUT
  - var top: "{top} + 3"
  - deuzi says:  top est égal à {top}
  - scene: topBottom


topBottom:
  - if ({body}=="1"):
- show body_1: AT 400,300 WITH CUT
  - if ({body}=="2"):
- show body_2: AT 400,300 WITH CUT
  - if ({body}=="3"):
- show body_3: AT 400,300 WITH CUT
  - if ({top}=="1"):
- show top_1: AT 400,300 WITH CUT
  - if ({top}=="2"):
- show top_2: AT 400,300 WITH CUT
  - if ({top}=="3"):
- show top_3: AT 400,300 WITH CUT
  - deuzi says: je suis à topBottom

  - choice:
- I'm OK with this one!:
  - deuzi says: Great! What a hardworking student.
- Choose another top!:
  - deuzi says: blabla
  - scene: topChoice

  # Let user choose a top 
  - visualchoice:
- bottom_1 AT 200,400:
  - show bottom_1: AT 400,300 WITH CUT
  - var bottom: "{bottom} + 1"
  - deuzi says:  bottom est égal à {bottom}
  - scene: yourLook
- bottom_2 AT 400,400:
  - show bottom_2: AT 400,300 WITH CUT
  - var bottom: "{bottom} + 2"
  - scene: yourLook
- bottom_3 AT 600,400:
  - show bottom_3: AT 400,300 WITH CUT
  - var bottom: "{bottom} + 3"
  - scene: yourLook   


yourLook:
  - if ({body}=="1"):
- show body_1: AT 400,300 WITH CUT
  - if ({body}=="2"):
- show body_2: AT 400,300 WITH CUT
  - if ({body}=="3"):
- show body_3: AT 400,300 WITH CUT
  - if ({top}=="1"):
- show top_1: AT 400,300 WITH CUT
  - if ({top}=="2"):
- show top_2: AT 400,300 WITH CUT
  - if ({top}=="3"):
- show top_3: AT 400,300 WITH CUT
  - if ({bottom}=="1"):
- show bottom_1: AT 400,300 WITH CUT
  - if ({bottom}=="2"):
- show bottom_2: AT 400,300 WITH CUT
  - if ({bottom}=="3"):
- show bottom_3: AT 400,300 WITH CUT
  - deuzi says: Voici ton look.
  - choice:
- I'm OK with this one!:
  - deuzi says: blabla
- Start again ?:
  - deuzi says: blabbla
  - scene: bodyChoice

Hello,

C’est tout à fait possible, après la meilleure méthode dépendra du type de jeu et de personnage, et aussi de la variété des tes personnages. Si tu ne penses faire que peu de personnages différents, chaque personnage pourrait etre fait dans différentes sprites (et c’est peut-etre idéal s’il y a peu d’animation et si tu es à l’aise avec l’édition et l’animation de sprites).

Sinon, il te faut une sprite d’origine, une sorte de personnage “nu” qui va te servir de squelette, et d’autres sprite qui vont venir se coller par dessus lui (zOrder+1), et les faire se déplacer en même temps (action=>common=> positions).

Ma réponse est rapide mais, qu’est-ce que tu as déjà testé dans GD ? ou en es-tu ? Ou est-ce que tu bloques?

Merci de ta réponse. Je débute sur GD. Je bloque sur comment appliquer mon code si dessus et l’adapter sur une feuille d’évènement.

J’ai survolé ton code, tu ne peux pas le réutiliser dans GD de toute façon, il faut commencer par créer un projet GD, y intégrer tes différentes sprites:

  • une pour le “squelette” du personnage, qui si il y a plusieurs squelettes pourra contenir tous les différents squelettes
  • Une pour par exemple les habits de la partie haute
  • une pour les habits partie basses, etc.

Gdevelop peut à partir de là changer les couleurs des habits (donc pas besoin d’image pour les couleurs), et gérer tout le sysème de déplacement en quelques événements.

La sauvegardes des variables pour mémoriser les choix, ce n’est pas un souci, mais à faire dans un second temps.

J’ai ces éléments corps de base et habits en niveau de gris pour tester.

Donc tu me conseilles de faire un objet sprite pour tous les habits de type TOP est de mettre un habit TOP par animation dans ce Sprite et de faire ces images en niveau de gris et de gérer les couleurs avec un TINT. Je crois qu’il y a un exemple officiel de GD5 qui montre comment gérer le changement de couler d’un sprite, je regarderais.

Pour les événements de déplacement, tu veux dire, comment le joueur interagis avec l’interface pour choisir un habit ?

A coder… Ca peut être fait de plein de façon…
Une toute simple pour commencer:
Imaginons que chacun de tes tops est une “animation” de sprite, elle a donc un numéro. Tu peux faire qqch du genre “la souris est sur l’objet “top” & le bouton gauche de la souris est relâché” => faire +1 au numéro de l’animation de l’objet top (en faisant attention à ne déclencher qu’une seule fois.
Après tu peux faire mieux en rajoutant des boutons pour switcher gauche/droite les vetements.