Difficulty scaling/fr: Difference between revisions

Echocolat (talk | contribs)
No edit summary
Echocolat (talk | contribs)
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;..."
 
(11 intermediate revisions by the same user not shown)
Line 83: Line 83:
=== 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 ====  


Because of a bug in the game code<ref>The bugged code is in function {{addr|a=0x71002df7d8|ver=nx-1.5.0}}.</ref>, any time the game randomly chooses the "Shield Guard Up" bonus, the actual bonus that gets assigned to the weapon and shows up in the user interface is "Durability Up". For this reason, the extra durability value that is used for shields with the "Durability Up" bonus is either addLifeMax or addGuardMax, depending on which bonus was chosen.
À 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"
Line 177: 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 231: 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 246: 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 270: 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 289: Line 289:
     return true;
     return true;
   }
   }
   return false;  // cannot scale up
   return false;  // ne peut pas niveller
}
}
</source>
</source>
Line 327: Line 327:
     return true;
     return true;
   }
   }
   return false;  // cannot scale up
   return false;  // ne peut pas niveller
}
}
//
//
Line 341: Line 341:
     return true;
     return true;
   }
   }
   return false;  // cannot scale up
   return false;  // ne peut pas niveller
}
}
</source>
</source>