Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

Combat en event

Voir le sujet précédent Voir le sujet suivant Aller en bas  Message [Page 1 sur 1]

1RPG Maker XP Combat en event le Dim 11 Déc - 13:24

lidenvice


Membre
Membre
Avant propos:
J'ai décidé de poster l'ensemble de mes tutoriaux sur l'ensemble des forums où j'ai participé pour permettre aux makers de toutes les communautés de profiter d'une base de tutoriels identiques.
Oui, ce sont des copier/coller de tutoriels que j'ai réalisé et posté par le passé ailleurs.
Merci de votre compréhension

Je vous préviens, j’ai voulu faire une phase de combat simple, mais à mesure que j’avançais dans ce cours j’ai voulu quand même expliquer comment faire une phase de combat complexe. A vous de voir le degrés de complexité que vous allez choisir.

Il existe un nombre incalculable de façons de faire des combats en events. Certains mélangent event et scripts, d’autres vont faire tout en event avec plus ou moins de complexité

On va déjà parler de la première boucle, la boucle du combat qui vérifie si le combat doit continuer ou se terminer. Soit par une victoire, soit par un game over.

En dehors d’un combat, les monstres ne peuvent pas être créés via la base de donnée monstre et groupe de monstre puis appelés en combat (sauf si un script le permet. Je pense qu’il serait intéressant d’avoir un script qui libère cette possibilité car elle faciliterait les combats en event) . Il faut donc créer chaque monstre de tout pièce et ceci à chaque combat.

On va dire que le nombre maximum de monstre est 4 (c’est adaptable autant que vous le souhaitez, mais plus vous en mettez, plus c’est complexe), il faut donc déterminer quelques variables :

L’attaque du monstre
La défense du monstre
Les points de vie du monstre
La magie du monstre

Vous pouvez évidement ajouter un ensemble de variable aussi complet que vous le souhaitez, mais plus vous mettez d’options et plus vous complexifiez le traitement du combat.

Il vous faudra faire de même pour chacun de vos membres d’équipe, même si on peu comptabiliser les points de vie et de magie hors combat.

Sans script d’affichage, vous devrez utiliser Afficher un message pour afficher temporairement les informations importantes à connaître. Donc c’est à vous de voir mais une fenêtre d’affichage de variables c’est plus que facile à faire.

Dans l’ensemble des cas, il vous faudra vérifier à chaque tour de jeu si l’ensemble des ennemis est mort

Il faut donc vérifier uniquement si l’ensemble ennemi ou l’ensemble héros est à 0. Il n’est pas nécessaire de regarder tout le monde.

Pour cela on peut lancer une serie de conditions imbriquées :

I] Phase de verification des points de vie
Code:
<> Commentaire : Phase de vérification des PV des monstres
<>Condition : si la variable [0003: PV Monstre 1] est inférieur ou égale à 0
  <>Condition : si la variable [0007: PV Monstre 2] est inférieur ou égale à 0
    <>Condition : si la variable [0011: PV Monstre 3] est inférieur ou égale à 0
      <>Condition : si la variable [0015: PV Monstre 4] est inférieur ou égale à 0
        <>Commentaire : Inserez ici votre phase de victoire
        <>Message : Vous avez gagné ce combat
        <> Commentaire : Il vous faudra arrêter votre phase de combat sous peine d’être bloqué dans un loop
      : Sinon
        <>
      : Fin
      <>
    : Sinon
      <>
    : Fin
    <>
  : Sinon
    <>
  : Fin
  <>
: Sinon
  <>
: Fin
<> Commentaire : Phase de vérification des PV des héros
<>Condition : si la variable [0019: PV héros 1] est inférieur ou égale à 0
  <>Condition : si la variable [0023: PV héros 2] est inférieur ou égale à 0
    <>Condition : si la variable [0027: PV héros 3] est inférieur ou égale à 0
      <>Condition : si la variable [0031: PV héros 4] est inférieur ou égale à 0
        <>Commentaire : Inserez ici la phase défaite
        <>Fin du jeu
        <>
      : Sinon
        <>
      : Fin
      <>
    : Sinon
      <>
    : Fin
    <>
  : Sinon
    <>
  : Fin
  <>
: Sinon
  <>
: Fin
<>

En processus parallèle dans le premier onglet de l’événement déclanché uniquement pendant un combat.

Sachez que chaque phase de combat et chaque choix peut être traité par une nouvel événement ou par un nouvel onglet pour faciliter vos repérages. Ne négligez pas les commentaires non plus.

Vous allez utiliser certainement bon nombre d’interrupteurs et de variables dans les phases de combat. Donc préparez bien chaque phase indépendamment les unes des autres

Interrupteur :
001 Lancement de la boucle de combat (vérification des points de vie du groupe monstre ou du groupe héros)

002 Déclanchement de la phase choix (arrêt temporaire de la vérification des points de vie)
ect…

Vous pouvez ainsi soit choisir de faire par onglet, soit avec plusieurs événements.
Dans tout les cas, il vous faudra arrêter chaque événement pour passer au suivant. Donc finissez votre phase de contrôle des PV par la mise en route d’un interrupteur dans l’ensemble des conditions nécessaires. Puis ajoutez un onglet déclanché par cet interrupteur.

Vous arrêterez ainsi la phase Lancement de la boucle de combat (vérification des points de vie du groupe monstre ou du groupe héros)

Cela donne pour l’événement Vérification des PV :

Code:
 Map ID: 1, Nom: MAP001
Evènement ID: 001, Nom: Vérification des PV

------ PAGE 1 ------

Conditions de l'évènement :
- L'interrupteur [0001:PV monstre/ héros] est activé

Apparence:
- Aucun(e)

Mode de déplacement:
- Type de déplacement : Fixe
- Vitesse de déplacement: Lent
- Fréquence de déplacement: Basse

Options:
- Animé lorsqu'il se déplace

Conditions de déclenchement:
- Processus Parallèle

Commandes d'évènement:

<>Condition : si la variable [0003: PV Monstre 1] est inférieur ou égale à 0
  <>Condition : si la variable [0007: PV Monstre 2] est inférieur ou égale à 0
    <>Condition : si la variable [0011: PV Monstre 3] est inférieur ou égale à 0
      <>Condition : si la variable [0015: PV Monstre 4] est inférieur ou égale à 0
        <>Commentaire : Inserez ici votre phase de victoire
        <>Message : Vous avez gagné ce combat
        <>Interrupteur(s) [0050: Fin du combat] activé
        <>
      : Sinon
        <>Commentaire : Inserez ici votre phase de combat. Moi j'ai choisi de segmenter
       
        <>Interrupteur(s) [0002: Phase de choix] activé
        <>
      : Fin
      <>
    : Sinon
      <>Commentaire : Inserez ici votre phase de combat. Moi j'ai choisi de segmenter
     
      <>Interrupteur(s) [0002: Phase de choix] activé
      <>
    : Fin
    <>
  : Sinon
    <>Commentaire : Inserez ici votre phase de combat. Moi j'ai choisi de segmenter
   
    <>Interrupteur(s) [0002: Phase de choix] activé
    <>
  : Fin
  <>
: Sinon
  <>Commentaire : Inserez ici votre phase de combat. Moi j'ai choisi de segmenter
 
  <>Interrupteur(s) [0002: Phase de choix] activé
  <>
: Fin
<>Condition : si la variable [0019: PV héros 1] est inférieur ou égale à 0
  <>Condition : si la variable [0023: PV héros 2] est inférieur ou égale à 0
    <>Condition : si la variable [0027: PV héros 3] est inférieur ou égale à 0
      <>Condition : si la variable [0031: PV héros 4] est inférieur ou égale à 0
        <>Commentaire : Inserez ici la phase défaite
        <>Interrupteur(s) [0050: Fin du combat] activé
        <>Fin du jeu
        <>
      : Sinon
        <>Commentaire : Inserez ici votre phase de combat. Moi j'ai choisi de segmenter
       
        <>Interrupteur(s) [0002: Phase de choix] activé
        <>
      : Fin
      <>
    : Sinon
      <>Commentaire : Inserez ici votre phase de combat. Moi j'ai choisi de segmenter
     
      <>Interrupteur(s) [0002: Phase de choix] activé
      <>
    : Fin
    <>
  : Sinon
    <>Commentaire : Inserez ici votre phase de combat. Moi j'ai choisi de segmenter
   
    <>Interrupteur(s) [0002: Phase de choix] activé
    <>
  : Fin
  <>
: Sinon
  <>Commentaire : Inserez ici votre phase de combat. Moi j'ai choisi de segmenter
 
  <>Interrupteur(s) [0002: Phase de choix] activé
  <>
: Fin
<>

------ PAGE 2 ------

Conditions de l'évènement :
- L'interrupteur [0002:Phase de choix] est activé

Apparence:
- Aucun(e)

Mode de déplacement:
- Type de déplacement : Fixe
- Vitesse de déplacement: Lent
- Fréquence de déplacement: Basse

Options:
- Animé lorsqu'il se déplace

Conditions de déclenchement:
- Par la touche action

Commandes d'évènement:

<>

------ PAGE 3 ------

Conditions de l'évènement :
- L'interrupteur [0050:Fin du combat] est activé

Apparence:
- Aucun(e)

Mode de déplacement:
- Type de déplacement : Fixe
- Vitesse de déplacement: Lent
- Fréquence de déplacement: Basse

Options:
- Animé lorsqu'il se déplace

Conditions de déclenchement:
- Par la touche action

Commandes d'évènement:

<>

================

Ca parait compliqué, mais en fait c’est assez simple, ce ne sont que des conditions imbriquées les unes aux autres. L’ensemble du combat en event va être régi par ce système. Donc, mettez des notes pour vous repairer, nommez bien vos variables, vos interrupteurs, vos événements.

II] Phase de choix
Elle doit obligatoirement se passer en démarrage automatique. Pourquoi ? Pour figer votre personnage là où il est tout simplement.

Nous venons d’appeler la phase de choix, celle qui détermine si on va utiliser un objet, on va attaquer, on va utilisé une capacité ou une magie, ou encore si vous avez envie de faire des actions spéciales à chacun de vos héros.

Sachez que le nombre de compétences et le nombre d’objet de votre jeu détermine la complexité de votre phase de combat. Et encore d’avantage le nombre d’objets que le nombre de compétences, car à partir du moment où l’on gagne une compétence, on ne la perd logiquement pas. Alors que dans le cas des objets c’est beaucoup plus difficile à déterminer.

Vous l’aurez compris, il vous faudra soit limiter le nombre d’objet, soit passer par un bout de script.

Vous devrez vérifier le nombre de personnes dans votre groupe et lancer une boucle d’action correspondant à chaque héros. Vous pouvez utiliser la même boucle qui se répétera à partir du moment que vous n’avez pas fait agir tout vos persos.

Il vous faudra aussi vérifier le nombre de monstres pour plus tard.

Pour ces vérifications c’est simple : on utilise la variable : Nombre de héros, nombre de monstres. Elle sera modifiée lors de la mort d’un monstre ou d’un héros.

!!! Attention !!!!
N’oubliez pas qu’un monstre mort ou un héros mort continuera à être ciblable même mort si vous n’empêchez pas le ciblage.

Là deux solutions : Soit vous laissez comme cela, soit vous lancez un interrupteur par ennemi présent et par héros présent. Si l’interrupteur est activé, le héros ou le monstre est mort et donc non ciblable.

C’est parce qu’il y a un ensemble de condition assez important que je vous conseil d’utiliser des commentaires mais aussi des onglets, d’autres événements et un nombre important d’interrupteurs et de variables.

C’est mieux pour se repairer. Car c’est bel et bien cela le plus délicat : se repairer.



Ensuite, vous avez le choix entre plusieurs méthodes sur la phase de choix:

1) Le choix par le dialogue
C’est celle utilisée dans le tutorial que je vous ai cité au début du cours que propose Mikltov. Il est assez simple et efficace, mais est limité visuellement et aussi au niveau de l’interface de choix. Vous pouvez bien évidement utiliser un ensemble complexe de choix par dialogue, mais ça ne fait pas vraiment pareil que de tout avoir d’un seul coup d’œil.

Je vous conseil donc de limiter votre combat, dans le cadre d’un choix par dialogue à cette structure vous pouvez par exemple choisir cette structure:


Choix d’action : Attaque / Défense / Objet / Annuler
-> Phase Attaque : Attaque / Coup Spécial / Magie / Annuler
*Sous-phase Coup Spécial : Coup Spé 1 / Coup Spé 2 / Coup Spé 3 / Annuler
*Sous-phase Coup Magie : Magie 1 / Magie 2 / Magie 3 / Annuler
-> Phase choix d’objet : Objet 1 / Objet 2 / Objet 3 / annuler

Ces options seront les même tout le long du jeu sauf dans certains cas. Tout dépend de la complexité de votre structure de choix. Mais imaginons que les coups spéciaux sont par groupe de coups spéciaux, il sera assez simple d’ajouter une condition pour déterminer le choix par dialogue concernant la Sous-phase Coup Spécial par exemple.

C’est là que la manœuvre devient complexe. Vous pouvez aussi choisir de modifier ces données durant le jeu une fois un moment du jeu passé. C’est bien plus facile mais plus contraignant pour le joueur. Mettons qu’après avoir rencontré un maître de la magie ou un maître d’arme (élément déclencheur du reste du jeu), vous aurez un menu choix modifié directement. Ca évite les conditions lourdes et permet de modifier suivant les moments de jeu et les combats.

Dans tout les cas il vous suffit de toute façons de faire Proposer un choix et de gérer chaque choix par une phase à part (dont je parlerait plus tard) ou un interrupteur.
Et oui !! Vous pouvez encore bloquer cette phase de la même manière qu’on a bloqué la précédente (celle de la vérification des points de vie)



2)Le choix par l’image
C’est ce Danna-K propose et qui est le seul moyen 100% event permettant de faire un menu complexe comportant l’ensemble des choix possibles durant un combat ou durant un menu classique. Je vous conseil vivement de regarder son tutorial et sa démo car l’ensemble menu est très bien expliqué.

La phase de déplacement du curseur est la plus complexe, puisse que au niveau des conditions, l’ensemble des autres solutions est équivalent.

Voyons alors comment la phase de déplacement se passe. Là aussi, vous pouvez vous amuser à couper cette phase en plusieurs onglets si ça vous aide à voir clair. De toutes façons, par la suite, vous pourrez tout compiler avec un peu de jugotte et quelques essais.

Tout d’abord vous devez créer votre menu graphiquement.

Dissociez la fenêtre du menu de chaque ligne de texte : une image par élément. Prenez comme point de repaire la grandeur des carreaux de RPG maker XP.

Faites votre sélectionneur (bouton, doigt, bref un point de repaire visuel qui va bouger quand vous allez appuyer sur les touches de direction.)
Maintenant on va passer par la phase de déplacement :

Au lieu de s’ennuyer 107 ans avec où placer le menu, on va faire simple : Tout dépend de qui utilise la commande. Donc on va partir du principe que le premier qui agis est le héros 1 et qu’il est tout seul pour notre exemple.

On lance deux variables qui déterminent la position du héros pour positionner notre menu :
Code:
<>Variable(s) [0033: X Heros 1] rendre égale à Héros --> Coordonnée X
<>Commentaire : C’est en pixel et on travail en carré donc, il faut multiplier par 32
<>Variable(s) [0033: X Heros 1] multiplier par 32
<>Variable(s) [0034: Y Heros 1] rendre égale à Héros --> Coordonnée Y
<>Commentaire : C’est en pixel et on travail en carré donc, il faut multiplier par 32
<>Variable(s) [0034: Y Heros 1] multiplier par 32

Puis on pose le menu :
Code:
<>Afficher une image : n°1, 'Menu', pixel haut-gauche (X: [0033], Y: [0034]), (50%,50%), 50, Ajouter
<>Afficher une image : n°2, 'Attaquer', pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Afficher une image : n°3, 'Défendre', pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Afficher une image : n°4, 'Competence', pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Afficher une image : n°5, 'Objet', pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Commentaire : Transition graphique après
<>Déplacer une image : n°1, 10 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 150, Normal
<>Déplacer une image : n°2, 10 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Déplacer une image : n°3, 10 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Déplacer une image : n°4, 10 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Déplacer une image : n°5, 10 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Attendre 10 Frames
<>Commentaire : Transition graphique finie

Vous allez me dire : Mais l’ensemble des images se retrouvent toutes au même point et ca fait un paquet.
Vu qu’on est dans le positionnement par rapport au héros 1
Il suffit d’ajouter 32 à la variable ordonnée (c'est-à-dire la verticale qu’on nomme Y) à chaque texte et le tour est joué. Ceci dans le cas où vous avez un menu classique.
Mais rien ne vous empêche de faire un menu en rond (il vous suffira de triturer avec du +32 en X et du +32 en Y ou encore des multiples de 32 ou encore une soustraction.

Vous pouvez aussi donner l’impression que le menu tourne, pour cela il vous faudra repairer lors de la création de votre image les espaces de 32 pixels pour tomber juste. (Toujours partir de la base de 32 pixel sur 32) Pour donner l’impression de mouvement, vous n’aurez qu’a déplacer les images et redéfinir les variables de référence (positon du héros) à chaque image.

N’oubliez pas de redéfinir la position du menu plus tard quand même, sinon vous aurez des problèmes.



Ensuite, pour déplacer votre curseur, on ajoute une série de conditions et encore une variable qui nous servira de loop et aussi de vérificateur de position = Loop menu

Sachez que vous pouvez traiter la position de votre curseur indépendamment de certaines conditions car le curseur ne dépend que d’une seule condition quand il est visible : La variable
Loop menu

Après quelques essais dans le déplacement des images vous remarquerez que le temps de transition est très important et qu’il faut bien le jauger. Vous pouvez essayer d’autres temps de transition, vous verrez, ça saccade l’effet visuel.

Code:
 <>Commentaire : On repaire la cible
<>Attendre 2 Frames
<>Variable(s) [0033: X Heros 1] rendre égale à Héros --> Coordonnée X
<>Commentaire : on mutiplie par 32 pour se retrouver en carré
<>Variable(s) [0033: X Heros 1] multiplier par 32
<>Variable(s) [0034: Y Heros 1] rendre égale à Héros --> Coordonnée Y
<>Commentaire : on mutiplie par 32 pour se retrouver en carré
<>Variable(s) [0034: Y Heros 1] multiplier par 32
<>Commentaire : On décale un peu pour pas mettre le curseur sur le perso (ca fait pas beau sinon)
<>Variable(s) [0033: X Heros 1] ajouter 64
<>Attendre 2 Frames
<>Commentaire : On lance l'affichage des images. Ici je me suis arrété à l'affichage du curseur parce que le reste,
vous l'avez logiquement déjà compris.

<>Afficher une image : n°1, 'Marteau 1', pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
<>Commentaire : On lance une petite boucle (je préfére les étiquettes je trouve ca

<>Attendre 2 Frames
<>Commentaire : Vous voyez ci et là des: Attendre 2 frames.
C'est le minimum d'attente permettant l'exécution du morceau de
commande avant cette attente.
Essayez plus long, ça fait trop long. Essayez plus court ou sans,
et vous aurez des bugs.
<>Variable(s) [0035: Loop menu] rendre égale à 0
<>Mettre une étiquette : Loop
<>Commentaire : On gère d'abord le déplacement du curseur
<>Condition : si la touche Bas est préssée
  <>Attendre 2 Frames
  <>Variable(s) [0035: Loop menu] ajouter 1
  <>
: Fin
<>Condition : si la touche Haut est préssée
  <>Attendre 2 Frames
  <>Variable(s) [0035: Loop menu] retirer 1
  <>
: Fin
<>Commentaire : Ensuite on vérifie si le curseur ne va pas dépasser le menu
<>Condition : si la variable [0035: Loop menu] est égale à 4
  <>Attendre 2 Frames
  <>Variable(s) [0035: Loop menu] rendre égale à 0
<>Commentaire : §On réinitialise la valeur repaire (comme ca on sait qu'on part toujours de la même valeur et ca simplifie la vie)
  <>Variable(s) [0034: Y Heros 1] rendre égale à Héros --> Coordonnée Y
<>Commentaire : On décale un peu pour pas mettre le curseur sur le perso (ca fait pas beau sinon)
  <>Variable(s) [0034: Y Heros 1] multiplier par 32
  <>Déplacer une image : n°1, 3 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
  <>
: Fin
<>Condition : si la variable [0035: Loop menu] est égale à -1
  <>Attendre 2 Frames
  <>Commentaire :Quand on dépasse le menu, dans l'autre sens, on va à la fin. Bref
une vraie boucle.
 
  <>Variable(s) [0035: Loop menu] rendre égale à 3
  <>Variable(s) [0034: Y Heros 1] rendre égale à Héros --> Coordonnée Y
  <>Variable(s) [0034: Y Heros 1] multiplier par 32
  <>Variable(s) [0034: Y Heros 1] ajouter 128
  <>Déplacer une image : n°1, 3 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
  <>
: Fin
<>Commentaire : C'est après que l'on va lancer les conditions et le déplacement du
curseur. Et on peu les gerer indépendamment les unes des autres.
<>Commentaire : Vous pouvez encore bloquer cet onglet, voir cet event pour
lancer un autre onglet ou un autre event et voir clair dans ce que
vous faites. Par la suite, vous pourrez libérer tout ce triturage pour
compiler le tout.
<>Commentaire : Vous avez en effet une variable générée et des onglets à
disposition, il vus suffit d'avoir un onglet en plus par chiffre de
cette variable et surtout ne pas oublier la dernière
<>Commentaire : Vous n'aurez donc pas besoin du loop ni besoin de la liste de
conditions qui suivent, là encore l'onglet sera en démarrage
automatique
<>Condition : si la variable [0035: Loop menu] est égale à 0
  <>Attendre 2 Frames
  <>Variable(s) [0034: Y Heros 1] rendre égale à Héros --> Coordonnée Y
  <>Variable(s) [0034: Y Heros 1] multiplier par 32
  <>Déplacer une image : n°1, 3 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
  <>
: Fin
<>Condition : si la variable [0035: Loop menu] est égale à 1
  <>Attendre 2 Frames
  <>Variable(s) [0034: Y Heros 1] rendre égale à Héros --> Coordonnée Y
  <>Variable(s) [0034: Y Heros 1] multiplier par 32
<>Commentaire : On décale d'un carré par rapport à la valeur repaire
  <>Variable(s) [0034: Y Heros 1] ajouter 32
  <>Déplacer une image : n°1, 3 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
  <>
: Fin
<>Condition : si la variable [0035: Loop menu] est égale à 2
  <>Attendre 2 Frames
  <>Variable(s) [0034: Y Heros 1] rendre égale à Héros --> Coordonnée Y
  <>Variable(s) [0034: Y Heros 1] multiplier par 32
<>Commentaire : vu que la valeur repaire n'est pas flottante (elle est toujours la même) vous n'avez qu'a ajouter deux cases par rapport à celle-ci.
  <>Variable(s) [0034: Y Heros 1] ajouter 64
  <>Déplacer une image : n°1, 3 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
  <>
: Fin
<>Condition : si la variable [0035: Loop menu] est égale à 3
  <>Attendre 2 Frames
  <>Variable(s) [0034: Y Heros 1] rendre égale à Héros --> Coordonnée Y
  <>Variable(s) [0034: Y Heros 1] multiplier par 32
  <>Variable(s) [0034: Y Heros 1] ajouter 96
  <>Déplacer une image : n°1, 3 Frames, pixel haut-gauche (X: [0033], Y: [0034]), (100%,100%), 255, Normal
  <>
: Fin
<>Sauter vers l'étiquette : Loop
<>

====================

3) Le choix par le raccourci
Dans notre cas, les touches ne sont pressées que durant la phase de choix. Vous pouvez donc utiliser l’ensemble des touches en condition :

Si la touche Bidule est pressée alors on agit (on peu même appeler un nouveau lot de conditions et réutiliser les raccourcis d’une nouvelle façon)
Sinon on attend (donc on boucle soit par boucle, soit par une étiquette)

C’est assez proche du choix par dialogue, c’est aussi proche au niveau du choix de la solution par image vue juste avant. Donc, comme vous l’avez compris, les conditions sont toujours présentes, ce qui change c’est uniquement la forme visuelle de la sélection ou le mode de sélection.

4) Le choix par le biais du menu (ou d’un script) et de la base de donnée

N’oubliez pas que tout sort visant un ennemi ne marchera pas dans un combat en event ni dans les statuts, ni dans les dommages infligés aux monstres ou par les monstres (Si un rubyste veux créer un script permettant cette prouesse de façon simple et permettant de continuer à faire le reste du combat en event, pourquoi pas)

Pourquoi chercher les complications ou de midi à 14 heures, vous avez un menu (celui d’origine) qui appelle l’ensemble des éléments utilisable en combat, il peut s’ouvrir via echap.
Donc, vous avez accès aux compétences et aux objets, il vous suffit d’adapter un peu. On pourrait juste appeler la phase objet et compétence (car ces ces deux là qui nous posent le plus de souci en fait dans un combat en event)


On appelle des morceaux de scripts : insérer un script
Code:
$scene = Scene_Item.new
Ensuite, il suffit d’utiliser les portions du menu d’origine pour utiliser compétences et objets :

Dans le script Scene_Item, à la ligne 71, remplacez $scene = Scene_Menu.new(0) par :
Code:
#=================================================================
if $game_switches[2]
#c’est game_switches qui cherche si un interrupteur est déclanché ou non. Pensez donc à enclencher cet interrupteur et à le fermer à la fin du choix.
  $scene = Scene_Map.new
else
  $scene = Scene_Menu.new(0)
end
#=================================================================

Dans le script Scene_Skill à la ligne 83, remplacez $scene = Scene_Menu.new(1) par :
Code:
#=================================================================
if $game_switches[2]
#c’est game_switches qui cherche si un interrupteur est déclanché ou non. Pensez donc à enclencher cet interrupteur et à le fermer à la fin du choix.
  $scene = Scene_Map.new
else
  $scene = Scene_Menu.new(1)
end
#=================================================================

Et voilà vous avez accès aux compétences et aux objets sans faire de modification extraordinaire des scripts, voilà.

Mais ensuite, comment faire ? On ne peut pas mettre de variable (ni même récupérer une seule information de celle-ci pour l’utiliser contre un monstre) à partir d’une compétence… Me diriez vous.

Mais vous avez la possibilité d’appeler un événement commun. Appelez en un déclanché par un appel. Vous devrez vérifier si vous avez assez de point de vie ou de magie avant de lancer le reste. Et pour les objets, et bien, soit vous ne faites que des objets qui ciblent votre équipe, soit vous utilisez d’autres événements communs pour déterminer les dégâts.

[[size=150]] I]Phase de ciblage [/size]

Le mieux au niveau du ciblage, c’est de définir un ensemble de variables X et Y repairant chaque héros et chaque monstre. Vous pouvez là encore lancer cette phase à part en prenant toujours soin de mettre en suspend la phase précédente.

Ca veux donc dire que l’ensemble des événements combats seront toujours les mêmes (même nom et même numéros) , pour cela le plus simple et le plus efficace c’est le copier coller de votre ensemble de combat (en sachant, je vous le rappelle qu’on peut tout mettre dans un seul événement si on veut, voir même sur un seul onglet.)

Une fois que vous avez repairé l’ensemble de vos protagonistes via les variables, il ne vous reste plus qu’a remettre en route le système qu’on a utilisé pour la phase de choix avec la génération de boucle (toujours le même principe) mais aussi la validation par une touche : Si la touche XX est pressée alors l’interrupteur Héros XX (ou Monstre XX) ciblé activé[ /i](ou Monstre XX)
Une fois la touche pressée en face d’une position, alors, on agit sur les PV /PM de la cible si ils doivent changer, mais aussi sur le lanceur si les PV/ PM si ils doivent changer. On appelle donc le repaire de la phase de choix.

Rappelez vous, nous avons parlé de la détection de qui est vivant ou mort ou absent du combat. Lors de la phase de ciblage, ceux qui sont absents ne peuvent être en aucun cas ciblés. Par contre, vous pouvez garder la possibilité de cibler les ennemis morts et les héros morts.
Et ceci pour un ensemble de raison assez vaste. Bref, c’est ici que votre vérification de ce qui est ciblable et ce qui ne l’est pas va entrer en jeu.



I]Phase des dégâts

Une fois fini votre partie de sélection des actions, puis votre ciblage, vous pouvez encore utiliser une variable mettant en route la partie : Phase de dégâts. Pourquoi une variable ? Pour gérer les différents choix que vous avez fait tout à l’heure.

Donc là : gestion des variables pour les points de vie des monstres (ou autres)

Vous avez le choix pour les héros :
=> Soit vous n’utilisez que les variables, ne modifiez que les variables
Les points de vie et de magie seront à mettre au niveau des variables à la fin de la phase, mais surtout à la fin du combat.

=> Soit vous utilisez les points de vie et de magie réels des héros.
Vous allez donc réactualiser tout le long du combat les variables pour qu’elles se calquent sur les points de vie et de magie enlevés ou ajoutés. Vous n’aurez qu’à retirer ou ajouter des points de vie et de magie via la commande d’événement.

Concrètement ces deux techniques se valent mais c’est quand même intéressant de voir les deux possibilités.


La phase des dégâts s’occupe aussi des soins (forcement) ne l’oubliez pas.


Sachez que pour générer des dégâts (ou des soins) vous avez la possibilité de lancer un nombre aléatoire entre X et Y permettant de donner l’illusion d’une fourchette.
Cette variable sera à part et on peu la nommer fourchette. Vous avez les dégâts de base de l’attaque (déjà prévus) et vous pouvez déterminer le bonus ou le malus grâce à une nouvelle condition :
Si fourchette est inférieure ou égale à une valeur Z comprise entre X et Y, alors variable de dégâts sera soustrait de cette valeur (c’est simple non ?)

Dans le sens où Si fourchette est supérieure ou égale à une valeur Z comprise entre X et Y, là c’est embêtant. Car vous allez ajouter plus que vous avez soustrait juste avant.

Mais si vous avez bien fait les choses, la valeur Z est le milieu entre la valeur X et Y. Donc il suffit de diviser par deux la valeur et d’ensuite l’additionner, et le tour est joué !!!

Votre valeur Y n’est pas divisible par deux ? (Comme c’est dommage), pas de problème, ajoutez le modulo de la variable, ça fera bien.
Sachez que le modulo est souvent utilisé quand on ne peut pas diviser sans virgule un chiffre.

Comme ça à dire, ça ne pose pas de problème, certes, mais sachez que le fait d’ajouter un modulo à une valeur évite les virgules. Logiquement, ça ralenti moins les calculs. Mais il existe d’autres utilités : Sachant qu’il rend divisible un nombre par un autre sans virgule en additionnant le modulo à ce même nombre, cela vous permet de générer plusieurs nouveaux chiffres dépendant de votre variable : Si c’est divisible, ça change pas, si ça l’est ça change.

C’est en quelque sorte pour ajouter de l’aléatoire dans votre système entre autres.

I]Phase d’action

C’est là que l’effet visuel de vos sorts, les attaques, les objets, ect vont être utilisés. Rappelez vous

Animons un peu tout ce combat, une animation par ici, un déplacement pour un coup par là… C’est à vous de faire ce qu’il faut dans cette phase pour faire vivre le combat. Editer les personnages sera d’un grand secours pour la partie visuelle. Surtout pour simuler la mort.

Donc c’est une partie très simple puisse que ce n’est que du déplacement et de l’affichage mais justement !!! Comment afficher ?

Et bien là on se retrouve dans trois options (pour le lancement des attaques, les dégâts engendrés, et les objets + XP gagnée):

L’affichage par fenêtre de dialogue : Simple efficace et surtout pauvre en ressources graphiques, c’est un moyen utile pour afficher les informations nécessaires durant le combat.
Je conseil vivement la fenêtre de dialogue (sans windowskin) pour afficher les dégâts, c’est bien plus facile, et puis ça fait pas moche. Le seul hic, c’est que sans script, la fenêtre ne sera pas positionnable sur la cible, et ça c’est visuellement embêtant.

Que diantre, tant pis !! Mettons bien en évidence ce qui se passe écrivons : Monstre (1) a subi V[variable dégats] dégâts !!)


L’affichage par images : Avec un S car il faut plusieurs images pour bien afficher l’ensemble des informations du combat : une image de nom de monstre par monstre [on ajoute (chiffre) si on a plusieurs monstres identiques. Cela sera géré au cas par cas par l’événement]
Ensuite, pour les dégâts, désolé de vous le dire, mais c’est une vraie galère, oubliez. Mais pour information : on fait correspondre chaque valeur à une image la représentant.

L’affichage par un script : Le must, mais là on parle d’événement, donc bon je vais pas m’étaler là-dessus. Mais bon lancer une fenêtre (visible ou pas) affichant les informations à afficher au moment où en en a besoin, c’est quand même rudement pratique

Et en ruby ce n’est pas très complexe. Essayez juste pour voir.

Maintenant, vous allez me dire : Ca y est le cours est fini !!! Mais non que nenni !! Car nous n’avons pas fait agir les monstres (Et oui !!)

Donc on s’inspire de ce qu’on a déjà vu dans tout ce qui est contrôle de la présence des monstres et des héros. Là jusque là rien de sensas. On va maintenant déterminer ce que les monstres vont bien pouvoir faire. Là on va encore appeler une variable : Action du monstre

Et on va certainement utiliser d’autres variables pour les compétences des monstres et déterminer celle qu’il va utiliser. A moins que l’ensemble des actions des monstres soit établie en fonction de ses points de vie, de magie ou du nombre de tour (pour le nombre de tour il faudra encore ajouter une variable : Nombre de tours

Donc après les actions sont toujours régies par des fourchettes de conditions. Elles dépendront directement, dans le cas d’un combat contre un monstre qui agit aléatoirement, de probabilités.

Sachez que faire un combat avec un système aléatoire est plus simple, mais aussi rend le combat moins palpitant.
En effet, si vous mettez une condition fixe : si variable PV du monstre est inférieur à XX alors il fait son meilleur sort. Ca n’aura pas les mêmes répercutions. Pareil pour les soins du monstre. Car le monstre a le droit de se soigner, surtout si il a des points de magie.

Même si la grande phase d’action et de gestion des monstres est moins complexe que celle des héros, vous ne devez pas la négliger.

Sinon pour la phase de déplacement et de dégâts, vous savez déjà comment faire. Voilà, bon combat en event.


***********Signature************

Faire, chercher, persévérer et s'appliquer sont les verbes du maker
Voir le profil de l'utilisateur

2RPG Maker XP Re: Combat en event le Ven 16 Déc - 10:43

Venox


Fondateur
Fondateur
Merci du partage ! :D

Voir le profil de l'utilisateur

Voir le sujet précédent Voir le sujet suivant Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum