[Mod PSDK] Overhaul de la capture

Discussion dans 'Mods PSDK' créé par Amras Anárion, 17 Janvier 2020.

  1. Amras Anárion

    Amras Anárion Roi Mythique Membre du personnel Team Phoenix

    Caught Overhaul - v 1.3


    Voici un nouveau Mod tout frais issu de Pokémon Sacred Phoenix : Caught Overhaul (ou Révision de la Capture en Kalossien).

    Ce mod révise les mécanismes de capture pour rééquilibrer le tout et se rapprocher de la philosophie de l'Animé. J'en ai également profité pour apporter quelques features et corrections de bugs.

    --> Télécharger le Mod ! <--
    (Crédits : Amras Anárion - Code source de PSDK : Nuri Yuri - testé sur PSDK 24.63)


    Comme il s'agit d'un rééquilibrage fait à mon initiative, ce mod n'est pas "jeu officiel friendly" (aka non conforme au gameplay officiel Pokémon).

    Un petit aperçu des changements apportés est disponible sur cette vidéo :




    Features du Mod Caught Overhaul

    Commun à Caught Enhanced et Caught Overhaul (désormais intégré de base dans PSDK) :

    • Interrupteur de capture interdite (officiellement intégré à PSDK, c'est le n°43)
    • Animation de déflexion de ball si la capture est interdite ou impossible avec affichage d'une phrase explicite. La ball ainsi repoussée n'est pas consommée et revient dans le sac.
    • Taux de capture des balls spéciales corrigé et ajusté selon la formule 7G d'USUL (incluant l'Ultra Ball et les Ultra-Chimères + patch Masse Ball).
    • Divers petits bugs corrigés. (Phrase d'échec de capture ajustée selon le nombre de secousses, nombre de secousses de 0 à 3 si échec.)
    • La phrase de la ball lancée est désormais affichée ! (Avant, le texte restait bloqué sur "Que doit faire [Pokémon] ?")
    • Gain d'XP à la capture comme c'est le cas depuis la 6G.

    Exclusif à Caught Overhaul (donc à ce mod) :

    --- Sur la formule de capture ---

    • Meilleure phrase de lancer de ball.
    • Le niveau du Pokémon a désormais une influence sur les chances de capture : bonus ×1,5 sur un Pokémon niveau 1 contre un malus ×0,58 au niveau 100 avec un "point neutre" (facteur ×1) situé au niveau 30.
    • Formule révisée de la capture : tout en conservant une probabilité de réussite globalement identique, le degré d'affaiblissement (statut et taux de PV manquants) a une bien plus grande influence (amplitude de ×0,05 à ×5 contre de ×0,333 à ×2.) Concrètement, un Pokémon non affaibli résistera significativement mieux aux tentatives de capture mais sera à l'inverse plus facile à capturer s'il est bien affaibli.
    • Un Pokémon en trop grande forme pourra repousser la ball (déflexion) comme cela existait en 1G. S'il dévie la ball du fait de cette condition (un message vous le dira explicitement), la probabilité de capture restera nulle tant que le Pokémon ne sera pas mieux affaibli. Votre ball ne sera bien entendu pas consommée. (Aucun risque de perdre une Master Ball à cause de ça.)
    • Le nombre de secousses est plus réaliste et est en adéquation avec la probabilité de capture tout en conservant un part de hasard (et donc de suspense). Si le Pokémon s'est libéré après 3 secousses, c'est que vous étiez à 1 cheveu de le capturer. Mais si aucune secousse n'a eu lieu sur au moins une ball, c'est que vos chances sont bien faibles (moins de 1/6).
    • Si un Pokémon a été capturé haut-la-main, la ball remuera moins de 3 fois, reflétant la marge avec laquelle le Pokémon a été capturé.

    --- Sur les bonus balls ---
    # les Bonus balls sont globalement lissées pour limiter les "effets paliers" et les 7 Balls à Noigrume héritent du rééquilibrage de Sacred Phoenix. Dans le détail, ça donne :

    • Hors Ultra Ball et Master Ball, les Ultra-Chimères sont traitées avec un Bonus Ball pondéré d'un malus ×0,1, permettant à la qualité de la ball utilisée de quand même jouer un peu. (Ainsi, une Hyper Ball sera à ×0,2 et une Super Ball à ×0,15 sur une Ultra-Chimère au lieu d'avoir tout à ×0,1).
    • La Faiblo Ball commence avec un Bonus Ball à ×4 au niveau 2 et perd progressivement de sa puissance pour chaque niveau supplémentaire. (-0,1 par niveau avec un minimum de ×1 au-delà du niveau 31.)
    • La Chrono Ball gagne progressivement en puissance (×1 au tour 1 puis +0,13 par tour) et atteint son maximum de ×6 au tour 40. En 3G, le maximum de ×4 était atteint au tour 31, et au tour 11 en 7G. C'est donc une formule 3G légèrement plus rapide, mais avec un maximum plus haut.
    • La Scuba Ball fonctionne légèrement mieux en milieu sous-marin (bonus ×4 au lieu de ×3,5) mais légèrement moins à la surface de l'eau et en cas de pêche (×2,5), prenant en compte que l'Appât Ball et la Filet Ball sont mieux adaptées dans ces derniers cas.
    • La Rapide Ball a un Bonus Ball à ×6 au tour 1 et diminue de 1 à chaque tour écoulé (sans passer au-dessous de 1). Elle profite donc encore d'un avantage au tour 2 (bonus ×5) si le joueur tente un affaiblissement rapide sur le premier tour. (Dans les jeux officiels, c'est ×1 dès le tour 2.)
    • La Speed Ball profite d'un bonus/malus multiplicatif s'étalonnant de ×4 à ×0,5 selon 13 paliers de base stats vitesse du Pokémon ciblé. Le bonus ball est de ×6 sur les Pokémons fuyards.
    • La Masse Ball profite d'un bonus/malus multiplicatif s'étalonnant de ×4 à ×0,5 selon 13 paliers de poids du Pokémon ciblé. En échange, le taux de capture n'est plus directement modifié via une addition/soustraction (-20 à +30 dans les jeux officiels).
    • L'Appât Ball hérite d'une partie des caractéristiques de la Filet Ball : un Bonus ball de ×2,5 sur les types Eau et Insecte. Elle est bien entendu plus efficace sur les Pokémons péchés (bonus ×4).
    • La Niveau Ball est légèrement nerfée : bonus ball ×6 si votre Pokémon a au moins le quadruple du niveau du Pokémon ciblé ; ×4 si triple, ×3 si double, ×2 si une fois et demi, ×1,5 si supérieur ou égal, ×1 sinon.
    • La Lune Ball octroie un bonus ball ×3 sur le type Fée. Bien entendu, le bonus reste de ×4 sur toutes les lignées qui évoluent avec une Pierre Lune.
    • La Copain Ball octroie un bonus ball ×2 sur toutes les lignées qui ont au moins une évolution par Bonheur.
    • La Love Ball octroie un bonus ball de ×2 si le Pokémon ciblé est de genre opposé au votre indépendamment de l'espèce. Si en plus l'espèce concorde, le bonus Ball est de ×8 comme dans les jeux officiels.

    Bugs possibles :
    • Du fait de l'influence plus important du niveau et du degré d'affaiblissement, la Master Ball peut échouer dans certains cas extrêmes. En jeu officiel, son bonus Ball de 255 est pile ce qu'il faut pour un Légendaire à 3 de taux de capture et pas du tout affaiblit (donc malus d'affaiblissement ×0,333), le résultat donnant une probabilité toute pile de 255/255. Je vous conseille donc d'augmenter le bonus Ball de la Master Ball au moins à 5100 sur Ruby Host. Idem pour les clones de la Master Ball.


    Installation :

    • Prérequis : PSDK en version 24.61 minimum
    • Si vous migrez d'une ancienne version de PSDK (< 24.60), supprimer les 2 scripts ruby de l'ancienne version et les remplacer par cette nouvelle version.
    • Décompresser l'archive.
    • Mettre les dossiers "Data" et "scripts" à la racine de votre Projet PSDK. Remplacer les fichiers si demandé.
    • Si vous avez des Fakemons, dans le script "16040 Caught Overhaul.rb", renseigner manuellement leurs ID dans les arrays suivants (ID séparés par des virgules) s'ils correspondent aux critères:
    ULTRA_BEAST si c'est une Ultra-Chimère
    MOON_EVOLVE si le Pokémon fait parti d'une lignée qui peut évoluer avec une Pierre Lune.
    FRIENDSHIP_EVOLVE si le Pokémon fait partie d'une lignée qui évolue par bonheur.

    • Si ce n'est pas déjà fait, n'oubliez pas de bien programmer l'Ultra Ball avec cette donnée de capture dans le Ruby Host (image en spoiler) :
    (Possible que ce soit déjà fait si vous avez démarré sur une version récente de PSDK.)
    Code:
    {
      ub_ball: true
    }
    De même pour la Copain Ball :
    Code:
    {
      friend_ball: true
    }
    • Profitez ! ;-)

    Le risque de conflits de mod est très faible, que 2 scripts étant modifiés.
     
    Dernière édition: 4 Mai 2020
    Bugfix apprécie ceci.
  2. Amras Anárion

    Amras Anárion Roi Mythique Membre du personnel Team Phoenix

    Sinon, pour ceux qui veulent connaitre la formule de la version Overhaul, les voici sous spoiler.

    Formule officielle (Poképédia) : https://www.pokepedia.fr/Capture_des_Pokémon#M.C3.A9canisme_d.C3.A9taill.C3.A9

    Où =
    • PVmax est le nombre maximal de PV que peut avoir le Pokémon ;
    • PVactuel le nombre de PV actuels du Pokémon ;
    • t son taux de capture (de 3 à 255) ;
    • bstatut est le bonus du statut (1 ; 1,5 ou 2) :
    • bball est le Bonus Ball de la Ball utilisée : compris entre 1 et 5 pour quasiment toutes les balls (très rarement plus de 3), sauf pour la Master Ball (255) et une Ball quelconque lancée sur une Ultra Chimère (0,1).
    • a est la probabilité de capture /255

    Pour le nombre de secousses, un mécanisme simplifiée consiste à considérer que (a/255) est élévé à la puissance 0,25 (ou racine puissance 4) puis comparé 4 fois à un chiffre aléatoire compris entre 0 et 1. Chaque fois que le chiffre aléatoire est inférieur à (a/255)^0,25, une secousse est validée, et si les 4 sont bonnes, le Pokémon est capturé. Pour avoir 4 secousses validée, la probabilité est de ((a/255)^0,25)^4 = a/255 , d'où "a" qui détermine in-fine la vraie probabilité.

    La vraie formule passe par des valeurs binaines (ex : 2^16), héritage des mécanismes de la GBA où il fallait optimiser au maximum les calculs du point de vue de la mémoire et du processeur au prix de quelques "biais d'arrondis".

    Formule overhaul - valeurs préliminaires

    La partie lié au PV et aux statut : (1 - (2 × PV actuels / 3 × PV max) × bstatut

    Est remplacée par weakening_rate qui vaut :

    weakening_rate = (2- ((3.8* (PVactuel-1)/PVmax) ^ 0.5)) × bstatut

    On a donc une racine carrée qui voudra 0 avec 1 seul PV, et entre 1,9 et 1,95 avec un Pokémon full vie.
    Ce qui donne hors statut un coefficient de 2 avec 1 PV et de 0.05 à 0.1 si non affaibli. Un Pokémon avec peu de PV sera plus proche de 0.1 full vie et plus facilement à 2 grâce au "PVactuel-1". (L'effet est inverse dans les jeux officiels : un Pokémon haut niveau à 150 PV peut mieux être affaibli qu'un Pokémon bas niveau à 15 PV.)
    Le bonus de statut (de 1 ; 1,5 ou 2,5) reste inchangé.

    Une valeur liée au niveau du Pokémon ciblé est ajoutée, la philosophie étant qu'un Pokémon de bas niveau se laisse capturer plus facilement (comme c'est le cas dans Pokémon Go et Let's Go).

    level_influence=0.1+(72.0/(pokemon.level+50.0))

    Au niveau 0, ça vaut 1,54.
    Au niveau 30, ça vaut 1 (point neutre)
    Au niveau 100, ça vaut 0,58.

    Formule overhaul - déflection

    Une fois les valeurs préliminaires établies, deflect est calculée, indépendamment de la qualité de la ball lancée. Entre en jeu par ordre d'importance :
    • Le taux d'affaiblissement (weakening_rate) (D'où le fait qu'un Pokémon non affaiblit a de fortes chances de repousser les balls.)
    • Le taux de capture du Pokémon (t)
    • L'influence du niveau (level_influence)
    Ce calcul est ignoré (aucune déflection) si le Pokémon est endormi ou gelé. (Va essayer de repousser une ball en dormant...)

    deflect=25.5/(weakening_rate*level_influence*(t+30))
    La Pokéball est déviée si cette valeur vaut 1 ou plus.

    Un Pokémon bas niveau avec un taux de capture élevé (>= 190) ne pourra donc pas encore repousser les balls même en pleine santé, ce qui laisse le temps aux joueurs débutants de se faire leurs griffes. (À titre indicatif, une Pokéball lancée sur un Rattata niveau 3 full vie a une chance sur 8 de réussir et la valeur de "deflect" tourne autour de 0,6.)
    Une fois bien avancé en jeu, affaiblir (même un petit peu) le Pokémon sauvage deviendra inévitable.

    Formule overhaul - probabilité de capture

    a=weakening_rate*level_influence*rate*bb

    a est la probabilité sur 255.
    bb le Bonus ball
    rate le taux de capture du Pokémon

    Si a est supérieur ou égal à 255, le Pokémon est capturé.
    Sinon un unique nombre aléatoire flottant "b" compris entre 0 et 255 est généré et déterminera à lui seul l'issue de la capture et le nombre de secousses.

    Formule overhaul - nombres de secousses

    - Si capturé (a >= 255)

    • Si a est inférieur à 510 (255×2), la ball remue 3 fois.
    • Si a est inférieur à 1020 (255×4), la ball remue 2 fois. (Si cela se produit, c'est que vous l'avez très bien affaibli ou lancé une ball très efficace.)
    • Si a est inférieur à 2040 (255×8), la ball remue 1 fois.
    • Si a est supérieur ou égal à 2040 (255×8), la ball remue 0 fois et le Pokémon rentre tout de suite dans la ball, preuve qu'il n'avait absolument aucune chance d'y résister.

    - Si risque d'échec (a < 255), un nombre b = rand()*255 est généré, puis :

    • Si b < a, la ball remue 3 fois et le Pokémon est capturé
    • Si b >= a×6, la ball remue 0 fois et le Pokémon s'échappe.
    Le fait que b ait été au moins 8 fois plus grand que a signifie que la probabilité de capture est inférieure à 1/8.
    • Si b >= a×3, la ball remue 1 fois et le Pokémon s'échappe.
    Le fait que b ait été au moins 4 fois plus grand que a signifie que la probabilité de capture est inférieure à 1/4.
    • Si b >= a×1.6, la ball remue 2 fois et le Pokémon s'échappe.
    Le fait que b ait été au moins 1,6 fois plus grand que a signifie que la probabilité de capture est inférieure à 1/1,6 (60 %).
    • Sinon (b compris entre a et a×1,6), la ball remue 3 fois et le Pokémon s'échappe.
    Une probabilité de capture comprise entre 60 et 100 % se traduira donc toujours par 3 secousses. (Alors qu'en jeu officiel, ça peut s'échapper dès le début si le premier des 4 tirages était raté...)

    Chaque palier de secousses représente donc respectivement un facteur cumulé de ×2 ; ×1,875 et ×1,6 sur la probabilité de capture, d'où une bien meilleure adéquation.
    Exemples :
    • À 60 % de réussite, la ball aura 40 % d'échouer et remuera toujours 3 fois.
    • À 1/3 de réussite, la ball aura 70 % de chances de remuer 3 fois et 30 % de remuer 2 fois en cas d'échec.
    • À 1/6 de réussite, la ball aura 60 % chances de remuer 1 fois, 28 % de remuer 2 fois et 12 % de remuer 3 fois en cas d'échec.
    • À 1/12 de réussite, la ball aura 54,5 % de chances de remuer 0 fois, 27 % de remuer 1 fois, 12,7 % de remuer 2 fois et 5,5 % de remuer 3 fois en cas d'échec.
    • À 1/25 de réussite, la ball aura 79 % de chances de remuer 0 fois, 12,5 % de remuer 1 fois, 5,8 % de remuer 2 fois et 2,5 % de remuer 3 fois en cas d'échec.

    C'est inspiré du mécanismes de la 1G, mais avec la part d'aléatoire, chaque secousse réussie étant comme un "pile ou face" réussi.
     
    Dernière édition: 21 Mars 2020
    yyyyj et Bugfix aiment ça.
  3. Amras Anárion

    Amras Anárion Roi Mythique Membre du personnel Team Phoenix

    Trois légers rééquilibrages viennent d'être faits sur le mod. Tous trois nerfent la difficulté.

    • La base réduisant le taux de déflexion est augmentée de 24 à 30, ce qui diminue la probabilité de renvoi, notamment sur les Pokémons les plus difficiles à capturer. (Taux de déflexion diminué de -2 % sur les plus aisés à capturer et -21 % sur un Légendaire à 3 de taux de capture.)
    • La Chrono Ball gagne légèrement plus rapidement en puissance : +0,13 de bonus ball / tour au lieu de +0.125. Le maximum reste à 6, bien supérieur aux jeux officiels.
    • Prenant en compte les fortes chances de déflexion sans affaiblissement préalable, la Rapide Ball commence à 6 de bonus ball au tour 1 (contre 5 avant), puis diminue de 1 à chaque tour écoulé. (Donc bonus ball de 5 au tour 2, de 4 au tour 3, de 3 au tour 4, de 2 au tour 5 et 1 au delà...)
     
    Bugfix apprécie ceci.
  4. Amras Anárion

    Amras Anárion Roi Mythique Membre du personnel Team Phoenix

    Nouvelle mise à jour ! Version 1.2 !

    • Légère réduction du nombre moyen de secousses en cas d'échec. Cela n'impacte pas la probabilité de réussite.
    • Compatibilité automatique avec le Nuzlocke vanilla de PSDK ainsi que celui de Death Overhaul.
     
  5. Amras Anárion

    Amras Anárion Roi Mythique Membre du personnel Team Phoenix

    Nouvelle mise à jour ! Version 1.3 !

    • Très légère coquille sur le bonus de la Chrono Ball (taux de départ à ×1,005 au lieu de ×1).
    • Les deux scripts du mod sont désormais placés dans un sous-dossier nommé "06600 Caught Overhaul", ce qui rendra la désinstallation plus facile et optimisera l'ordre de chargement avec mes autres mods.
    • Compatibilité avec la mise à jour PSDK 24.61 qui a réécrit les méthodes d'appel des objets. (Si vous avez fait la dernière mise à jour de PSDK, il faudra désinstaller l'ancienne version de ce mod et la remplacer par la v1.3, car la v1.2 n'est plus compatible.)
     
  6. Amras Anárion

    Amras Anárion Roi Mythique Membre du personnel Team Phoenix

    Idée pour intégrer un mécanisme proche de la limite de capture de la 8G au delà d'un niveau autorisé, mais de manière "soft level cap" et non "hard level cap". Les plus téméraires et acharnés pourront ainsi tenter leur chance !

    • Si c'est un Pokémon légendaire, la phrase "Le Légendaire [Pokémon] apparait !" est prioritaire. Idem pour toute phrase scénarisée (ex d'un Pokémon dominant)

    • Sinon et si le Pokémon est au delà du niveau limite, la phrase "Un [Pokémon] est apparu ! Il a l’air très fort…" sera affichée. Contrairement à Épée et Bouclier, il sera possible de le capturer, mais les chances seront énormément affaiblies.

    • Les malus de probabilité sont de 2 / (2 + nombre de niveaux en trop), soit
    - ×2/3 pour 1 niveau en trop
    - ×1/2 pour 2 niveaux
    - ×2/5 pour 3 niveaux
    - ×1/6 pour 10 niveaux
    Et ainsi de suite. Même à 20 niveaux de trop, un Pokémon sauvage avec un taux de 45 restera plus "facile" à capturer qu'un Légendaire avec un taux de 3.

    Parallèlement, un autre soft level cap interviendra : la loyauté et l'effroi du Pokémon overlevellé et capturé sera malussé de la même manière qu'un Pokémon obtenu par échange, soit un manque de 50 points de loyauté (25 en amitié et 25 en effroi) par niveau en trop. A partir de 3 niveaux en trop, il sera donc déjà désobéissant (la loyauté de base étant de 1000 et le seuil d'obéissance de 900).
    Cela peut rendre aussi un Pokémon sauvage de trop haut niveau significativement plus dangereux ! (Il aura les bonus de haine et sera plus rapide et plus violent.)

    • Le malus s'applique directement sur l'influence du niveau, donc en amont du check de la déflexion. La conséquence est que les chances de déflexion augmenteront énormément. Endormir ou geler la cible risquera d'être obligatoire ; ou alors, il faudra mettre ses PV le plus proche possible de 0.

    • Si le Pokémon sauvage dévie la ball et qu'il y a présence d'un malus d'overlevel, le jeu affichera la phrase "Le Pokémon a dévié la ball : il ne vous estime pas digne de lui et déploie toute sa volonté pour ne pas se laisser capturer !" (au lieu de la classique "Il n'est pas assez affaibli"). Mais contrairement à ce que ça pourrait laisser entendre, la probabilité n'est pas nulle. La preuve sur ce screenshot :
     
    Dernière édition: 24 Janvier 2021
    Bugfix apprécie ceci.