bool Ecosystem::LevelSensor::scaleWeapon(const sead::SafeString& weapon_to_look_up,
WeaponModifier required_modifier,
const char** weapon_to_use_name,
WeaponModifier* modifier_to_use,
void* unknown)
{
// quelques checks utilisant 'unknown' ici qui semble être un pointeur vers l'acteur
//
for (weapon_table : this->byml["weapon"]) {
// trouve la première arme pour laquelle le joueur a assez de points
// avec le nom spécifié et les bonus
i = -1;
for (j = 0; j < weapon_table["actors"].size; ++j) {
entry = weapon_table["actors"][j];
float points_for_next_transition = entry["value"];
//
if (this->weapon_points > points_for_next_transition &&
weapon_to_look_up == entry["name"] &&
convert_to_modifier(entry["plus"]) == required_modifier) {
i = j;
break;
}
}
//
if (i == -1)
continue;
//
do {
entry = weapon_table["actors"][i];
//
// not_rank_up signifie qu'il n'y a pas de lien entre les armes;
// ce tableau est juste utilisé pour parcourir les bonus.
// donc parcourt la liste jusqu'à ce qu'il n'y ait plus d'entrée pour l'arme demandée
// 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)
break;
//
// sinon, parcourt juste la liste jusqu'à atteindre la fin ou une arme qui
// requiert plus de points. Cela peut améliorer l'arme (par ex. Chevalier -> Royal).
if (this->weapon_points <= entry["value"])
break;
//
++i;
} while (i < weapon_table["actors"].size);
//
*weapon_to_use_name = entry["name"];
*modifier_to_use = convert_to_modifier(entry["plus"]);
return true;
}
return false; // ne peut pas niveller
}