TUTO PAR SANIOKH
Bon, face à des nombreuses questions des débutants dans le making qui veulent faire leur propre Zelda sur RPG Maker 2000/2003, je préfère mettre un peu du mien en espérant que ça les aidera.
Alors, comment faire...
LE SYSTEME A-RPG et ANIMATIONS D'EPEEJe commence tout de suite par le système A-RPG.
Ce système nécessitera de prévoir beaucoup de switches et de variables.
- Une variable que j'appelerai [touche] qui servira à détécter quand la touche ESPACE est appuyée.
- Un Switch que j'appelerai [attaque] qui servira à détécter si le perso attaque ou pas.
Puis, pour chaque monstre:
- Une variable [monstre_PV] qui servira de PV au monstre.
- Un switch [monstre_mort] qui détérminera si le monstre est mort ou pas.
- Une variable [monstre_objet] qui détérminera quel objet le héros trouvera sur le cadavre du monstre (enfin... au lieu du cadavre du monstre
). - Un switch [monstre_objet_pris] qui détérminera si l'objet est pris ou pas.
Tout d'abord, allons bidouiller notre chère base de données. Pour ce faire, un petit coup de F8, puis dans le dernier onglet Common Events (Evénements communs). Allons créer un premier événement commun qu'on appelera [ATTAQUE]. Alors, dans les conditions de départ, on met Parallel Process (Processus Parallèle), puis on entre quelque chose qui ressemble à ça:
<>Detecter Touche [touche] //Ici, on ne coche que la case 5 ou autre bouton que vous assignerez à l'épée.
<>Attendre 0.0 sec // au cas où, pour éviter certains bugs
<>Si [touche]=5 //5 ou la valeur que vous avez choisie plus haut
_<>switch [attaque] ON
_<>Attendre 0.3 secondes // durée optimale... enfin, vous pouvez mettre 0.5 ou 0.1 (pour les plus sados ^^)
_<>switch [attaque] OFF
<>Fin
Pour ceux qui songent à importer des animations de Link qui attaque, rien de plus facile. On est dans la base de données, alors tant qu'à faire, allons gérer les anims.
Je laisse tomber l'étape de création des anims, la plupart d'entre vous savent le faire. Alors, on crée un autre événement commun qu'on appelera [ANIMATION]. En condition de départ, on laisse Appel (Call).
On suppose que les animations de Link en train d'attaquer se nomment (dans un jeu avec deux épées, la normale et l'excalibur): epee1_haut, epee1_bas, epee1_gauche, epee1_droite, epee2_haut, epee2_bas, epee2_gauche, epee2_droite. Dans tous les cas où on appelera ces fonctions, on cochera la case ATTENDRE LA FIN DE L'EXECUTION, et l'animation sera appliquée à l'événement [héros].
Alors, allons créer d'abord la chose pour l'épée 1.
<>si événement [héros] est tourné en haut
_<>afficher animation de combat [epee1_haut]
<>Fin
<>si événement [héros] est tourné en bas
_<>afficher animation de combat [epee1_bas]
<>Fin
<>si événement [héros] est tourné à gauche
_<>afficher animation de combat [epee1_gauche]
<>Fin
<>si événement [héros] est tourné à droite
_<>afficher animation de combat [epee1_droite]
<>Fin
Voilà ce qui est fait. Mais alors, si Link attaque, on aura toujours l'épée 1 dans sa main! Pas logique! Alors nous allons introduire une nouvelle condition.
Par exemple, l'épée de départ de Link est un objet qui se nomme epee1, la deuxième se nomme epee2, et quand Link récupère une épée, il s'en équippe.
<>si le héros [Link] est équippé avec l'objet [epee2]
_<>si événement [héros] est tourné en haut
__<>afficher animation de combat [epee2_haut]
_<>Fin
_<>si événement [héros] est tourné en bas
__<>afficher animation de combat [epee2_bas]
_<>Fin
_<>si événement [héros] est tourné à gauche
__<>afficher animation de combat [epee2_gauche]
_<>Fin
_<>si événement [héros] est tourné à droite
__<>afficher animation de combat [epee2_droite]
_<>Fin
Sinon:
_<>si le héros [Link] est équippé avec l'objet [epee1]
__<>si événement [héros] est tourné en haut
___<>afficher animation de combat [epee1_haut]
__<>Fin
__<>si événement [héros] est tourné en bas
___<>afficher animation de combat [epee1_bas]
__<>Fin
__<>si événement [héros] est tourné à gauche
___<>afficher animation de combat [epee1_gauche]
__<>Fin
__<>si événement [héros] est tourné à droite
___<>afficher animation de combat [epee1_droite]
__<>Fin
_<>
<>
Voilà, on a tout bêtement récopié le code de l'épée 1 en le modifiant un peu.
Des fois, c'est génant de voir l'animation de combat. Par exemple, pendant les cinématiques, sous les CHIPS de la carte qui cachent le perso, ou dans les ménus. Alors, pour empêcher ça, on introduit deux autres switch qu'on appelera [cinématique] qui sera utilisé pour les cinématiques et désactivé par défaut et [recouvert] qui sera utilisé pour les cas où le perso passe par-dessous les chips qui doivent le cacher et sera désactivé aussi.
J'ai encore une petite idée pour embellir tout ça: et si on rendait le héros transparent le temps de l'anim'? Pas mal, quand même

. Allez, on fait ça.
A la fin, notre script pour les anims de l'épée sera:
<>si le switch[cinématique] est OFF
_<>si le switch[recouvert] est OFF
__<>Transparence du héros: TRANSPARENT
__<>si le héros [Link] est équippé avec l'objet [epee2]
___<>si événement [héros] est tourné en haut
____<>afficher animation de combat [epee2_haut]
___<>Fin
___<>si événement [héros] est tourné en bas
____<>afficher animation de combat [epee2_bas]
___<>Fin
___<>si événement [héros] est tourné à gauche
____<>afficher animation de combat [epee2_gauche]
___<>Fin
___<>si événement [héros] est tourné à droite
____<>afficher animation de combat [epee2_droite]
___<>Fin
__Sinon:
___<>si le héros [Link] est équippé avec l'objet [epee1]
____<>si événement [héros] est tourné en haut
_____<>afficher animation de combat [epee1_haut]
____<>Fin
____<>si événement [héros] est tourné en bas
_____<>afficher animation de combat [epee1_bas]
____<>Fin
____<>si événement [héros] est tourné à gauche
_____<>afficher animation de combat [epee1_gauche]
____<>Fin
____<>si événement [héros] est tourné à droite
_____<>afficher animation de combat [epee1_droite]
____<>Fin
___<>
__<>Transparence du héros: OPAQUE
__<>
_<>
<>
<>si le switch [recouvert] est ON
_<>Jouer le son [le son qui a servi pour l'animation]
<>Fin
Voilà. Pas méchant, quand même

.
Maintenant allons intégrer tout ça dans le premier événement commun [ATTAQUE].
Voici, le code, pour vous en rappeler:
<>Detecter Touche [touche]
<>Attendre 0.0 sec
<>Si [touche]=5
_<>switch [attaque] ON
_<>Attendre 0.3 secondes
_<>switch [attaque] OFF
<>Fin
Non, non, on ne va pas recopier encore ce gros code... on va tout bêtement appeler son éxécution et virer en même temps le temps (0.3 secondes) pour que la durée de l'attaque corresponde à la durée de l'anim..
<>Detecter Touche [touche]
<>Attendre 0.0 sec
<>Si [touche]=5
_<>switch [attaque] ON
_<>Appeler Evénement: [ANIMATION]
_<>switch [attaque] OFF
<>Fin
Je crois que c'est bon pour les événements communs.
Que ceci ne vous rébute pas

, c'est a faire une seule fois, au début.
Minatenant, les monstres mêmes.
Les monstres sont de simples événements, comme les PNJ.
Alors, voilà comment on peut faire un monstre qui attaque.
Tout d'abord, en première page:
Conditions de départ: rien de particulier.
Sprite: le sprite du monstre
Vitesse et fréquence: assez pour qu'il se déplace, quand même
Type de mouvement: vers le héros? Bah, n'importe.
Lancement: Contact événement/héros
Allons maintenant programmer ce monstre.
Si vous vous souvenez, j'ai parlé des deux switch et deux variables qu'on dédiera à chaque monstre? Et bien, c'est ici que nous allons les utiliser.
On prend un exemple, ou à chaque attaque Link perd 1 PV, le monstre idem, et que le monstre est tué après cinq coups.
<>Si [ATTAQUE] est OFF
_<>[Link PV] -1
<>Fin
<>Si [ATTAQUE] est ON
_<>Variable [monstre_PV]+1
_<>Si [monstre_PV] >= 5
__<>Variable [monstre_objet]aléatoire entre 1 et 10
__<> switch[monstre_mort] ON
_<>Fin
<>Fin
<>
Tout ça n'est pas très beau... rajoutons des effets spéciaux ^^ Voici une palette d'effets et de réactions possibles (cette liste est non-exhaustive, en faisant marcher votre imagination, vous en trouverez bien d'autres):
<>Si [ATTAQUE] est OFF
_<>[Link PV] -1
_<>Jouer son [...] //vous pouvez mettre ici un son à jouer quand Link se fait mal
_<>Flasher événement [héros] //Par exemple, quand Link prend un coup, il devient blanc pendant un certain temps.
_<>Afficher animation [..., héros] //comme dans MoS, vous pouvez mettre une animation de "découpage" sur Link quand il se fait toucher, ou comme dans mon jeu, vous pouvez faire une petite mention "-HP" qui apparaît
_<>Sécouer l'écran [...] //comme dans SQ:HS, un peu soulant à force
_<>Déplacer événement [héros]: se tourner à 180°, pas en avant, se tourner à 180° (sans oublier de cocher "ignorer si impossible") //pour éviter que le perso ne se fasse tuer d'entrée sans que vous ne puissiez rien faire, le perso peut s'écarter après chaque coup.
<>Fin
<>Si [ATTAQUE] est ON
_<>Variable [monstre_PV]+1
_<>Jouer son [...] //vous pouvez mettre ici un son à jouer quand un monstre se fait toucher
_<>Flasher événement [cet événement] //en rouge, par exemple
_<>Afficher animation [..., cet événement] //comme dans MoS, vous pouvez mettre une animation de "découpage" sur l'ennemi
_<>Sécouer l'écran [...] //comme dans SQ:HS, un peu soulant à force
_<>Déplacer événement [cet événement]: se tourner à 180°, pas en avant, se tourner à 180° (sans oublier de cocher "ignorer si impossible") //pour éviter que ce soit trop facile ^^
_<>Si [monstre_PV] >= 5
__<>Variable [monstre_objet]aléatoire entre 1 et 10
__<> switch[monstre_mort] ON
_<>Fin
<>Fin
<>
Bon, fini la première page.
Les pages suivantes sont plus faciles à faire: ce sont des pages d'objets.
Selon la variable [monstre_objet] ce sera un objet où un autre... par exemple, le premier objet sera à [monstre_objet]=1, un autre à [monstre_objet]=3 etc. Laissez l'intervalle avec le prochain objet plus grande si vous voulez qu'un monstre laisse un objet plus souvent que les autres.
Chaque page sera... de ce genre:
Conditions de départ: variable[monstre_objet] à une certaine valeur, puis switch [monstre_mort] ON
Sprite: dans chaque cas, le sprite de l'objet
Vitesse et fréquence: immobile
Type de mouvement: n'importe, puisqu'il ne bouge pas
Lancement: toucher
En code:
<>Ajouter objet [objet de votre choix] 1
<>switch [monstre_objet_pris] ON
<>
Si vous voulez que des fois le monstre ne laisse rien, l'avant-dernère page sera comme ça:
Conditions de départ: variable[monstre_objet] à la plus grande des valeurs, puis switch [monstre_mort] ON
Sprite: rien
Vitesse et fréquence: immobile
Type de mouvement: n'importe, puisqu'il ne bouge pas
Lancement: auto ou parallèle
En code:
<>
<>switch [monstre_objet_pris] ON
<>
Puis pour finir en beauté:
Conditions de départ: switch [monstre_mort] ON et switch[monstre_objet_pris] ON
Sprite: rien
Vitesse et fréquence: immobile
Type de mouvement: n'importe, puisqu'il ne bouge pas
Lancement: Toucher ou appui
En code:
<>
<>switch [monstre_objet_pris] ON
<>
Et voilà, c'est fini pour les monstres

.
Ainsi que pour le système ARPG et les anims.
LES COEURSPar exemple, nous avons Link qui perd un coeur à chaque coup ennemi (comme dans MoS). Il a, par exemple, trois coeurs au début (mort après trois coups... pour les sados ^^). Alors, il faudra d'abord bidouiller ses caractéristiques. En "PV Max" mettez le nombre de coeurs que Link a au début du jeu, ici: 3 coeurs. Jusqu'à maintenant, rien de dur.
Tout d'abord, il faudra grapher. Beaucoup. Voire trop.
Au début, faire un support pour votre barre de vie.
Qu'est-ce qu'un support? Par exemple, ça (pris de mon jeu Stareclain Quest: Hidden Spells):

Ou ça (pris du Starter Pack de Xfixfium (même s'il n'utilise pas tout à fait le même procédé)

Le support est le graphisme tel qu'il est quand les vies sont à plat, et surtout quand il y a le moins de choses à afficher à l'écran.
Et voici les parts les plus pénibles: créer des dessins... enfin, voilà le truc:
Pour Zelda, il ne suffit pas de faire une image d'un coeur plein, puis une image d'un demi-coeur... il faudra faire des images des ensembles!
Enfin, bon, un exemple sera plus parlant. Dans cet exemple, Link pourra avoir de 3 à 10 coeurs, et perd un coeur par coup ennemi.
Imaginons que

est un coeur plein et V est un coeur vide. Voici tous les dessins qu'il faudra faire:
VVV
VVVV
VVVVV
VVVVVV
VVVVVVV
VVVVVVVV
VVVVVVVVV
VVVVVVVVVV

Eh oui, ce genre de dessins (pardon pour les images, Christopho, mais c'est pour la bonne cause

):


Ca en fait pas mal, hein? 18 dessins... enfin, bon. Imaginons que c'est déjà fait.
Allez, vous avez fait vos dessins.
Maintenant, encore et toujours, allons voir la base des données et nos chers événements communs.
On crée un événement commun [HUD], puis un autre qu'on appelera [COEURS]
Dans [HUD] on met la condition de départ: Appel, puis on met ça:
<>Appeler événement: [COEURS]
Pas plus dur.
Maintenant, allons dans [COEURS] ou tout va se corser.
Il nous faudra deux variables que je nommerai [PV] et [PV_max], mais aussi il faudra dédier à la chose deux images. Les images des coeurs vides seront en 1, les images des cours pleins seront en 2, ils auront une couleur transparente (évidemment) seront placés au même endroit (superposés, en fait), suivront l'écran plutôt que la carte et n'auront pas d'effet de mouvement tels que la rotation ou les ondulations.
Considérez que dans ce système, les PV de Lnk correspondent aux coeurs qu'il a en ce moment et ses PV Max correspondent aux receptacles (il m'a toujours fait marrer, ce mot ^^) de coeurs que Link a en tout.
Le codage se fera de cette façon (je suis toujours l'exemple avec les coeurs qui vont de 3 à 10):
<>Effacer image 1
<>Effacer image 2
<>variable [PV]= PV du héros [Link]
<>variable [PV_max]= PV Max du héros [Link]
<>Si variable [PV_max]= 10
_<>Afficher image 1 [10_coeurs_vides]
<>SINON
_<>Si variable [PV_max]= 9
__<>Afficher image 1 [9_coeurs_vides]
_<>SINON
__<>Si variable [PV_max]= 8
___<>Afficher image 1 [8_coeurs_vides]
__<>SINON
___<>Si variable [PV_max]= 7
____<>Afficher image 1 [7_coeurs_vides]
___<>SINON
____<>Si variable [PV_max]= 6
_____<>Afficher image 1 [6_coeurs_vides]
____<>SINON
____<>Si variable [PV_max]= 5
_____<>Afficher image 1 [5_coeurs_vides]
____<>SINON
_____<>Si variable [PV_max]= 4
______<>Afficher image 1 [4_coeurs_vides]
_____<>SINON
______<>Si variable [PV_max]= 3
_______<>Afficher image 1 [3_coeurs_vides]
______<>Fin
_____<>Fin
____<>Fin
____<>Fin
___<>Fin
__<>Fin
_<>Fin
<>Fin
<>Si variable [PV]= 10
_<>Afficher image 2 [10_coeurs_pleins]
<>SINON
_<>Si variable [PV]= 9
__<>Afficher image 2 [9_coeurs_pleins]
_<>SINON
__<>Si variable [PV]= 8
___<>Afficher image 2 [8_coeurs_pleins]
__<>SINON
___<>Si variable [PV]= 7
____<>Afficher image 2 [7_coeurs_pleins]
___<>SINON
____<>Si variable [PV]= 6
_____<>Afficher image 2 [6_coeurs_pleins]
____<>SINON
_____<>Si variable [PV]= 5
______<>Afficher image 2 [5_coeurs_pleins]
_____<>SINON
______<>Si variable [PV]= 4
_______<>Afficher image 2 [4_coeurs_pleins]
______<>SINON
_______<>Si variable [PV]= 3
________<>Afficher image 2 [3_coeurs_pleins]
_______<>SINON
________<>Si variable [PV]= 2
_________<>Afficher image 2 [2_coeurs_pleins]
________<>SINON
_________<>Si variable [PV]= 1
__________<>Afficher image 2 [1_coeurs_plein]
________<>Fin
_______<>Fin
______<>Fin
_____<>Fin
____<>Fin
___<>Fin
__<>Fin
_<>Fin
<>Fin
Bon, ça paraît méchant, mais pas du tout.
Voilà, pas plus bête que ça pour les coeurs. Maintenant passons à l'affichage des données numériques, tels rubis.
Et encore une fois, il faudra grapher. Cette fois-ci, c'est la création d'un logo avec un rubis (histoire de montrer que ce sont des rubis, quand même) et de 10 fichiers graphiques, chacun représentant... un chiffre sur un fond transparent. Oui, un dessin pour 0, un autre pour 1 etc.
On aura besoin de pas mal de variables cette fois-ci.
Supposons qu'on veut afficher les rubis avec trois chiffres (je précise que dans ce cas, il faut éviter que l'argent dépasse les 999 rubis) .
Il nous faudra ces variables:
[Argent], [centaines], [dizaines], [unités].
Et un autre événement commun appelé.... disons [RUBIS] avec Appel comme condition de départ.
Les images 3,4,5 et 6 (1 et 2 étant utilisées par les coeurs) seront affichées l'une à la suite de l'autre dans un coin de l'écran: la 3 sera le logo des rubis, la 4 sera le chiffre des centaines, la 5 sera celui des dizaines et la 6 celui des unités. A vous de trouver comment les placer

Allez, on code l'événement commun [RUBIS]!
<>Effacer image 3
<>Effacer image 4
<>Effacer image 5
<>Effacer image 6
<>Variable [Argent] = argent du groupe
<>Variable [Unités] = Variable[Argent]
<>Variable [Unités] modulo 10 //au fait MODULO est une division, où on garde comme résultat le RESTE de la division, et non pas le résultat proprement dit. Ici, il ne nous restera que des unités.
<>Variable [Argent] - Variable [Unités]
<>Variable [Argent] / 10
<>Variable [Dizaines] = Variable [Argent]
<>Variable [Dizaines] modulo 10 // mais si, c'est logique.
<>Variable [Argent] - Variable [Dizaine]
<>Variable [Argent] / 10
<>Variable [Centaines] = Variable [Argent]
// Allez, on a nos centaines, dizaines et unités! Maintenant, plaçons-les!
<>Afficher image 3 [logo_rubis]
<>Si variable [Centaines]= 0
_<>Afficher image 4 [chiffre_0]
<>SINON
_<>Si variable [Centaines]= 9
__<>Afficher image 4 [chiffre_9]
_<>SINON
__<>Si variable [Centaines]= 8
___<>Afficher image 4 [chiffre_8]
__<>SINON
___<>Si variable [Centaines]= 7
____<>Afficher image 4 [chiffre_7]
___<>SINON
____<>Si variable [Centaines]= 6
_____<>Afficher image 4 [chiffre_6]
____<>SINON
_____<>Si variable [Centaines]= 5
______<>Afficher image 4 [chiffre_5]
_____<>SINON
______<>Si variable [Centaines]= 4
_______<>Afficher image 4 [chiffre_4]
______<>SINON
_______<>Si variable [Centaines]= 3
________<>Afficher image 4 [chiffre_3]
_______<>SINON
________<>Si variable [Centaines]= 2
_________<>Afficher image 4 [chiffre_2]
________<>SINON
_________<>Si variable [Centaines]= 1
__________<>Afficher image 4 [chiffre_1]
________<>Fin
_______<>Fin
______<>Fin
_____<>Fin
____<>Fin
___<>Fin
__<>Fin
_<>Fin
<>Fin
<>Si variable [Dizaines]= 0
_<>Afficher image 5 [chiffre_0]
<>SINON
_<>Si variable [Dizaines]= 9
__<>Afficher image 5 [chiffre_9]
_<>SINON
__<>Si variable [Dizaines]= 8
___<>Afficher image 5 [chiffre_8]
__<>SINON
___<>Si variable [Dizaines]= 7
____<>Afficher image 5 [chiffre_7]
___<>SINON
____<>Si variable [Dizaines]= 6
_____<>Afficher image 5 [chiffre_6]
____<>SINON
_____<>Si variable [Dizaines]= 5
______<>Afficher image 5 [chiffre_5]
_____<>SINON
______<>Si variable [Dizaines]= 4
_______<>Afficher image 5 [chiffre_4]
______<>SINON
_______<>Si variable [Dizaines]= 3
________<>Afficher image 5 [chiffre_3]
_______<>SINON
________<>Si variable [Dizaines]= 2
_________<>Afficher image 5 [chiffre_2]
________<>SINON
_________<>Si variable [Dizaines]= 1
__________<>Afficher image 5 [chiffre_1]
________<>Fin
_______<>Fin
______<>Fin
_____<>Fin
____<>Fin
___<>Fin
__<>Fin
_<>Fin
<>Fin
<>Si variable [Unités]= 0
_<>Afficher image 6 [chiffre_0]
<>SINON
_<>Si variable [Unités]= 9
__<>Afficher image 6 [chiffre_9]
_<>SINON
__<>Si variable [Unités]= 8
___<>Afficher image 6 [chiffre_8]
__<>SINON
___<>Si variable [Unités]= 7
____<>Afficher image 6 [chiffre_7]
___<>SINON
____<>Si variable [Unités]= 6
_____<>Afficher image 6 [chiffre_6]
____<>SINON
_____<>Si variable [Unités]= 5
______<>Afficher image 6 [chiffre_5]
_____<>SINON
______<>Si variable [Unités]= 4
_______<>Afficher image 6 [chiffre_4]
______<>SINON
_______<>Si variable [Unités]= 3
________<>Afficher image 6 [chiffre_3]
_______<>SINON
________<>Si variable [Unités]= 2
_________<>Afficher image 6 [chiffre_2]
________<>SINON
_________<>Si variable [Unités]= 1
__________<>Afficher image 6 [chiffre_1]
________<>Fin
_______<>Fin
______<>Fin
_____<>Fin
____<>Fin
___<>Fin
__<>Fin
_<>Fin
<>Fin
Ca va? Vous tenez le coup? Mais non, ce n'est pas méchant, ce gros bloc de code

.
Maintenant, au risque de vous faire paniquer, et si on embelissait un peu?
Allez, on enlève les zéros inutiles. Au lieu d'afficher "021", ça va nous afficher "21".
Pour les centaines, c'est simple, on va éjecter le 0 tout simplement.
Pour les dizaines, on va éjecter le zéro seulement si besoin est (s'il n'y a pas de centaines). On le fera evc une petite condition.. allez, retenez votre souffle. le voilà, le gros code à l'état final:
<>Variable [Argent] = argent du groupe
<>Variable [Unités] = Variable[Argent]
<>Variable [Unités] modulo 10
<>Variable [Argent] - Variable [Unités]
<>Variable [Argent] / 10
<>Variable [Dizaines] = Variable [Argent]
<>Variable [Dizaines] modulo 10
<>Variable [Argent] - Variable [Dizaine]
<>Variable [Argent] / 10
<>Variable [Centaines] = Variable [Argent]
<>Afficher image 3 [logo_rubis]
<>Si variable [Centaines]= 9
_<>Afficher image 4 [chiffre_9]
<>SINON
_<>Si variable [Centaines]= 8
__<>Afficher image 4 [chiffre_8]
_<>SINON
__<>Si variable [Centaines]= 7
___<>Afficher image 4 [chiffre_7]
__<>SINON
___<>Si variable [Centaines]= 6
____<>Afficher image 4 [chiffre_6]
___<>SINON
____<>Si variable [Centaines]= 5
_____<>Afficher image 4 [chiffre_5]
____<>SINON
_____<>Si variable [Centaines]= 4
______<>Afficher image 4 [chiffre_4]
_____<>SINON
______<>Si variable [Centaines]= 3
_______<>Afficher image 4 [chiffre_3]
______<>SINON
_______<>Si variable [Centaines]= 2
________<>Afficher image 4 [chiffre_2]
_______<>SINON
________<>Si variable [Centaines]= 1
_________<>Afficher image 4 [chiffre_1]
_______<>Fin
______<>Fin
_____<>Fin
____<>Fin
___<>Fin
__<>Fin
_<>Fin
<>Fin
<>Si variable [Dizaines]= 0 //On place la condition!
_<>Si variable [Centaines] != 0
__<>Afficher image 5 [chiffre_0]
_<>Fin
<>SINON
_<>Si variable [Dizaines]= 9
__<>Afficher image 5 [chiffre_9]
_<>SINON
__<>Si variable [Dizaines]= 8
___<>Afficher image 5 [chiffre_8]
__<>SINON
___<>Si variable [Dizaines]= 7
____<>Afficher image 5 [chiffre_7]
___<>SINON
____<>Si variable [Dizaines]= 6
_____<>Afficher image 5 [chiffre_6]
____<>SINON
_____<>Si variable [Dizaines]= 5
______<>Afficher image 5 [chiffre_5]
_____<>SINON
______<>Si variable [Dizaines]= 4
_______<>Afficher image 5 [chiffre_4]
______<>SINON
_______<>Si variable [Dizaines]= 3
________<>Afficher image 5 [chiffre_3]
_______<>SINON
________<>Si variable [Dizaines]= 2
_________<>Afficher image 5 [chiffre_2]
________<>SINON
_________<>Si variable [Dizaines]= 1
__________<>Afficher image 5 [chiffre_1]
________<>Fin
_______<>Fin
______<>Fin
_____<>Fin
____<>Fin
___<>Fin
__<>Fin
_<>Fin
<>Fin
<>Si variable [Unités]= 0
_<>Afficher image 6 [chiffre_0]
<>SINON
_<>Si variable [Unités]= 9
__<>Afficher image 6 [chiffre_9]
_<>SINON
__<>Si variable [Unités]= 8
___<>Afficher image 6 [chiffre_8]
__<>SINON
___<>Si variable [Unités]= 7
____<>Afficher image 6 [chiffre_7]
___<>SINON
____<>Si variable [Unités]= 6
_____<>Afficher image 6 [chiffre_6]
____<>SINON
_____<>Si variable [Unités]= 5
______<>Afficher image 6 [chiffre_5]
_____<>SINON
______<>Si variable [Unités]= 4
_______<>Afficher image 6 [chiffre_4]
______<>SINON
_______<>Si variable [Unités]= 3
________<>Afficher image 6 [chiffre_3]
_______<>SINON
________<>Si variable [Unités]= 2
_________<>Afficher image 6 [chiffre_2]
________<>SINON
_________<>Si variable [Unités]= 1
__________<>Afficher image 6 [chiffre_1]
________<>Fin
_______<>Fin
______<>Fin
_____<>Fin
____<>Fin
___<>Fin
__<>Fin
_<>Fin
<>Fin
Voilà, fini pour les rubis. Vous pouvez en faire autant avec les compteurs de bombes, de flèches...
Pour finir, revenons à notre événement commun [HUD]
Il est comme ça, OK?
<>Appeler événement: [COEURS]
On rajoute un truc:
<>Appeler événement: [COEURS]
<>Appeler événement: [RUBIS]
Tout ce que vous rajoutez qui doit apparaître à l'écran est à placer dans le [HUD].
Maintenant, à chaque fois que quelquechose fera Appel à [HUD] vous aurez affiché sur l'écran les coeurs et les rubis (et, si vous avez ajouté des trucs, plein d'autres choses

).
Seulement, il faudra faire appel à [HUD] à chaque fois que quelque chose change dans votre statut: vous perdez ou gagnez des PV, des rubis... etc. Par exemple, avec les monstres, quand un monstre vous attaque:
<>Si [ATTAQUE] est OFF
_<>[Link PV] -1
_<>Appeler événement [HUD] //<= comme ça, le coup est tout de suite comptablisié par l'affichage des coeurs
<>Fin
<>Si [ATTAQUE] est ON
_<>Variable [monstre_PV]+1
_<>Si [monstre_PV] >= 5
__<>Variable [monstre_objet]aléatoire entre 1 et 10
__<> switch[monstre_mort] ON
_<>Fin
<>Fin
<>
Il faudra aussi faire appel à [HUD] à deux moments: au tout début du jeu et après les téléportations, en arrivant sur une nouvelle map. (merci à Cham de m'avoir signalé cette omission ^^)
Alors, pour le début du jeu, on aura encore besoin d'un switch [Premier affichage] et d'un événement.
Conditions de départ: aucune
...
Lancement: Auto
<>Appeler événement [HUD]
<>Switch [Premier affichage] ON
Conditions de départ: le switch [Premier affichage] est ON
...
Lancement: Toucher ou Appui
<>
//rien :)
Voilà, et pour les passages dans les maps, il y a deux solutions: soit faire appel à [HUD] juste après avoir téléporté le héros, dans l'événement même qui le téléporte...
...soit placer des événements comme celui décrit ci-dessus dans chaque map et désactiver le switch [Premier affichage] après chaque téléportation dans l'événement même qui téléporte le héros.
Une autre méthode d'affichage des coeurs et des rubis consiste à mettre [HUD] en processus parallèle, et ajouter à la fin <>Attendre (durée de réactualisation). Ce système est plus simple, parce qu'il ne nécésite pas d'appeler [HUD] au moindre changement de la vie ou des finances, mais il a un défaut: celui de ne pas être instantané, à chaque changement, il faut attendre un peu avant que ça ne s'affiche. Et à des durées trop faibles, le jeu peut ramer.
<>Appeler événement: [COEURS]
<>Appeler événement: [RUBIS]
<>Attendre 0.5 sec // où 0.5 est la période de réactualisation de la barre de vie
Bon, enfin voilà.
C'est un peu confus, tout ça, mais ça aborde les gros problèmes que rencontrent les débutants quand ils font leur Zelda.
Je n'aborde pas le menu perso, parce que ce serait trop complèxe, parce qu'il y a beaucoup de façons d'en faire un, et parce que ... je ne sais pas faire ^^ (sauf le menu contextuel).
Voilà, amusez-vous bien et faites les méilleurs Zelda!
ANNEXE 1 PAR CHAM
Autre façon de régler le problème des coeurs :
cette fois, on ne va pas faire de fond, simplement toute les images doivent être créé :
pas de coeur, coeur plein, 1 coeur, 2 coeur, etc...disons qu'il a 10 coeurs, et qu'on attribue 1 point par demi coeur, cela fait en tout 20 images plus celle qui est vide.
On prend alors seulement une variable "nb de coeur" et on fait un évènement [COEUR] qui est en appel.
ça dode en gros :
<> variable opér[20:nb de coeur]=20 (on attribue la valeur maximale. Si vous voulez que le héros parte avec des points en moins dès le départ)
<>Fourche:Variable[20:nb de coeur]=20
<>Afficher Image(l'image qui correspond à 10 coeurs soit 20 demi coeurs, plus les coordonée de l'images)
<>
<>fin
<>Fourche:Variable[20:nb de coeur]=19
<>Afficher Image(l'image qui correspond à 10 coeurs 1/2 soit 19 demi coeurs, plus les coordonée de l'images)
<>
<>fin
Vous répétez jusqu'à ce que la variable égale 0, auquel cas vous mettez
<>Fourche:Variable[20:nb de coeur]=0 inf/égal (au cas où les points deviendrez plus bas que zéros)
<>Afficher Image(l'image qui correspond à 0 coeurs soit 0 demi coeurs, plus les coordonée de l'images)
<>
<>fin
Voilà, normallement vous faites ensuite ce qui a été dit par Sani' sur l'évènement HUD, en rajoutant
<>Appeler événement: [COEURS]
<>Appeler événement: [RUBIS]
<>Attendre 0.5 sec // où 0.5 est la période de réactualisation de la barre de vie
et c'est prêt !
ANNEXE 2 PAR CHAM
Pour le codage de l'épée, votre héros risque de continuer d'avancer durant sont coup. résultat : on dirait qu'il fait une glissade. Je vous conseil donc d'ajouter juste avant les fourchettes conditionnelles et juste avant la transparence, "déplacer un évènement > le héros > attendre (vitesse 8)
ainsi, votre héros donnera des coups d'épée sur place. bon je vous met le codage sur celui de Sani' :
<>si le switch[cinématique] est OFF
_<>si le switch[recouvert] est OFF
<>Dépl; Héros : Attente //// ICI
__<>Transparence du héros: TRANSPARENT
__<>si le héros [Link] est équippé avec l'objet [epee2]
___<>si événement [héros] est tourné en haut
____<>afficher animation de combat [epee2_haut]
___<>Fin
___<>si événement [héros] est tourné en bas
____<>afficher animation de combat [epee2_bas]
___<>Fin
___<>si événement [héros] est tourné à gauche
____<>afficher animation de combat [epee2_gauche]
___<>Fin
___<>si événement [héros] est tourné à droite
____<>afficher animation de combat [epee2_droite]
___<>Fin
__Sinon:
___<>si le héros [Link] est équippé avec l'objet [epee1]
____<>si événement [héros] est tourné en haut
_____<>afficher animation de combat [epee1_haut]
____<>Fin
____<>si événement [héros] est tourné en bas
_____<>afficher animation de combat [epee1_bas]
____<>Fin
____<>si événement [héros] est tourné à gauche
_____<>afficher animation de combat [epee1_gauche]
____<>Fin
____<>si événement [héros] est tourné à droite
_____<>afficher animation de combat [epee1_droite]
____<>Fin
___<>
__<>Transparence du héros: OPAQUE
__<>
_<>
<>
<>si le switch [recouvert] est ON
_<>Jouer le son [le son qui a servi pour l'animation]
<>Fin
ANNEXE 3 PAR SANIOKH[/color]
Bon, allons implémenter un petit système d'intelligence artificielle (non, je plaisante

, mais ça n'est est pas loin)
Vous vous souvenez certainement de notre joli monstre?
<>Si [ATTAQUE] est OFF
_<>[Link PV] -1
<>Fin
<>Si [ATTAQUE] est ON
_<>Variable [monstre_PV]+1
_<>Si [monstre_PV] >= 5
__<>Variable [monstre_objet]aléatoire entre 1 et 10
__<> switch[monstre_mort] ON
_<>Fin
<>Fin
<>
Maintenant, ce qu'on peut faire, est de diviser cette page en deux pages. D'abord, faites INSERER une nouvelle page juste après celle-ci.
Les deux pages vont avoir l'air de ça:
Condition de départ: aucune
Sprite: monstre
Mouvement: à vous de voir
Lancement: contact
<>[Link PV] -1
<>
Condition de départ: [ATTAQUE] est ON
Sprite: monstre
Mouvement: à vous de voir
Lancement: contact
<>Variable [monstre_PV]+1
<>Si [monstre_PV] >= 5
_<>Variable [monstre_objet]aléatoire entre 1 et 10
_<> switch[monstre_mort] ON
<>Fin
<>
Quel est l'intérêt? Par exemple, si on assigne deux mouvements différents (page 1: le monstre se rapproche, page 2: le monstre s'éloigne) on peut créer des effets sympas tels que: le monstre vous évite si vous agitez trop votre épée, ou sursaute dès que vous attaquez...
Je vais maintenant parler des épées... vous savez, quand vous attaquez un ennemi... il ne perd qu'un point de vie dans notre exemple? Si vous changez d'épée, ce sera pareil... alors pourquoi changer? Bah, je vais réctifier le tir

Alors, tout d'abord, dans la base des données réduisez l'attaque du héros Link à 1. Après, allez dans les propriétés des objets. L'épée 1 doit avoir l'attaque à 0. L'épée 2 doit l'avoir... à plus que zéro

.
A chaque fois que Link obtient une épée, il s'en équippe, nous sommes d'accord? Alors, maintenant, allons voir notre monstre. Introduisez une nouvelle variable [héros_attaque]. Maintenant, remplacez ça (quand le héros attaque):
<>Variable [monstre_PV]+1
par ça:
<>[héros_attaque] = ataque du héros [Link]
<>Variable [monstre_PV]+[héros_attaque]
Ce qui fait que, avec l'épée 1, Link enlève 1 PV à chaque coup, avec la 2, il en enlève plus etc.