Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker


Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

News: Des jeux d'hiver sous la couette / Scripts: Système de vol pour RPG Maker (...) / Jeux: Onsen RPG - A Tale of Yu / Jeux: Final Destiny / Jeux: puie z / Chat

Bienvenue
visiteur !





Désactiver
la neige


publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

346 connectés actuellement

30769220 visiteurs
depuis l'ouverture

3039 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

RPG Maker VX

Guelnika & E-magination

Le Temple de Valor

Eclipso

Tous nos partenaires

Devenir
partenaire



Formules de dégâts custom pour les compétences (Maniacs)

Comment customiser la formule de dommage pour les skills, à l'aide du patch Maniacs pour faire des sorts aux effets variés.

Ecrit par Mack le 25/05/2020


❤ 0

Formules de dégâts custom avec le patch Maniacs








Prérequis :
Ce tutoriel n'est valable que pour la version Steam de RPG Maker 2003.
Le patch Maniacs est OBLIGATOIRE pour suivre ce tutoriel.
Vous pouvez trouver plus d'informations sur le patch ici.
image Veillez à avoir activé le menu de variables avancées dans Option -> Use new 'Control Variables' pour plus de facilité dans les calculs.


Introduction

Ce tutoriel permet d'utiliser des formules de dommages customs pour les compétences.
Par exemple, de base il est impossible de faire la compétence Addition de Steiner dans FF9, avec ce tuto si. Une autre possibilité est de créer une attaque qui fait 200% des dégâts d'une attaque normal. J'expliquerai comment faire ces deux possibilités, mais libre à vous d'imaginer d'autres sorts, ou de copier des sorts d'autres jeux.

Ce tuto est conçu en partant du principe que le héros est le lanceur de sort, mais il est tout à fait possible de légèrement modifier le système pour faire en sorte que les monstres disposent de la même capacité.

Petit détail à savoir, toute la gestion en cas de coup critique, et l'adaptation des dommages en cas de faiblesse / résistance ne sont pas prises en compte dans ce tutoriel. Il est sûrement possible de les rajouter, mais ce n'est pas au programme pour l'instant.



Préparation

Pour commencer, on va préparer le terrain pour nos événements communs. Rendez-vous dans la base de données, onglet Common Events. Voici les noms que je leurs ai donnés, et le déclencheur (Trigger) :
_ BattleSyst_Target, None ;
_ BattleSyst_SoustrDamage, None ;
_ BattleSyst_PhysicDamage, None ;
_ BattleSyst_Start, Begin Battle.

Et on peut aussi préparer dès maintenant les variables principales de notre système : par exemple je vais choisir la variable 81 pour UserType, ma variable 82 sera UserIndex, la 83 ActionType, la 84 pour ActionIndex, 85 pour TargetType, et 86 pour TargetIndex.

Explication des différentes variables :

Spoiler (cliquez pour afficher)



Pour mon exemple, j'ai créé un sort Soustraction d'ID 134 et de cible Single Enemy. Le reste n'a que peu d'importance.
On veut donc que lorsque je lance le sort, les dommages de calculs soient différents de ceux de base.

Enfin, dans l'onglet Troops de la BDD, vérifiez que le premier groupe contienne bien 8 monstres, au moins le temps de la mise en place du tutoriel.



Evénement commun : BattleSyst_Start

Dedans, rajoutez la commande Control Battle (4ème page), et dans Proccessing choisissez Targeting.
Dans Callback Event ID, cochez la seconde case Constant et choisissez l'event nommé BattleSyst_Target.
Choisissez une variable pour le UserType.

image

Spoiler (cliquez pour afficher)





Evénement commun : BattleSyst_Target

Dans ce second event, on va détecter quand est lancé le sort Soustraction. On rajoute donc une condition ActionType == 1, suivie d'une condition ActionIndex == 134, et à l'intérieur de ces deux conditions un ShowText("AZE") :

Portion de code : Tout sélectionner

1
2
3
4
5
Condition Variable 83-ActionType == 1
  Condition Variable 84-ActionIndex == 134 # ID du skill
    Show Text ("AZE")
  Fin
Fin



En lançant un combat à ce stade, et en utilisant la compétence Soustraction vous verrez la boîte de dialogue s'ouvrir pour afficher "AZE". C'est donc un bon début, le système détecte bien qu'on lance Soustraction.
Maintenant il faut calculer les dommages. Remplacez la commande ShowText par Call Event (3ème page), qui appellera l'event commun BattleSyst_SoustrDamage.

Spoiler (cliquez pour afficher)





Evénement commun : BattleSyst_SoustrDamage

C'est dans ce troisième event qu'on va calculer les dommages de la compétence Soustraction.
Pour cela, rien de plus simple : nous allons récupérer les PV Max et PV actuels du héros lanceur de sort, et les retirer à sa cible.
Je choisis donc les variables 95 et 96 qui seront respectivement les PV Max et les PV du lanceur de sort, et la variable 97 pour le résultat de la soustraction.
Ce que ça donne dans Control Variable :
image

Même principe pour la variable 96-HP, en remplaçant ***'s Maximum HP, par ***'s HP.¦/spoiler]
Et on utilise la variable 97-DamageCalc pour calculer la différence :
image

Maintenant, il faut retirer cette valeur aux PV de l'ennemi. Problème, il n'existe pas de commande pour le faire. Enfin, si, mais elle n'est pas accessible depuis les événements communs.
Direction donc l'onglet Troops de la BDD, dans la partie Battle Events rajoutez une commande Change Enemy HP. Laissez les arguments comme ça, puisqu'on va se contenter de couper coller la commande dans notre event commun.
Et voilà ! On peut maintenant changer les PV des ennemis depuis l'onglet Common Events ! (Cette astuce peut être reproduite pour toute les autres commandes exclusives à l'onglet Troops de la BDD.)
On va pouvoir commencer à modifier la commande Change Enemy HP.
Premièrement, cochez Decrease Variable, et Allow Knockout.
Dans la case Variable sélectionnez la variable 97-DamageCalc :
image

Problème, on ne peut pas choisir la cible par une variable.
On va donc rajouter une condition qui englobe la commande Change Enemy HP :
Condition : Variable 86-TargetIndex == 0
Puis copier coller la condition en changeant l'index dans la condition, et dans la commande de PV :
image

image Si vous ne pouvez pas aller jusqu'au 8ème ennemi, rajoutez des ennemis dans le premier groupe de monstre le temps de faire la manip. Vous pouvez les enlever après.

Voilà, déjà si vous lancez un test, vous vous rendrez compte que lorsque vous lancez Soustraction, l'ennemi ciblé perd un nombre de PV égal à la différence entre les PV Max et les PV du lanceur.
Petit problème, un "MISS" apparaît quelques secondes après que les dégâts soient pris.
Cela s'explique facilement, le MISS vient du fait que la compétence soustraction ne fait aucun dommage de base, il affiche donc qu'elle échoue.
Il existe plusieurs méthodes pour empêcher le miss de popper :
- Faire que les dommages soient légèrement retardés pour s'afficher en même temps que le MISS, ce qui aura pour effet de le faire disparaître.
- Ajouter un statut "vide" qui sera infligé par la compétence.
L'avantage d'utiliser un statut, c'est de pouvoir faire des compétences n'infligeant pas de dégat.
Celle d'utiliser le délayage, c'est d'avoir un rendu plus proche du rendu de base. En effet, avec les statut les dommages popent légèrement plus tôt qu'un skill normal.

Pour la suite du tuto, je vais montrer les deux solutions, à vous de choisir laquelle vous voulez (les deux ont leurs avantages et défauts).


Option 1 : Statut NoDMG

Pour cette version, on va utiliser un statut vide que l'on nommera NoDMG, qui disparaitra à 100% de chance après 1 action, avec un Rating de 1, à un State Rate à 100% sur toutes les lettres, et qui montre l'animation de combat 1 :
image

La compétence 134 Soustraction doit infliger ce statut :
image

Relancez le test, et cette fois, le MISS n'apparaîtra pas. Par contre, le statut reste un tour après celui-là. Donc si vous reciblez le même ennemi, le jeu va vous dire qu'il est sous le status NoDMG.
Pour empêcher ça, il suffit de créer un nouvel event commun appelé BattleSyst_Update, avec un Trigger : Parrallel (Battle) et avec la même méthode que pour la commande Change Enemy HP, on va copier la commande Change Enemy State, la coller 8 fois dans BattleSyst_Update en changeant l'ID à chaque fois pour bien correspondre.
Problème, s'il y a moins de 8 ennemis, le jeu plante. Pour régler ça, on va rajouter une variable 98-EnemyMax, et utiliser Get Battle Info pour récuperer le nombre max d'ennemis :
image

Et après il faut entourer chaque commande Change Enemy State par une condition pour vérifier qu'il y ait bien assez de monstres :
image

Pour éviter le lag, vous pouvez rajouter une petit Wait(1) à la fin de cet event.
Voilà pour la première version. :D


Option 2 : Retarder les dommages

Pour cette version, on va simplement se contenter de décaler le calcul des dommages pour les faire quand le pop-up devrait apparaître, et ainsi le remplacer.
Petit problème, la fonction Wait(x) ne fonctionne pas directement dans ce cas, l'event ne reprend jamais après avoir attendu (Sûrement dû à un bug, mais bon, c'est peut être voulu dans le fonctionnement de RM).

Pour remédier à cela, on va créer un nouvel event commun appelé BattleSyst_Update, avec un Trigger : Parrallel ( Battle ). Dedans, on va juste mettre une condition Variable 97-DamageCalc >= 1, suivie d'un Wait(9) (à vous de voir sur le temps à mettre ça dépend de l'animation jouée), et de l'ensemble des conditions et Change Enemy HP qui sont à déplacer dans cet event.
Les deux events doivent donc ressembler à ça :
image

image Dans l'event BattleSyst_Update, il faut absolument remettre la variable 97-DamageCalc = 0 juste avant le dernier Branch End, sinon les dommages se feront en boucle.

Et voilà pour la deuxième solution.
Comme dit plus haut, les deux solutions sont viables, et même combinables, selon le moment où vous voulez faire apparaître les dommages.



Evénement commun : BattleSyst_PhysicDamage

Dans cette dernière partie, on va voir comment faire un sort qui tape à 200% d'une attaque normale.
Pour l'exemple, je me servirai de la compétence Soustraction déjà faite, mais bien entendu, à vous de voir selon l'ID de votre compétence !
Pour cela, rendez-vous dans l'event BattleSyst_PhysicDamage , et rajoutez une nouvelle commande Control Variable pour récupérer la force (ATK) du lanceur :
image

(Je me ressers des variables 95 et 96, mais libre à vous d'utiliser de nouvelles variables)
Ainsi qu'une seconde pour la défense (DEF) de la cible :
image

La formule de base pour un coup est Lanceur.Atk/2 - Cible.Def/4, on va donc assigner cette opération à notre variable 97-DamageCalc :
image

A ce niveau, on a une compétence qui tape aussi fort que l'attaque normale. Pour rajouter des dommages, on va multiplier la variable 97-DamageCalc par une nouvelle variable 94-%Damage+, puis diviser par 100. Cette variable 94-%Damage+ va servir à savoir le pourcentage de frappe de la compétence.

Maintenant, on va rajouter un peu d'aléatoire, on va multiplier notre variable 97-DamageCalc par une valeur aléatoire entre 80 et 120 (histoire d'avoir +- 20% de dégât. Ce qui est sensé être la formule de base), puis la diviser par 100.
image

Voilà à quoi doit ressembler notre event :
image

Pour faire en sorte que l'attaque à 200% prenne en compte le fait que l'ennemi est en défense, il suffit de rajouter ces commandes à la fin de l'event BattleSyst_PhysicDamage :
image

Suivi de :

Portion de code : Tout sélectionner

1
2
3
Condition Variable 74-Defending >= 1
   Variable 97-DamageCalc /= 4
Fin



Au final ça doit ressembler à ça :
image

Pour prendre en compte si un ennemi est caché ou pas :
Avec la commande GetBattleInfo (exactement la même que celle que j'ai mise un tout petit peu au-dessus), et en englobant tout l'event BattleSyst_PhysicDamage et BattleSyst_SoustrDamage par la condition :

Portion de code : Tout sélectionner

1
Condition Variable 76-Encounted >= 1



Même si en vrai, dans l'état actuel du patch, les ennemis cachés foutent le dawa (la commande pour récupérer le nombre d'ennemis ne marche pas si le premier ennemi est caché).

Maintenant, dernière étape de cette partie, dans BattleSyst_Target, il faut rajouter :

Portion de code : Tout sélectionner

1
2
3
4
5
6
Condition Variable 83-ActionType == 1
  Condition Variable 84-ActionIndex == 134 # ID du skill
    Variable 94-%Damage+ = 200
    Call Event : [BattleSyst_PhysicDamage]
  Fin
Fin




Conclusion

Et voilà la fin de ce tuto, maintenant vous savez comment faire des compétences particulières.
Voici d'autres exemples de compétences possibles grâce à ce système :
- Attaque qui multi hit (compatible seulement avec le système de délayage du pop des dommages), il suffit de calculer les dommages plusieurs fois et de les soustraire plusieurs fois.
- Attaque qui dépend de l'argent sur soi
- Attaque qui dépend du niveau
- Attaque qui dépend du nombre d'objets dans l'inventaire
- Attaque qui tape à 50% tous les ennemis sauf l'ennemi ciblé qui prend 100%
- Attaque qui tape tout le monde, alliés comme ennemis

Tous les exemples que j'ai mis sont pour des compétences avec dommages, mais en utilisant la base du système, on peut aussi détecter sur quel ennemi un sort Scan est lancé, et afficher ses PV et autres infos.

Voilà voilà, j'espère que ce tuto vous servira !

Ecrit le 25 mai 2020.





Mack - posté le 25/05/2020 à 19:49:05 (2311 messages postés) - staff -

❤ 0

Ah, tiens, j'ai complétement oublié de m'occuper du cas ou le monstre se défend dans se tuto !

EDIT :
Donc voila, pour faire en sorte que l'attaque à 200% prenne en compte le fait que l'ennemi est en défense il suffit de rajouter ces commandes à la fin de l'évent BattleSyst_PhysicDamage :
image
Suivit de :

Portion de code : Tout sélectionner

1
2
3
4
5
 
Condition Variable 74-Defending >= 1
   Variable 97-DamageCalc /= 4
Fin
 



Au final ça doit ressembler à ça :
image


Idem, le tuto ne prend pas en compte si un ennemi est caché ou pas.
Avec la commande GetBattleInfo ( exactement la même que celle que j'ai mis un tout petit peu au dessus ), et en englobant tout l'évent BattleSyst_PhysicDamage et BattleSyst_SoustrDamage par la condition :

Portion de code : Tout sélectionner

1
Condition Variable 76-Encounted >= 1



Même si en vrai, dans l'état actuel du patch, les ennemies cachés foutent le dawa xD.

Genre la commande pour récupérer le nombre d'ennemi ne marche pas du tout si le premier ennemi est caché.

( Je prend note de tout les commentaires, même si je n'y répond pas )


Nemau - posté le 25/05/2020 à 20:13:41 (53266 messages postés) - admin -

❤ 0

Narrer l'autocatégorème

Merci pour ce tuto !

Quel RPG Maker choisir ?Ocarina of Time PCPolaris 03


Gari - posté le 25/05/2020 à 20:14:20 (5901 messages postés) - honor

❤ 0

Mack, j'ai rajouté ton edit dans le corps de texte, peux-tu me dire si c'est au bon endroit ?


Mack - posté le 25/05/2020 à 20:16:08 (2311 messages postés) - staff -

❤ 0

Nickel, merci Gari :).

( Je prend note de tout les commentaires, même si je n'y répond pas )


Roi of the Suisse - posté le 27/05/2020 à 14:19:07 (30362 messages postés) - honor -

❤ 0

Chanter l'hyperchleuasme

Citation:

Damage Custom pour les skills

Ce titre en anglais :lol
Sylvanor en sueur en voyant sa page d'accueil :barbu

Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte


Gari - posté le 27/05/2020 à 15:16:48 (5901 messages postés) - honor

❤ 0

Il est pas mort, donc tout va bien. :pense

Pour le titre, c'est celui d'origine, j'ai la flemme de changer le titre de la flash news. Le tuto est très porté sur les termes anglais, c'est peut-être pas un mal.

Merci Mack pour ce premier tuto sur le patch Maniacs :sourit


Mack - posté le 28/05/2020 à 01:34:29 (2311 messages postés) - staff -

❤ 0

C'est vrai que j'utilise beaucoup d'anglicisme, surtout quand je make ^^'.
Après, on peut tout à fait changer le titre pour avoir un truc du genre "Système de dommage personnalisé".

De rien pour le tuto, je vais en faire un second, sur l'affichage d'interface personnalisé, après, si vous avez des requêtes, je peux toujours voir ce que je peux faire ^^.

( Je prend note de tout les commentaires, même si je n'y répond pas )

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers