#include "status/action-setter.h"
#include "term/screen-processor.h"
#include "util/int-char-converter.h"
+#include <string>
static bool input_racial_power_selection(player_type *creature_ptr, rc_type *rc_ptr)
{
}
strcat(dummy,
- format("%-23.23s %2d %4d %3d%%", rc_ptr->power_desc[ctr].racial_name, rc_ptr->power_desc[ctr].min_level, rc_ptr->power_desc[ctr].cost,
+ format("%-23.23s %2d %4d %3d%%", rc_ptr->power_desc[ctr].racial_name.c_str(), rc_ptr->power_desc[ctr].min_level, rc_ptr->power_desc[ctr].cost,
100 - racial_chance(creature_ptr, &rc_ptr->power_desc[ctr])));
prt(dummy, y1, x1);
ctr++;
return TRUE;
char tmp_val[160];
- (void)strnfmt(tmp_val, 78, _("%sを使いますか? ", "Use %s? "), rc_ptr->power_desc[rc_ptr->command_code].racial_name);
+ (void)strnfmt(tmp_val, 78, _("%sを使いますか? ", "Use %s? "), rc_ptr->power_desc[rc_ptr->command_code].racial_name.c_str());
return get_check(tmp_val);
}
auto realm = static_cast<ElementRealm>(creature_ptr->element);
switch (realm) {
case ElementRealm::FIRE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ライト・エリア", "Light area"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ライト・エリア", "Light area");
rc_ptr->power_desc[rc_ptr->num].min_level = 3;
rc_ptr->power_desc[rc_ptr->num].cost = 5;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case ElementRealm::ICE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("周辺フリーズ", "Sleep monsters"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("周辺フリーズ", "Sleep monsters");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case ElementRealm::SKY:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("魔力充填", "Recharging"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("魔力充填", "Recharging");
rc_ptr->power_desc[rc_ptr->num].min_level = 20;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case ElementRealm::SEA:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("岩石溶解", "Stone to mud"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("岩石溶解", "Stone to mud");
rc_ptr->power_desc[rc_ptr->num].min_level = 5;
rc_ptr->power_desc[rc_ptr->num].cost = 5;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case ElementRealm::DARKNESS:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("闇の扉(半径%d)", "Door to darkness(rad %d)"), 15 + plev / 2);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("闇の扉(半径%d)", "Door to darkness(rad %d)"), 15 + plev / 2);
rc_ptr->power_desc[rc_ptr->num].min_level = 5;
rc_ptr->power_desc[rc_ptr->num].cost = 5 + plev / 7;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case ElementRealm::CHAOS:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("現実変容", "Alter reality"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("現実変容", "Alter reality");
rc_ptr->power_desc[rc_ptr->num].min_level = 35;
rc_ptr->power_desc[rc_ptr->num].cost = 30;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case ElementRealm::EARTH:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("地震", "Earthquake"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("地震", "Earthquake");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case ElementRealm::DEATH:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("増殖阻止", "Sterilization"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("増殖阻止", "Sterilization");
rc_ptr->power_desc[rc_ptr->num].min_level = 5;
rc_ptr->power_desc[rc_ptr->num].cost = 5;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
{
switch (creature_ptr->pclass) {
case CLASS_WARRIOR:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("剣の舞い", "Sword Dancing"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("剣の舞い", "Sword Dancing");
rc_ptr->power_desc[rc_ptr->num].min_level = 40;
rc_ptr->power_desc[rc_ptr->num].cost = 75;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
break;
case CLASS_HIGH_MAGE:
if (creature_ptr->realm1 == REALM_HEX) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("詠唱をやめる", "Stop spell casting"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("詠唱をやめる", "Stop spell casting");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
/* Fall through */
case CLASS_MAGE:
case CLASS_SORCERER:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("魔力食い", "Eat Magic"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("魔力食い", "Eat Magic");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 1;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
break;
case CLASS_PRIEST:
if (is_good_realm(creature_ptr->realm1)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("武器祝福", "Bless Weapon"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("武器祝福", "Bless Weapon");
rc_ptr->power_desc[rc_ptr->num].min_level = 35;
rc_ptr->power_desc[rc_ptr->num].cost = 70;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num].fail = 50;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
} else {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("召魂", "Evocation"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("召魂", "Evocation");
rc_ptr->power_desc[rc_ptr->num].min_level = 42;
rc_ptr->power_desc[rc_ptr->num].cost = 40;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
break;
case CLASS_ROGUE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ヒット&アウェイ", "Hit and Away"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ヒット&アウェイ", "Hit and Away");
rc_ptr->power_desc[rc_ptr->num].min_level = 8;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
break;
case CLASS_RANGER:
case CLASS_SNIPER:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("モンスター調査", "Probe Monster"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("モンスター調査", "Probe Monster");
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 20;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
break;
case CLASS_PALADIN:
if (is_good_realm(creature_ptr->realm1)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ホーリー・ランス", "Holy Lance"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ホーリー・ランス", "Holy Lance");
rc_ptr->power_desc[rc_ptr->num].min_level = 30;
rc_ptr->power_desc[rc_ptr->num].cost = 30;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num].fail = 30;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
} else {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ヘル・ランス", "Hell Lance"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ヘル・ランス", "Hell Lance");
rc_ptr->power_desc[rc_ptr->num].min_level = 30;
rc_ptr->power_desc[rc_ptr->num].cost = 30;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
break;
case CLASS_WARRIOR_MAGE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("変換: HP→MP", "Convert HP to SP"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("変換: HP→MP", "Convert HP to SP");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num].fail = 10;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("変換: MP→HP", "Convert SP to HP"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("変換: MP→HP", "Convert SP to HP");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case CLASS_CHAOS_WARRIOR:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("幻惑の光", "Confusing Light"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("幻惑の光", "Confusing Light");
rc_ptr->power_desc[rc_ptr->num].min_level = 40;
rc_ptr->power_desc[rc_ptr->num].cost = 50;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_MONK:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("構える", "Assume a Stance"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("構える", "Assume a Stance");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num].fail = 0;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("百裂拳", "Double Attack"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("百裂拳", "Double Attack");
rc_ptr->power_desc[rc_ptr->num].min_level = 30;
rc_ptr->power_desc[rc_ptr->num].cost = 30;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
break;
case CLASS_MINDCRAFTER:
case CLASS_FORCETRAINER:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("明鏡止水", "Clear Mind"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("明鏡止水", "Clear Mind");
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_TOURIST:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("写真撮影", "Take a Photograph"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("写真撮影", "Take a Photograph");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num].fail = 0;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("真・鑑定", "Identify True"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("真・鑑定", "Identify True");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 20;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case CLASS_IMITATOR:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("倍返し", "Double Revenge"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("倍返し", "Double Revenge");
rc_ptr->power_desc[rc_ptr->num].min_level = 30;
rc_ptr->power_desc[rc_ptr->num].cost = 100;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_BEASTMASTER:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("生物支配", "Dominate a Living Thing"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("生物支配", "Dominate a Living Thing");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = (creature_ptr->lev + 3) / 4;
rc_ptr->power_desc[rc_ptr->num].stat = A_CHR;
rc_ptr->power_desc[rc_ptr->num].fail = 10;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("真・生物支配", "Dominate Living Things"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("真・生物支配", "Dominate Living Things");
rc_ptr->power_desc[rc_ptr->num].min_level = 30;
rc_ptr->power_desc[rc_ptr->num].cost = (creature_ptr->lev + 20) / 2;
rc_ptr->power_desc[rc_ptr->num].stat = A_CHR;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case CLASS_ARCHER:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("弾/矢の製造", "Create Ammo"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("弾/矢の製造", "Create Ammo");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_MAGIC_EATER:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("魔力の取り込み", "Absorb Magic"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("魔力の取り込み", "Absorb Magic");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num].fail = 0;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("強力発動", "Powerful Activation"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("強力発動", "Powerful Activation");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 10 + (rc_ptr->lvl - 10) / 2;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case CLASS_BARD:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("歌を止める", "Stop Singing"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("歌を止める", "Stop Singing");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_CHR;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_RED_MAGE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("連続魔", "Double Magic"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("連続魔", "Double Magic");
rc_ptr->power_desc[rc_ptr->num].min_level = 48;
rc_ptr->power_desc[rc_ptr->num].cost = 20;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_SAMURAI:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("気合いため", "Concentration"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("気合いため", "Concentration");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num].fail = 0;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("型", "Assume a Stance"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("型", "Assume a Stance");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case CLASS_BLUE_MAGE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ラーニング", "Learning"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ラーニング", "Learning");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_CAVALRY:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("荒馬ならし", "Rodeo"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("荒馬ならし", "Rodeo");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_BERSERKER:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("帰還", "Recall"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("帰還", "Recall");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 10;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_MIRROR_MASTER:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("鏡割り", "Break Mirrors"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("鏡割り", "Break Mirrors");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num].fail = 0;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("静水", "Mirror Concentration"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("静水", "Mirror Concentration");
rc_ptr->power_desc[rc_ptr->num].min_level = 30;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -4;
break;
case CLASS_SMITH:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("目利き", "Judgment"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("目利き", "Judgment");
rc_ptr->power_desc[rc_ptr->num].min_level = 5;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_NINJA:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("速駆け", "Quick Walk"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("速駆け", "Quick Walk");
rc_ptr->power_desc[rc_ptr->num].min_level = 20;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num++].number = -3;
break;
case CLASS_ELEMENTALIST:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("明鏡止水", "Clear Mind"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("明鏡止水", "Clear Mind");
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 0;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
switch_element_racial(creature_ptr, rc_ptr);
break;
default:
- strcpy(rc_ptr->power_desc[0].racial_name, _("(なし)", "(none)"));
+ rc_ptr->power_desc[0].racial_name = _("(なし)", "(none)");
break;
}
}
#include "system/angband.h"
-typedef struct rc_type rc_type;
+struct rc_type;
void switch_class_racial(player_type *creature_ptr, rc_type *rc_ptr);
void select_mutation_racial(player_type *creature_ptr, rc_type *rc_ptr)
{
if (creature_ptr->muta.has(MUTA::SPIT_ACID)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("酸の唾", "Spit Acid"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("酸の唾", "Spit Acid");
rc_ptr->power_desc[rc_ptr->num].min_level = 9;
rc_ptr->power_desc[rc_ptr->num].cost = 9;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
}
if (creature_ptr->muta.has(MUTA::BR_FIRE)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("炎のブレス", "Fire Breath"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("炎のブレス", "Fire Breath");
rc_ptr->power_desc[rc_ptr->num].min_level = 20;
rc_ptr->power_desc[rc_ptr->num].cost = rc_ptr->lvl;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
}
if (creature_ptr->muta.has(MUTA::HYPN_GAZE)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("催眠睨み", "Hypnotic Gaze"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("催眠睨み", "Hypnotic Gaze");
rc_ptr->power_desc[rc_ptr->num].min_level = 12;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_CHR;
}
if (creature_ptr->muta.has(MUTA::TELEKINES)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("念動力", "Telekinesis"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("念動力", "Telekinesis");
rc_ptr->power_desc[rc_ptr->num].min_level = 9;
rc_ptr->power_desc[rc_ptr->num].cost = 9;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
}
if (creature_ptr->muta.has(MUTA::VTELEPORT)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("テレポート", "Teleport"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("テレポート", "Teleport");
rc_ptr->power_desc[rc_ptr->num].min_level = 7;
rc_ptr->power_desc[rc_ptr->num].cost = 7;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
}
if (creature_ptr->muta.has(MUTA::MIND_BLST)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("精神攻撃", "Mind Blast"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("精神攻撃", "Mind Blast");
rc_ptr->power_desc[rc_ptr->num].min_level = 5;
rc_ptr->power_desc[rc_ptr->num].cost = 3;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
}
if (creature_ptr->muta.has(MUTA::RADIATION)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("放射能", "Emit Radiation"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("放射能", "Emit Radiation");
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
}
if (creature_ptr->muta.has(MUTA::VAMPIRISM)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("吸血", "Vampiric Drain"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("吸血", "Vampiric Drain");
rc_ptr->power_desc[rc_ptr->num].min_level = 2;
- rc_ptr->power_desc[rc_ptr->num].cost = (1 + (rc_ptr->lvl / 3));
+ rc_ptr->power_desc[rc_ptr->num].cost = 1 + (rc_ptr->lvl / 3);
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
rc_ptr->power_desc[rc_ptr->num].fail = 9;
rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::VAMPIRISM);
}
if (creature_ptr->muta.has(MUTA::SMELL_MET)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("金属嗅覚", "Smell Metal"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("金属嗅覚", "Smell Metal");
rc_ptr->power_desc[rc_ptr->num].min_level = 3;
rc_ptr->power_desc[rc_ptr->num].cost = 2;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
}
if (creature_ptr->muta.has(MUTA::SMELL_MON)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("敵臭嗅覚", "Smell Monsters"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("敵臭嗅覚", "Smell Monsters");
rc_ptr->power_desc[rc_ptr->num].min_level = 5;
rc_ptr->power_desc[rc_ptr->num].cost = 4;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
}
if (creature_ptr->muta.has(MUTA::BLINK)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ショート・テレポート", "Blink"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ショート・テレポート", "Blink");
rc_ptr->power_desc[rc_ptr->num].min_level = 3;
rc_ptr->power_desc[rc_ptr->num].cost = 3;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
}
if (creature_ptr->muta.has(MUTA::EAT_ROCK)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("岩食い", "Eat Rock"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("岩食い", "Eat Rock");
rc_ptr->power_desc[rc_ptr->num].min_level = 8;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
}
if (creature_ptr->muta.has(MUTA::SWAP_POS)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("位置交換", "Swap Position"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("位置交換", "Swap Position");
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
}
if (creature_ptr->muta.has(MUTA::SHRIEK)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("叫び", "Shriek"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("叫び", "Shriek");
rc_ptr->power_desc[rc_ptr->num].min_level = 20;
rc_ptr->power_desc[rc_ptr->num].cost = 14;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
}
if (creature_ptr->muta.has(MUTA::ILLUMINE)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("照明", "Illuminate"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("照明", "Illuminate");
rc_ptr->power_desc[rc_ptr->num].min_level = 3;
rc_ptr->power_desc[rc_ptr->num].cost = 2;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
}
if (creature_ptr->muta.has(MUTA::DET_CURSE)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("呪い感知", "Detect Curses"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("呪い感知", "Detect Curses");
rc_ptr->power_desc[rc_ptr->num].min_level = 7;
rc_ptr->power_desc[rc_ptr->num].cost = 14;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
}
if (creature_ptr->muta.has(MUTA::BERSERK)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("狂戦士化", "Berserk"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("狂戦士化", "Berserk");
rc_ptr->power_desc[rc_ptr->num].min_level = 8;
rc_ptr->power_desc[rc_ptr->num].cost = 8;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
}
if (creature_ptr->muta.has(MUTA::POLYMORPH)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("変身", "Polymorph"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("変身", "Polymorph");
rc_ptr->power_desc[rc_ptr->num].min_level = 18;
rc_ptr->power_desc[rc_ptr->num].cost = 20;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
}
if (creature_ptr->muta.has(MUTA::MIDAS_TCH)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ミダスの手", "Midas Touch"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ミダスの手", "Midas Touch");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 5;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
}
if (creature_ptr->muta.has(MUTA::GROW_MOLD)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("カビ発生", "Grow Mold"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("カビ発生", "Grow Mold");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 6;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
}
if (creature_ptr->muta.has(MUTA::RESIST)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("エレメント耐性", "Resist Elements"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("エレメント耐性", "Resist Elements");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
}
if (creature_ptr->muta.has(MUTA::EARTHQUAKE)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("地震", "Earthquake"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("地震", "Earthquake");
rc_ptr->power_desc[rc_ptr->num].min_level = 12;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
}
if (creature_ptr->muta.has(MUTA::EAT_MAGIC)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("魔力食い", "Eat Magic"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("魔力食い", "Eat Magic");
rc_ptr->power_desc[rc_ptr->num].min_level = 17;
rc_ptr->power_desc[rc_ptr->num].cost = 1;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
}
if (creature_ptr->muta.has(MUTA::WEIGH_MAG)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("魔力感知", "Weigh Magic"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("魔力感知", "Weigh Magic");
rc_ptr->power_desc[rc_ptr->num].min_level = 6;
rc_ptr->power_desc[rc_ptr->num].cost = 6;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
}
if (creature_ptr->muta.has(MUTA::STERILITY)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("増殖阻止", "Sterilize"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("増殖阻止", "Sterilize");
rc_ptr->power_desc[rc_ptr->num].min_level = 12;
rc_ptr->power_desc[rc_ptr->num].cost = 23;
rc_ptr->power_desc[rc_ptr->num].stat = A_CHR;
}
if (creature_ptr->muta.has(MUTA::HIT_AND_AWAY)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ヒット&アウェイ", "Panic Hit"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ヒット&アウェイ", "Panic Hit");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
}
if (creature_ptr->muta.has(MUTA::DAZZLE)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("眩惑", "Dazzle"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("眩惑", "Dazzle");
rc_ptr->power_desc[rc_ptr->num].min_level = 7;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_CHR;
}
if (creature_ptr->muta.has(MUTA::LASER_EYE)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("レーザー・アイ", "Laser Eye"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("レーザー・アイ", "Laser Eye");
rc_ptr->power_desc[rc_ptr->num].min_level = 7;
rc_ptr->power_desc[rc_ptr->num].cost = 10;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
}
if (creature_ptr->muta.has(MUTA::RECALL)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("帰還", "Recall"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("帰還", "Recall");
rc_ptr->power_desc[rc_ptr->num].min_level = 17;
rc_ptr->power_desc[rc_ptr->num].cost = 50;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
}
if (creature_ptr->muta.has(MUTA::BANISH)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("邪悪消滅", "Banish Evil"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("邪悪消滅", "Banish Evil");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 25;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
}
if (creature_ptr->muta.has(MUTA::COLD_TOUCH)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("凍結の手", "Cold Touch"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("凍結の手", "Cold Touch");
rc_ptr->power_desc[rc_ptr->num].min_level = 2;
rc_ptr->power_desc[rc_ptr->num].cost = 2;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
}
if (creature_ptr->muta.has(MUTA::LAUNCHER)) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("アイテム投げ", "Throw Object"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("アイテム投げ", "Throw Object");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = rc_ptr->lvl;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
switch (creature_ptr->mimic_form) {
case MIMIC_DEMON:
case MIMIC_DEMON_LORD:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("地獄/火炎のブレス (ダメージ %d)", "Nether or Fire Breath (dam %d)"), rc_ptr->lvl * 3);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("地獄/火炎のブレス (ダメージ %d)", "Nether or Fire Breath (dam %d)"), rc_ptr->lvl * 3);
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 10 + rc_ptr->lvl / 3;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case MIMIC_VAMPIRE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("吸血", "Vampiric Drain"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name, _("吸血", "Vampiric Drain");
rc_ptr->power_desc[rc_ptr->num].min_level = 2;
rc_ptr->power_desc[rc_ptr->num].cost = 1 + (rc_ptr->lvl / 3);
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
{
switch (creature_ptr->prace) {
case RACE_DWARF:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ドアと罠 感知", "Detect Doors+Traps"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ドアと罠 感知", "Detect Doors+Traps");
rc_ptr->power_desc[rc_ptr->num].min_level = 5;
rc_ptr->power_desc[rc_ptr->num].cost = 5;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_NIBELUNG:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ドアと罠 感知", "Detect Doors+Traps"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ドアと罠 感知", "Detect Doors+Traps");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 5;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_HOBBIT:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("食糧生成", "Create Food"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("食糧生成", "Create Food");
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 10;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_GNOME:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ショート・テレポート", "Blink"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ショート・テレポート", "Blink");
rc_ptr->power_desc[rc_ptr->num].min_level = 5;
rc_ptr->power_desc[rc_ptr->num].cost = 5;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_HALF_ORC:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("恐怖除去", "Remove Fear"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("恐怖除去", "Remove Fear");
rc_ptr->power_desc[rc_ptr->num].min_level = 3;
rc_ptr->power_desc[rc_ptr->num].cost = 5;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_HALF_TROLL:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("狂戦士化", "Berserk"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("狂戦士化", "Berserk");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_BARBARIAN:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("狂戦士化", "Berserk"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("狂戦士化", "Berserk");
rc_ptr->power_desc[rc_ptr->num].min_level = 8;
rc_ptr->power_desc[rc_ptr->num].cost = 10;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_AMBERITE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("シャドウ・シフト", "Shadow Shifting"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("シャドウ・シフト", "Shadow Shifting");
rc_ptr->power_desc[rc_ptr->num].min_level = 30;
rc_ptr->power_desc[rc_ptr->num].cost = 50;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num].fail = 50;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("パターン・ウォーク", "Pattern Mindwalking"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("パターン・ウォーク", "Pattern Mindwalking");
rc_ptr->power_desc[rc_ptr->num].min_level = 40;
rc_ptr->power_desc[rc_ptr->num].cost = 75;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -2;
break;
case RACE_HALF_OGRE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("爆発のルーン", "Explosive Rune"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("爆発のルーン", "Explosive Rune");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 35;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_HALF_GIANT:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("岩石溶解", "Stone to Mud"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("岩石溶解", "Stone to Mud");
rc_ptr->power_desc[rc_ptr->num].min_level = 20;
rc_ptr->power_desc[rc_ptr->num].cost = 10;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_HALF_TITAN:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("スキャン・モンスター", "Probing"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("スキャン・モンスター", "Probing");
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 10;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_CYCLOPS:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("岩石投げ(ダメージ %d)", "Throw Boulder (dam %d)"), (3 * rc_ptr->lvl) / 2);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("岩石投げ(ダメージ %d)", "Throw Boulder (dam %d)"), (3 * rc_ptr->lvl) / 2);
rc_ptr->power_desc[rc_ptr->num].min_level = 20;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_YEEK:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("モンスター恐慌", "Scare Monster"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("モンスター恐慌", "Scare Monster");
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_SPECTRE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("モンスター恐慌", "Scare Monster"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("モンスター恐慌", "Scare Monster");
rc_ptr->power_desc[rc_ptr->num].min_level = 4;
rc_ptr->power_desc[rc_ptr->num].cost = 6;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_KLACKON:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("酸の唾 (ダメージ %d)", "Spit Acid (dam %d)"), rc_ptr->lvl);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("酸の唾 (ダメージ %d)", "Spit Acid (dam %d)"), rc_ptr->lvl);
rc_ptr->power_desc[rc_ptr->num].min_level = 9;
rc_ptr->power_desc[rc_ptr->num].cost = 9;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_KOBOLD:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("毒のダーツ (ダメージ %d)", "Poison Dart (dam %d)"), rc_ptr->lvl);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("毒のダーツ (ダメージ %d)", "Poison Dart (dam %d)"), rc_ptr->lvl);
rc_ptr->power_desc[rc_ptr->num].min_level = 12;
rc_ptr->power_desc[rc_ptr->num].cost = 8;
rc_ptr->power_desc[rc_ptr->num].stat = A_DEX;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_DARK_ELF:
- sprintf(
- rc_ptr->power_desc[rc_ptr->num].racial_name, _("マジック・ミサイル (ダメージ %dd%d)", "Magic Missile (dm %dd%d)"), 3 + ((rc_ptr->lvl - 1) / 5), 4);
+ rc_ptr->power_desc[rc_ptr->num].racial_name
+ = format(_("マジック・ミサイル (ダメージ %dd%d)", "Magic Missile (dm %dd%d)"), 3 + ((rc_ptr->lvl - 1) / 5), 4);
rc_ptr->power_desc[rc_ptr->num].min_level = 2;
rc_ptr->power_desc[rc_ptr->num].cost = 2;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_DRACONIAN:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ブレス (ダメージ %d)", "Breath Weapon (dam %d)"), rc_ptr->lvl * 2);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("ブレス (ダメージ %d)", "Breath Weapon (dam %d)"), rc_ptr->lvl * 2);
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = rc_ptr->lvl;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_MIND_FLAYER:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("精神攻撃 (ダメージ %d)", "Mind Blast (dam %d)"), rc_ptr->lvl);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("精神攻撃 (ダメージ %d)", "Mind Blast (dam %d)"), rc_ptr->lvl);
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_IMP:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ファイア・ボルト/ボール (ダメージ %d)", "Fire Bolt/Ball (dam %d)"), rc_ptr->lvl);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("ファイア・ボルト/ボール (ダメージ %d)", "Fire Bolt/Ball (dam %d)"), rc_ptr->lvl);
rc_ptr->power_desc[rc_ptr->num].min_level = 9;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_GOLEM:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("肌石化 (期間 1d20+30)", "Stone Skin (dur 1d20+30)"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("肌石化 (期間 1d20+30)", "Stone Skin (dur 1d20+30)");
rc_ptr->power_desc[rc_ptr->num].min_level = 20;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
break;
case RACE_SKELETON:
case RACE_ZOMBIE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("経験値復活", "Restore Experience"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("経験値復活", "Restore Experience");
rc_ptr->power_desc[rc_ptr->num].min_level = 30;
rc_ptr->power_desc[rc_ptr->num].cost = 30;
rc_ptr->power_desc[rc_ptr->num].stat = A_WIS;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_VAMPIRE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("吸血", "Vampiric Drain"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("吸血", "Vampiric Drain");
rc_ptr->power_desc[rc_ptr->num].min_level = 2;
rc_ptr->power_desc[rc_ptr->num].cost = 1 + (rc_ptr->lvl / 3);
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_SPRITE:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("眠り粉", "Sleeping Dust"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("眠り粉", "Sleeping Dust");
rc_ptr->power_desc[rc_ptr->num].min_level = 12;
rc_ptr->power_desc[rc_ptr->num].cost = 12;
rc_ptr->power_desc[rc_ptr->num].stat = A_INT;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_BALROG:
- sprintf(rc_ptr->power_desc[rc_ptr->num].racial_name, _("地獄/火炎のブレス (ダメージ %d)", "Nether or Fire Breath (dam %d)"), rc_ptr->lvl * 3);
+ rc_ptr->power_desc[rc_ptr->num].racial_name = format(_("地獄/火炎のブレス (ダメージ %d)", "Nether or Fire Breath (dam %d)"), rc_ptr->lvl * 3);
rc_ptr->power_desc[rc_ptr->num].min_level = 15;
rc_ptr->power_desc[rc_ptr->num].cost = 10 + rc_ptr->lvl / 3;
rc_ptr->power_desc[rc_ptr->num].stat = A_CON;
rc_ptr->power_desc[rc_ptr->num++].number = -1;
break;
case RACE_KUTAR:
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("横に伸びる", "Expand Horizontally (dur 30+1d20)"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("横に伸びる", "Expand Horizontally (dur 30+1d20)");
rc_ptr->power_desc[rc_ptr->num].min_level = 20;
rc_ptr->power_desc[rc_ptr->num].cost = 15;
rc_ptr->power_desc[rc_ptr->num].stat = A_CHR;
break;
case RACE_ANDROID:
if (creature_ptr->lev < 10) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("レイガン", "Ray Gun"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("レイガン", "Ray Gun");
rc_ptr->power_desc[rc_ptr->num].min_level = 1;
rc_ptr->power_desc[rc_ptr->num].cost = 7;
rc_ptr->power_desc[rc_ptr->num].fail = 8;
} else if (creature_ptr->lev < 25) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ブラスター", "Blaster"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ブラスター", "Blaster");
rc_ptr->power_desc[rc_ptr->num].min_level = 10;
rc_ptr->power_desc[rc_ptr->num].cost = 13;
rc_ptr->power_desc[rc_ptr->num].fail = 10;
} else if (creature_ptr->lev < 35) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("バズーカ", "Bazooka"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("バズーカ", "Bazooka");
rc_ptr->power_desc[rc_ptr->num].min_level = 25;
rc_ptr->power_desc[rc_ptr->num].cost = 26;
rc_ptr->power_desc[rc_ptr->num].fail = 12;
} else if (creature_ptr->lev < 45) {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ビームキャノン", "Beam Cannon"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ビームキャノン", "Beam Cannon");
rc_ptr->power_desc[rc_ptr->num].min_level = 35;
rc_ptr->power_desc[rc_ptr->num].cost = 40;
rc_ptr->power_desc[rc_ptr->num].fail = 15;
} else {
- strcpy(rc_ptr->power_desc[rc_ptr->num].racial_name, _("ロケット", "Rocket"));
+ rc_ptr->power_desc[rc_ptr->num].racial_name = _("ロケット", "Rocket");
rc_ptr->power_desc[rc_ptr->num].min_level = 45;
rc_ptr->power_desc[rc_ptr->num].cost = 60;
rc_ptr->power_desc[rc_ptr->num].fail = 18;
default:
break;
}
-}
\ No newline at end of file
+}
rc_ptr->cast = FALSE;
rc_ptr->is_warrior = (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER);
rc_ptr->menu_line = use_menu ? 1 : 0;
- for (int i = 0; i < MAX_RACIAL_POWERS; i++) {
- strcpy(rc_ptr->power_desc[i].racial_name, "");
- rc_ptr->power_desc[i].number = 0;
- }
return rc_ptr;
}
#pragma once
#include "system/angband.h"
+#include <string>
+#include <array>
#define MAX_RACIAL_POWERS 36
-/* Racial Power Info / レイシャル・パワー情報の構造体定義 */
-typedef struct rpi_type {
- GAME_TEXT racial_name[MAX_NLEN];
- PLAYER_LEVEL min_level; //!<体得レベル
- int cost;
- int stat;
- PERCENTAGE fail;
- int number;
- int racial_cost;
-} rpi_type;
+/*!
+ * レイシャル/クラスパワー定義構造体
+ */
+struct rpi_type {
+ std::string racial_name{};
+ PLAYER_LEVEL min_level{}; //!<体得レベル
+ int cost{};
+ int stat{};
+ PERCENTAGE fail{};
+ int number{};
+ int racial_cost{};
+};
-// Racial Command.
-typedef struct rc_type {
- rpi_type power_desc[MAX_RACIAL_POWERS];
- int num;
- COMMAND_CODE command_code;
- int ask;
- PLAYER_LEVEL lvl;
- bool flag;
- bool redraw;
- bool cast;
- bool is_warrior;
- char choice;
- char out_val[160];
- int menu_line;
-} rc_type;
+/*!
+ * レイシャル/クラスパワー管理構造体
+ */
+struct rc_type {
+ std::array<rpi_type, MAX_RACIAL_POWERS> power_desc{};
+ int num{};
+ COMMAND_CODE command_code{};
+ int ask{};
+ PLAYER_LEVEL lvl{};
+ bool flag{};
+ bool redraw{};
+ bool cast{};
+ bool is_warrior{};
+ char choice{};
+ char out_val[160]{};
+ int menu_line{};
+};
rc_type *initialize_rc_type(player_type *creature_ptr, rc_type *rc_ptr);