Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV

Apprendre
RPG Maker

Guides
Tutoriels
Making-of

Dans le
Forum

Section Entraide

Tutos: Ren'Py - Combiner les (...) / Tutos: Réaliser un pathfinder sur (...) / News: Cérémonie des Alex d'or 2020 / Jeux: Beetle Ninja / Jeux: Le Miroir de Philéas / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

88 connectés actuellement

10806116 visiteurs
depuis l'ouverture

1160 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Hellsoft

Planète Glutko

Le Temple de Valor

ConsoleFun

Tous nos partenaires

Devenir
partenaire



Améliorer les rencontres aléatoires sur RPG Maker
Ecrit par Gari le 07/10/2020

Améliorer les rencontres aléatoires sur RPG Maker (toutes versions)







Pour ceux qui seraient complètement perdus :
Par rencontre aléatoire, je désigne spécifiquement les monstres non visibles rencontrés sur la carte, selon l'ancien modèle utilisé sur les jeux SNES (Final Fantasy, Dragon Quest...). En sont exclus tous systèmes de rencontres avec le monstre visible sur la carte, que j'appellerai ici rencontre déterminée.

Pourquoi ?
Ce tutoriel a pour objectif d'améliorer le rythme de jeu en calibrant mieux la fréquence des combats selon le type de jeu. Il s'agit également de pallier ici à un des défauts de programmation de RPG Maker, qui utilise une formule de rencontre peu adaptée (la rencontre s'exécute selon un chiffre aléatoire entre un pas et le nombre de pas, ce qui résulte souvent en une rencontre tous les 1-5 pas).

A noter que ce tuto a été réalisé à l'aide de mon propre ressenti en jouant aux jeux du forum, ainsi que des formules que j'ai pu trouver, et ne représente donc en rien une vérité absolue, applicable sur tous les RPG.



image

1/ Quelques conseils théoriques pour mieux adapter son Gameplay au joueur


Avant de démarrer avec les données techniques, petit arrêt sur la façon d'envisager les combats pour son jeu. Pour cela, quelques questions s'imposent :

- Quelle difficulté pour mon jeu ?
Généralement, dans l'esprit d'un maker, combat difficile rime avec combat long. Que nenni ! Un combat long est juste long, surtout si il survient trop régulièrement. En faisant cela sur toute la durée du jeu, celui-ci va juste manquer de rythme, et donc paraître ennuyeux au joueur. Dans les faits, un combat de boss est long car il doit être marquant et le groupe a souvent sa stratégie propre, là où les monstres du dimanche doivent être courts, pour ne pas casser le rythme du jeu. Ainsi, avec des héros au niveau et avec les équipements adaptés, et sauf cas particuliers, un groupe adverse ne devrait pas prendre plus de deux tours à vaincre.
Ce critère dépend également de la vitesse d'un tour, et des possibilités en combat (défilement automatique, possibilité de répéter un tour, etc).

- Est-ce que je mets à disposition du joueur un mode de difficulté ?
Ce paramètre peut influer sur la fréquence des rencontres, et permet une expérience de jeu plus agréable pour un joueur occasionnel ou plus corsée pour un expérimenté.

- Est-ce qu'il existe un moyen de modifier la fréquence des rencontres ?
Certains jeux proposent des objets, équipements ou techniques qui suppriment ou diminuent/augmentent la fréquence des rencontres, et qui autorisent donc le développeur à être moins précis sur les taux de rencontres. C'est par exemple le cas avec le mode Discrétion dans Aëdemphia, ou pour partir sur un nom plus connu, les Repousses ou le talent Lumiattirance dans Pokémon.

- Est-ce que j'utilise un système de transport rapide ?
La téléportation ou les transports en commun permettent d'éviter les rencontres, ce qui permet de rendre les rencontres fréquentes plus supportables. De plus, les systèmes de téléportation se marient bien avec les quêtes annexes, surtout si celles-ci convient à revisiter d'anciens lieux. Dans ce cas, des rencontres fréquentes (au moins pour les lieux des quêtes) sont beaucoup plus acceptables car une fois la zone validée, le joueur n'aura finalement pas à la retraverser.

- Quelle est la vitesse de marche de mon héros ?
La question peut paraître assez stupide, mais elle se pose pour un logiciel comme XP, où la vitesse de base du héros est plus basse (couplée à l'absence de système natif de course). Les rencontres un peu plus fréquentes sont généralement mieux tolérées si la vitesse de marche du héros est considérée comme satisfaisante.

- Cette zone nécessite-t-elle des rencontres fréquentes ?
Toutes les zones d'un jeu ne se ressemblent pas. Il peut donc être bénéfique de jouer sur les fréquences de rencontres aux moments opportuns : rares sur des zones calmes (voyage sur la mappemonde ou dans une cave, lors d'une infiltration discrète...), fréquentes sur des zones dangeureuses (en pleine bataille ou en territoire ennemi, ou conditionnées par une action du joueur...).

- Est-ce que vos groupes sont intéressants pour le joueur ?
Cela ne touche pas directement le taux de rencontre, mais il sera beaucoup plus sympa pour le joueur de traverser une zone s'il se rend compte que les monstres peuvent lâcher des objets, que s'il ne s'agit que de coquilles vides. A titre d'exemple, Laxius Power 1 propose des rencontres aléatoires relativement fréquentes en partie parce que les monstres donnent régulièrement des objets. Cependant, pour des trésors, les groupes concernés sont moins fréquents, ce qui crée un mini objectif pour le joueur, parfois lié à des quêtes spécifiques.

Après avoir réfléchi sur le gameplay de son jeu, on peut donc aborder la partie pratique.



2/ Utiliser le système de rencontres de base de RM en événement


Il est possible de déclencher les rencontres sans créer un événement commun très long ou complexe. Pour cela, il vous suffit de configurer vos maps avec vos groupes de monstres comme d'habitude, à la différence que le taux de rencontre ("Set Encounter Rate") doit être mis à 0.

L'événement commun/événement prend ici le relais. La question est plus de savoir si vous préférez configurer vos rencontres par map (individuellement) ou de manière globale.
Dans les deux cas, il vous faudra créer un décompte de pas :




Je n'expliquerai pas le principe de fonctionnement ici, plusieurs tutoriels sur le sujet existant déjà (ici et ici).

Quelques points à ne pas oublier cependant :
- l'événement doit être en processus parallèle. La condition est recommandée, même si optionnelle (vous pouvez très bien la laisser tourner à vide). Elle permet notamment de supprimer les rencontres aléatoires dans des zones ou des monstres sont présents, par exemple lors de séquences scénaristiques.

- votre événement doit toujours remettre à 0 le nombre de pas avant la boucle, ou après le combat. Il est également recommandé de remettre ce compteur à 0 lors du passage d'une map de monstres à une zone pacifique, les taux de rencontres pouvant différer d'une zone à l'autre.






Les avantages de ce système, argumentés par Ephy :

Citation:

C'est hyper pratique parce qu'en plus de permettre de gérer facilement les groupes de monstre rencontrés, ça laisse la possibilité de le gérer par zones (avec les zones de maps) ou par ID de terrain.
Et comme le nombre de pas nécessaire est géré en variable, on peut facilement le modifier si on utilise ou équipe un objet.






3/ Changer les formules de rencontre de RM XP et suivants


L'événement commun a ceci de pratique qu'il est entièrement modulable. Cependant, pour RPG Maker XP et ses suiveurs, il est tout à fait possible de modifier la gestion des rencontres en modifiant le script approprié.

:avert2 Comme pour toute implémentation de script, il est fortement conseillé de ne pas modifier le script de base mais d'en créer un nouveau, en appelant la méthode principale (Game_Player ou autre). Deux exemples sont données selon le langage du programme (RGSS1-2-3 et C#).

RPG Maker XP, VX et Ace

Voici déjà les formules en question, telles quelles dans les scripts de base :

Spoiler (cliquez pour afficher)


Pour ces trois versions de RPG Maker, les formules en RGSS sont assez proches, si on excepte l'emplacement dans Game_Party pour XP, et la suppression de la ligne "if $game_map.map_id != 0" pour VX Ace (qui vérifie que l'ID de la map est différent de 0).
Il existe plusieurs méthodes remplaçant la ligne @encounter_count = rand(n) + rand(n) + 1 qui permettent de modifier la manière dont est calculé le taux de rencontre.

Portion de code : Tout sélectionner

1
@encounter_count = rand(n) + rand(n) + 1 + $game_variables[x]

Rajoute le montant de la variable à l'id x au taux de calcul, ce qui augmente de x pas le taux de rencontre.

Portion de code : Tout sélectionner

1
@encounter_count = [rand(n) + rand(n) + 1, $game_variables[x]].max

La valeur de x est à changer par le nombre de pas minimum souhaité.

Portion de code : Tout sélectionner

1
@encounter_count = n + rand($game_variables[x]) + rand($game_variables[x]) - $game_variables[x]

Une formule de variance : si le nombre de pas dans les propriétés est défini à 30 et que la variable x (variance) est de 10, le taux de rencontre sera entre 20 et 40 pas.

Un exemple de ce que ça donnerait en snippet (script autonome du core de base, à placer au-dessus de Main et en-dessous de Material si existant, recommandé) :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
class Game_Player
   def make_encounter_count
    if $game_map.map_id != 0 # pour XP et VX.
      n = $game_map.encounter_step
    @encounter_count = [rand(n) + rand(n) + 1, $game_variables[x]].max # la formule modifiée.
     end #condition
   end #méthode
end #classe




RPG Maker MV et MZ

Les formules en question :

Spoiler (cliquez pour afficher)


Les formules sont là encore sensiblement les mêmes, si ce n'est que le terme var devient const.
Pour les deux premières formules qui suivent, il ne s'agit que de retranscriptions des formules précédentes, avec les termes pour MV (il suffit de remplacer var par const si vous êtes sur MZ).

Pour rajouter la valeur de la variable à l'id x au nombre de pas :

Portion de code : Tout sélectionner

1
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1 + $gameVariables.value(x)



Pour avoir un nombre de pas minimum :

Portion de code : Tout sélectionner

1
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1, $gameVariables.value(x)].max

La valeur de x est à changer par le nombre de pas minimum souhaité.

Pour modifier la variance (valeur de dispersion), la formule change un peu :

Portion de code : Tout sélectionner

1
2
3
4
5
6
Game_Player.prototype.makeEncounterCount = function() {
    var n = $gameMap.encounterStep();
    var s = Math.round(n * 0.2);
    var r = Math.randomInt(s * 2);
    this._encounterCount = n - s + r;
};


La partie à modifier est 0.2. La valeur doit se trouver entre 0 et 1 et renvoie à des pourcentages (0.2 = 20%). Plus elle est élevée, plus la variance l'est.
Exemple : pour un taux de rencontre à 30 pas, une variance à 0.5 (50%] signifie que la rencontre pourra s'effectuer entre 15 et 45 pas.

image Il existe un ajout pour MV et MZ, qui rajoute 50% au résultat de nombre de pas :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
Game_Player.prototype.encounterProgressValue = function() {
    let value = $gameMap.isBush(this.x, this.y) ? 2 : 1;
    if ($gameParty.hasEncounterHalf()) {
        value *= 0.5;
    }
    if (this.isInShip()) {
        value *= 0.5;
    }
    return value;
};



Ce que ça donnerait en snippet (script autonome du core de base, recommandé) :

Portion de code : Tout sélectionner

1
2
3
4
Game_Player.prototype.makeEncounterCount = function() { // Appel de la classe Game_Player, suivie de la méthode makeEncounterCount à modifier
    var n = $gameMap.encounterStep(); // var pour MV ; const pour MZ
    this._encounterCount = [Math.randomInt(n) + Math.randomInt(n) + 1, $gameVariables.value(x)].max // la formule changée.
}





Ecrit le 7 octobre 2020.



image

Sources :

- "Adjusting Random Encounter Rate", topic, RPG Maker Web, initié le 24 octobre 2013 [consulté le 14 août 2020], https://forums.rpgmakerweb.com/index.php?threads/adjusting-random-encounter-rate.19293/.

- "Encounter Rate Formula", topic, RPG Maker Web, initié le 6 novembre 2019 [consulté le 14 août 2020], https://forums.rpgmakerweb.com/index.php?threads/encounter-rate-formula.114936/.

- "Encounter Rating Steps", topic, RPG Maker Web, initié le 10 mai 2019 [consulté le 14 août 2020], https://forums.rpgmakerweb.com/index.php?threads/encounter-rating-steps.108844/

- JumbocactuarX27, "Variable Encounters and Random Encounter Formula", script, RPG Maker Web, initié le 8 novembre 2015 [consulté le 14 août 2020], https://forums.rpgmakerweb.com/index.php?threads/wigglelib-variable-encounters-random-encounter-formula.49773/


image

Liens utiles :

- Tiroflan, "Contrôle du nombre de pas en rencontres aléatoires", script, VX La Communauté, écrit le 14 août 2012 [consulté le 14 août 2020], https://www.rpgmakervx-fr.com/t12837-vx-vxace-controle-du-nombre-de-pas-en-rencontres-aleatoires.


Roi of the Suisse - posté le 07/10/2020 à 15:41:19 (24201 messages postés) - admin

❤ 0

Si le Sylvanor se réveille, Omnirancie disparaîtra ! Hou hou !

Merci Gari pour ce tutoriel très utile ! :ange2

Plante 300 arbres et tu ne pollues plus ! | Es-tu une star ? | Kujira no Hara | Polaris 03 | Planète Glutko


Gari - posté le 07/10/2020 à 15:46:17 (2499 messages postés) - staff -

❤ 0

Je les ai un peu snobbés dans le tuto, mais merci Ephy pour le système bien plus rapide de rencontres en événements, et merci xvw pour l'aide afin de proposer des scripts autonomes pour les formules.


Bahr-El - posté le 11/10/2020 à 16:34:11 (5 messages postés)

❤ 0

Je comprends pas. Le "label :" c’est démarrer un combat avec un ennemi ? Désolé je suis nouveau dans ce domaine et pour l’instant j’utilise une version PS4.


Gari - posté le 11/10/2020 à 18:28:44 (2499 messages postés) - staff -

❤ 0

Le label, c'est l'anglais pour désigner les étiquettes. Elles permettent de sauter d'un endroit à l'autre sans exécuter le code au sein d'un événement (Jump to Label = Aller à l'étiquette x ; Label = positionne une étiquette).

Ici, l'étiquette 1 calcule les coordonnées du héros sur la carte, et sur laquelle on revient si le personnage n'a pas effectué de pas.


Bahr-El - posté le 12/10/2020 à 19:21:15 (5 messages postés)

❤ 0

Ah okay! Merci pour l’info.


Gari - posté le 12/10/2020 à 20:36:49 (2499 messages postés) - staff -

❤ 0

C'est moi qui te remercie, ça m'a permis de me rendre compte que j'avais complètement zappé de terminer le système en event. D'où le label 2 qui pointe dans le vide (il y a bien une suite cependant, ne serait-ce que pour implémenter une formule de calcul).
J'édite dès que je peux. En attendant, voilà une version "à l'arrache" mais quand même fonctionnelle (en utilisant la deuxième formule) :

Hormis le décompte de pas, le deuxième point indispensable consiste à incrémenter notre formule aléatoire de la mort qui tue, appelée depuis notre événement décompte de pas.




Une magnifique formule de variance qui rendra jaloux tous vos potes (non).

En gros, à l'aide d'une valeur de variance (ici variable 17) que vous définissez, on divise par deux le montant de cette variable par le biais d'une variable temporaire (14) pour l'additionner et la soustraire au nombre de pas aléatoires. Ainsi votre rencontre se situera toujours dans cette fourchette.

Exemple : mon héros fait en moyenne 30 pas avant de rencontrer un monstre. Ma variance est de 10. Je vais donc rencontrer mon monstre entre 20 et 40 pas.

Il manque la condition de déclenchement.







Et une autre, cette fois pour les valeurs max, car nous sommes vraiment des gens de bien.

Ici, il faut effectuer deux fois le même calcul, et comparer les deux variables résultat : si le résultat est identique, on lance le combat (Set Encounter Rate = 1 Step), sinon on relance notre décompte de pas.






Des choses utiles à savoir :
* Quand vous vous téléportez d'une carte à une autre, votre variable de décompte de pas augmente de 1. Pour éviter une rencontre hors de la téléportation, vous devez configurer un moyen de pallier à cela, que ce soit dans l'événement commun (en intégrant une condition de vérification du numéro ID de la map) ou sur la carte (lors de la téléportation).


Bahr-El - posté le 15/10/2020 à 07:47:29 (5 messages postés)

❤ 0

Okay je vais essayé ça.

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 | Articles perso | 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 | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Jeux complets | Tous les jeux | 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