Difficulty scaling/fr: Difference between revisions

Created page with "<source lang="c++"> if (actor->params["LevelSensorMode"] < 1) return false; // if (actor_name.contains("Enemy")) { for (enemy_table : this->byml["enemy"]) { i = -1;..."
(Updating to match new version of source page)
(Created page with "<source lang="c++"> if (actor->params["LevelSensorMode"] < 1) return false; // if (actor_name.contains("Enemy")) { for (enemy_table : this->byml["enemy"]) { i = -1;...")
 
(25 intermediate revisions by the same user not shown)
Line 10: Line 10:
* Le nombre de kills est strictement inférieur à 10.
* Le nombre de kills est strictement inférieur à 10.
* L'acteur n'a pas le flag NotCountDefeatedNum.
* L'acteur n'a pas le flag NotCountDefeatedNum.
* '''Pour Maz Koshia''' : 'Defeated_Priest_Boss_Normal_Num' est 0.
* '''Pour Miz'Kyosia''' : 'Defeated_Priest_Boss_Normal_Num' est 0.
* '''Pour Dark Beast Ganon''' : C'est la première fois que le boss final est battu. (Son flag Defeated a pour valeur maximale 1.)  
* '''Pour Ganon, Créature Maléfique''' : C'est la première fois que le boss final est battu. (Son flag Defeated a pour valeur maximale 1.)  
* '''Pour les Ombres de Ganon''' : C'est la première fois que l'Ombre est battue au sein de la créature divine, ou dans l'univers onirique (DLC2). Les Ombres que vous battez au château d'Hyrule ne comptent pas.
* '''Pour les Ombres de Ganon''' : C'est la première fois que l'Ombre est battue au sein de la créature divine, ou dans l'univers onirique (DLC2). Les Ombres que vous battez au château d'Hyrule ne comptent pas.
Cela se produit à chaque fois qu'un ennemi ''quelconque'' meurt, même s'il ne joue pas forcément de rôle dans le système de points (voir ci-dessous) et même si le joueur n'est pas responsable pour leur mort.
Cela se produit à chaque fois qu'un ennemi ''quelconque'' meurt, même s'il ne joue pas forcément de rôle dans le système de points (voir ci-dessous) et même si le joueur n'est pas responsable pour leur mort.
Line 17: Line 17:
Vu que des ennemis doivent être tués tout au long de la quête principale et que les boss sont considérés comme des ennemis, le nivellement de la difficulté est inévitable.
Vu que des ennemis doivent être tués tout au long de la quête principale et que les boss sont considérés comme des ennemis, le nivellement de la difficulté est inévitable.


Only the defeated counter flags are stored in the save file. The <code>Ecosystem::LevelSensor</code> subsystem is responsible for [[Difficulty scaling#Ecosystem::LevelSensor::calculatePoints|converting these kill counts to points]] using a [[Difficulty scaling#Ecosystem::LevelSensor::loadByml|configuration file]].
Seulement les flags d'ennemis battus sont stockés dans le fichier de sauvegarde. Le sous-système <code>Ecosystem::LevelSensor</code> est responsable de la [[#Ecosystem::LevelSensor::calculatePoints|conversion de ces décomptes en points]] en utilisant un [[#Ecosystem::LevelSensor::loadByml|fichier de configuration]].


The subsystem provides two functions ([[Difficulty scaling#Ecosystem::LevelSensor::scaleWeapon|<code>scaleWeapon</code>]] and [[Difficulty scaling#Ecosystem::LevelSensor::scaleActor|<code>scaleActor</code>]]) that may be called when a weapon or enemy actor is created.
Le sous-système fournit deux fonctions ([[#Ecosystem::LevelSensor::scaleWeapon|<code>scaleWeapon</code>]] et [[#Ecosystem::LevelSensor::scaleActor|<code>scaleActor</code>]]), appelées lorsque l'acteur d'un ennemi ou d'une arme est créé.


== Inhibiteurs du nivellement ==  
== Inhibiteurs du nivellement ==  
Line 34: Line 34:
== Armes ==  
== Armes ==  


'scaleWeapon' is called (i.e. weapons may be scaled) for a weapon if:
'scaleWeapon' est appelée (autrement dit, les armes peuvent être nivellées) pour une arme si:
* '''For standalone weapons''': The actor property 'LevelSensorMode' is higher than 1 '''and''' it wasn't already picked up.
* '''Pour les armes telles quelles''': Le paramètre 'LevelSensorMode' de l'acteur est supérieur à 1 '''et''' si elle n'ont pas déjà été récupérées.
* '''For treasure chest drops''': If SharpWeaponJudgeType is not 4, when [[AIDef:AI/TreasureBox]] initialises the drop actor.
* '''Pour les armes issues des coffres''': Si SharpWeaponJudgeType n'est pas 4, au moment où [[AIDef:AI/TreasureBox]] initialise le drop actor.
* '''For Hinox weapons''': The flag <code>{MapName}_Necklace_{i}_{HinoxName}_{ID}</code> is false.
* '''Pour les armes de Hinox''': Le flag <code>{MapName}_Necklace_{i}_{HinoxName}_{ID}</code> est faux.
* '''For other enemy drops''': The flag <code>{MapName}_WeaponDrop_{ID}</code> is false, '''and''' [the actor property 'LevelSensorMode' is higher than 1 ''or'' the enemy is a Guardian Scout ('Enemy_Guardian_Mini')].
* '''Pour les autres armes issues des ennemis''': Le flag <code>{MapName}_WeaponDrop_{ID}</code> est faux, '''et''' si [le paramètre 'LevelSensorMode' de l'acteur est supérieur à 1 ''ou'' l'ennemi est un Nano-Gardien ('Enemy_Guardian_Mini')]


Remarque : les armes achetées dans une boutique ne peuvent pas recevoir de bonus car elles ne rentrent dans aucun des cas mentionnés ci-dessus.
Remarque : les armes achetées dans une boutique ne peuvent pas recevoir de bonus car elles ne rentrent dans aucun des cas mentionnés ci-dessus.
Line 44: Line 44:
== Bonus des armes ==  
== Bonus des armes ==  


Weapon scaling results in weapons being replaced by a different weapon (e.g. a Soldier's Bow which becomes a Royal Bow), or weapons gaining a random, bonus stat boost (e.g. Attack Up, Durability Up, etc.). The range of those boosts is also affected by weapon scaling.
Le nivellement des armes fait que les armes sont remplacées par une arme différente (par exemple, un Arc de soldat qui devient un Arc royal), ou que les armes gagnent une augmentation de statistique bonus aléatoire (par exemple Attaque+, Durabilité+, etc.). L'intervalle des valeurs de ces bonus est aussi affectée par le nivellement des armes.


There are two bonus tiers in the game: one for low-level types (which appear in blue/white in the game UI) and another for high-level types (yellow). Those that belong to the Yellow tier are usually superior to the other ones. For instance, ''Attack Up +'' is the superior variant of ''Attack Up'' and it typically grants a higher attack power boost compared to ''Attack Up''.
Il y a deux rangs de bonus dans le jeu: un pour les types de faible niveau (qui apparaissent en bleu ou en blanc dans l'IU du jeu) and un autre pour ceux de meilleur niveau (jaune). Ceux qui appartiennent au rang jaune sont en général supérieurs aux autres. Par exemple, ''Attaque ↑↑'' est la version supérieure de ''Attaque ↑'' et fournit un plus grand boost d'attaque comparé à ''Attaque ↑''.


=== Types de bonus ===  
=== Types de bonus ===  
Line 78: Line 78:
* ''Coup de grâce'' ne peut être sélectionné que si weaponCommonSharpWeaponAddCrit est true ''et'' le palier est bleu/blanc. Cela signifie qu'il devient impossible d'obtenir une arme avec le bonus ''Coup de grâce'' après avoir tué un nombre suffisant d'ennemis.
* ''Coup de grâce'' ne peut être sélectionné que si weaponCommonSharpWeaponAddCrit est true ''et'' le palier est bleu/blanc. Cela signifie qu'il devient impossible d'obtenir une arme avec le bonus ''Coup de grâce'' après avoir tué un nombre suffisant d'ennemis.
* ''Glisse ↑'' (AddSurfMaster) est un bonus qui ne s'applique qu'aux boucliers et qui leur donne un coefficient de frottement plus faible pour la glisse sur bouclier. Ce type de bonus n'est pas utilisé dans le jeu.
* ''Glisse ↑'' (AddSurfMaster) est un bonus qui ne s'applique qu'aux boucliers et qui leur donne un coefficient de frottement plus faible pour la glisse sur bouclier. Ce type de bonus n'est pas utilisé dans le jeu.
'''"Garde ↑" n'apparaît pas pour les boucliers issus des Amiibo à cause d'un bug du jeu.'''


=== Valeurs de bonus ===  
=== Valeurs de bonus ===  


Bonus values (e.g. the durability or attack power increase) are determined from [[ActorParam/GeneralParamList]] (with a copy of the information in [[ActorInfoData]]). Valid ranges and bonuses for each weapon are configured in the WeaponCommon section.
La valeur des bonus (par exemple l'augmentation de puissance ou de durabilité) est déterminée à partir de [[ActorParam/GeneralParamList]] (avec une copie de l'information dans [[ActorInfoData]]). Les intervalles corrects et les bonus de chaque arme est configurée dans la partie WeaponCommon.


==== amiibo ====  
==== amiibo ====  
À cause d'un bug dans le code du jeu<ref>Le code buggué est dans la fonction {{addr|a=0x71002df7d8|ver=nx-1.5.0}}.</ref>, à chaque fois que le jeu choisit aléatoirement le bonus "Garde ↑", le vrai bonus qui est assigné à l'arme et qui apparaît dans l'interface utilisateur est "Durabilité ↑". Pour cette raison, la valeur de la durabilité supplémentaire qui est utilisée pour les boucliers avec le bonus "Durabilité ↑" est soit addLifeMax, soit addGuardMax, suivant le bonus choisi.
{|class="wikitable"
{|class="wikitable"
! Bonus !! Valeur qui est utilisée pour l'effet bonus
! Bonus !! Valeur qui est utilisée pour l'effet bonus
Line 91: Line 96:
| Attaque ↑ || addAtkMax
| Attaque ↑ || addAtkMax
|-
|-
| Durabilité ↑ || addLifeMax
| Durabilité ↑ || addLifeMax or addGuardMax
|-
|-
| Distance lancers ↑ || addThrowMax
| Distance lancers ↑ || addThrowMax
Line 172: Line 177:
|-
|-
| 0
| 0
| '''None''': No modifiers.
| '''None''': Pas de bonus.
|-
|-
| 1
| 1
| '''RandomBlue''': Weapon will randomly get at least a blue modifier (with <code>weaponCommonSharpWeaponPer</code> being the probability).
| '''RandomBlue''': L'arme aura aléatoirement au moins un bonus bleu / blanc (avec <code>weaponCommonSharpWeaponPer</code> faisant office de probabilité).
|-
|-
| 2
| 2
| '''Blue''': Weapon will get at least a blue modifier.
| '''Blue''': L'arme aura au moins un bonus bleu.
|-
|-
| 3
| 3
| '''Yellow''': Weapon will get at least a yellow modifier.
| '''Yellow''': L'arme aura au moins un bonus jaune.
|-
|-
| 4
| 4
| '''NoneForced''' (chests only): Weapon will ''never'' spawn with any modifiers. ''This overrides regular scaling.''
| '''NoneForced''' (uniquement pour les coffres): L'arme n'apparaîtra ''jamais'' avec un bonus. ''Ceci est prioritaire sur le nivellement normal.''
|}
|}


Line 226: Line 231:
=== <code>Ecosystem::LevelSensor::scaleWeapon</code> ===  
=== <code>Ecosystem::LevelSensor::scaleWeapon</code> ===  


Called from treasure chest code, enemy actors{{Check}}, <code>Ecosystem::LevelSensor::scaleActor</code>
Appelée par le code des coffres ou par les acteurs d'ennemi{{Check}}, <code>Ecosystem::LevelSensor::scaleActor</code>


Given a weapon name, its modifier and current point status, this function returns the weapon to actually spawn and the modifier to use (if possible).
Suivant le nom de l'arme, ses bonus et le compte actuel des points, cette fonction renvoie l'arme à faire apparaître, et le bonus à utiliser, si possible.


If the algorithm fails to find an appropriate weapon that satisfies all conditions (point requirements, weapon series, modifier), the originally specified weapon and modifier will be used directly.
Si l'algorithme échoue à trouver une arme qui satisfait toutes les conditions (nombre de points requis, série de l'arme, bonus), l'arme spécifiée et les bonus en entrée seront utilisés à la place.


Pseudocode (1.0.0) :
Pseudocode (1.0.0) :
Line 241: Line 246:
                                         void* unknown)
                                         void* unknown)
{
{
   // some checks using 'unknown' here which seems to be a pointer to the actor
   // quelques checks utilisant 'unknown' ici qui semble être un pointeur vers l'acteur
   //
   //
   for (weapon_table : this->byml["weapon"]) {
   for (weapon_table : this->byml["weapon"]) {
     // find the first weapon entry for which the player has enough points
     // trouve la première arme pour laquelle le joueur a assez de points
     // with the specified name and modifier
     // avec le nom spécifié et les bonus
     i = -1;
     i = -1;
     for (j = 0; j < weapon_table["actors"].size; ++j) {
     for (j = 0; j < weapon_table["actors"].size; ++j) {
Line 265: Line 270:
       entry = weapon_table["actors"][i];
       entry = weapon_table["actors"][i];
       //
       //
       // not_rank_up means there is no link between weapons;
       // not_rank_up signifie qu'il n'y a pas de lien entre les armes;
       // this table is just used to look up modifiers.
       // ce tableau est juste utilisé pour parcourir les bonus.
       // so go down the list until there are no more entries for the requested weapon
       // donc parcourt la liste jusqu'à ce qu'il n'y ait plus d'entrée pour l'arme demandée
       // or until we reach a modifier that requires more points.
       // ou jusqu'à ce que l'on atteigne un bonus qui nécessite plus de points.
       if (weapon_table["not_rank_up"] && entry["name"] != weapon_to_look_up)
       if (weapon_table["not_rank_up"] && entry["name"] != weapon_to_look_up)
         break;
         break;
       //
       //
       // otherwise, just go down the list until we reach the end or a weapon which
       // sinon, parcourt juste la liste jusqu'à atteindre la fin ou une arme qui
       // requires more points. this will possibly upgrade the weapon (e.g. Knight -> Royal).
       // requiert plus de points. Cela peut améliorer l'arme (par ex. Chevalier -> Royal).
       if (this->weapon_points <= entry["value"])
       if (this->weapon_points <= entry["value"])
         break;
         break;
Line 284: Line 289:
     return true;
     return true;
   }
   }
   return false;  // cannot scale up
   return false;  // ne peut pas niveller
}
}
</source>
</source>
Line 322: Line 327:
     return true;
     return true;
   }
   }
   return false;  // cannot scale up
   return false;  // ne peut pas niveller
}
}
//
//
Line 336: Line 341:
     return true;
     return true;
   }
   }
   return false;  // cannot scale up
   return false;  // ne peut pas niveller
}
}
</source>
</source>
autopatrol, translator
476

edits