/*!
* @brief ランダムアーティファクト生成中、対象のオブジェクトに名前を与える.
* @param o_ptr 処理中のアイテム参照ポインタ
- * @param return_name 名前を返すための文字列参照ポインタ
* @param armour 対象のオブジェクトが防具が否か
* @param power 銘の基準となるオブジェクトの価値レベル(0=呪い、1=低位、2=中位、3以上=高位)
+ * @return ランダムアーティファクト名
* @details 確率によって、シンダリン銘、漢字銘 (anameからランダム)、固定名のいずれか一つが与えられる.
* シンダリン銘:10%、漢字銘18%、固定銘72% (固定銘が尽きていたら漢字銘になることもある).
*/
-void get_random_name(ItemEntity *o_ptr, char *return_name, bool armour, int power)
+std::string get_random_name(const ItemEntity &item, bool armour, int power)
{
const auto prob = randint1(100);
constexpr auto chance_sindarin = 10;
+ char random_artifact_name[1024]{};
if (prob <= chance_sindarin) {
- get_table_sindarin(return_name);
- return;
+ get_table_sindarin(random_artifact_name);
+ return random_artifact_name;
}
constexpr auto chance_table = 20;
if (prob <= chance_table) {
- get_table_name(return_name);
- return;
+ get_table_name(random_artifact_name);
+ return random_artifact_name;
}
auto filename = get_random_art_filename(armour, power);
- (void)get_rnd_line(filename.data(), o_ptr->artifact_bias, return_name);
+ (void)get_rnd_line(filename.data(), item.artifact_bias, random_artifact_name);
#ifdef JP
- if (return_name[0] == 0) {
- get_table_name(return_name);
+ if (random_artifact_name[0] == 0) {
+ get_table_name(random_artifact_name);
}
#endif
+ return random_artifact_name;
}
/*対邪平均ダメージの計算処理*/
* @brief ランダムアーティファクトのバイアス付加処理ヘッダ
*/
+#include <string>
+
class ItemEntity;
class PlayerType;
void curse_artifact(PlayerType *player_ptr, ItemEntity *o_ptr);
-void get_random_name(ItemEntity *o_ptr, char *return_name, bool armour, int power);
+std::string get_random_name(const ItemEntity &item, bool armour, int power);
bool has_extreme_damage_rate(PlayerType *player_ptr, ItemEntity *o_ptr);
static std::string name_unnatural_random_artifact(PlayerType *player_ptr, ItemEntity *o_ptr, const bool a_scroll, const int power_level)
{
- GAME_TEXT new_name[1024] = "";
-
if (!a_scroll) {
- get_random_name(o_ptr, new_name, o_ptr->is_protector(), power_level);
- return new_name;
+ return get_random_name(*o_ptr, o_ptr->is_protector(), power_level);
}
concptr ask_msg = _("このアーティファクトを何と名付けますか?", "What do you want to call the artifact? ");
o_ptr->ident |= IDENT_FULL_KNOWN;
o_ptr->art_name = quark_add("");
(void)screen_object(player_ptr, o_ptr, 0L);
+ char new_name[1024] = "";
if (!get_string(ask_msg, new_name, sizeof new_name) || !new_name[0]) {
if (one_in_(2)) {
get_table_sindarin_aux(new_name);