#include "status/action-setter.h"
#include "term/screen-processor.h"
#include "util/int-char-converter.h"
+#include "view/display-messages.h"
#include <string>
static bool input_racial_power_selection(player_type *creature_ptr, rc_type *rc_ptr)
case '8':
case 'k':
case 'K':
- rc_ptr->menu_line += (rc_ptr->num - 1);
+ rc_ptr->menu_line += (rc_ptr->size() - 1);
return FALSE;
case '2':
case 'j':
case 'H':
if (rc_ptr->menu_line > 18)
rc_ptr->menu_line -= 18;
- else if (rc_ptr->menu_line + 18 <= rc_ptr->num)
+ else if (rc_ptr->menu_line + 18 <= rc_ptr->size())
rc_ptr->menu_line += 18;
return FALSE;
if (input_racial_power_selection(creature_ptr, rc_ptr))
return TRUE;
- if (rc_ptr->menu_line > rc_ptr->num)
- rc_ptr->menu_line -= rc_ptr->num;
+ if (rc_ptr->menu_line > rc_ptr->size())
+ rc_ptr->menu_line -= rc_ptr->size();
return FALSE;
}
if (!use_menu)
screen_save();
- if (rc_ptr->num < 18) {
+ if (rc_ptr->size() < 18) {
prt(_(" Lv MP 失率", " Lv Cost Fail"), 1, 0);
return;
}
byte y = 2;
byte x = 0;
int ctr = 0;
- while (ctr < rc_ptr->num) {
+ while (ctr < rc_ptr->size()) {
TERM_LEN x1 = ((ctr < 18) ? x : x + 40);
TERM_LEN y1 = ((ctr < 18) ? y + ctr : y + ctr - 18);
if (use_menu) {
if (use_menu)
return;
- if (rc_ptr->choice == '\r' && rc_ptr->num == 1)
+ if (rc_ptr->choice == '\r' && rc_ptr->size() == 1)
rc_ptr->choice = 'a';
if (!isalpha(rc_ptr->choice)) {
static bool ask_invoke_racial_power(rc_type *rc_ptr)
{
- if ((rc_ptr->command_code < 0) || (rc_ptr->command_code >= rc_ptr->num)) {
+ if ((rc_ptr->command_code < 0) || (rc_ptr->command_code >= rc_ptr->size())) {
bell();
return FALSE;
}
static bool repeat_racial_power(player_type *creature_ptr, rc_type *rc_ptr)
{
- if (repeat_pull(&rc_ptr->command_code) && (rc_ptr->command_code >= 0) && (rc_ptr->command_code < rc_ptr->num))
+ if (repeat_pull(&rc_ptr->command_code) && (rc_ptr->command_code >= 0) && (rc_ptr->command_code < rc_ptr->size()))
return FALSE;
if (use_menu)
if (creature_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))
set_action(creature_ptr, ACTION_NONE);
- rc_type tmp_rc;
- rc_type *rc_ptr = initialize_rc_type(creature_ptr, &tmp_rc);
+ rc_type tmp_r = rc_type(creature_ptr);
+ rc_type *rc_ptr = &tmp_r;
switch_class_racial(creature_ptr, rc_ptr);
if (creature_ptr->mimic_form)
set_mimic_racial_command(creature_ptr, rc_ptr);
rc_ptr->flag = FALSE;
rc_ptr->redraw = FALSE;
+ if (rc_ptr->size() == 0) {
+ msg_print(_("特殊能力はありません。", "You have no special powers."));
+ return;
+ }
+
(void)strnfmt(rc_ptr->out_val, 78,
_("(特殊能力 %c-%c, *'で一覧, ESCで中断) どの特殊能力を使いますか?", "(Powers %c-%c, *=List, ESC=exit) Use which power? "), I2A(0),
- (rc_ptr->num <= 26) ? I2A(rc_ptr->num - 1) : '0' + rc_ptr->num - 27);
+ (rc_ptr->size() <= 26) ? I2A(rc_ptr->size() - 1) : '0' + rc_ptr->size() - 27);
if (repeat_racial_power(creature_ptr, rc_ptr))
return;
{
auto plev = creature_ptr->lev;
auto realm = static_cast<ElementRealm>(creature_ptr->element);
+ rpi_type rpi;
switch (realm) {
case ElementRealm::FIRE:
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("ライト・エリア", "Light area"));
+ rpi.min_level = 3;
+ rpi.cost = 5;
+ rpi.stat = A_WIS;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
case ElementRealm::ICE:
- 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].fail = 25;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("周辺フリーズ", "Sleep monsters"));
+ rpi.min_level = 10;
+ rpi.cost = 15;
+ rpi.stat = A_WIS;
+ rpi.fail = 25;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
case ElementRealm::SKY:
- 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].fail = 25;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("魔力充填", "Recharging"));
+ rpi.min_level = 20;
+ rpi.cost = 15;
+ rpi.stat = A_WIS;
+ rpi.fail = 25;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
case ElementRealm::SEA:
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("岩石溶解", "Stone to mud"));
+ rpi.min_level = 5;
+ rpi.cost = 5;
+ rpi.stat = A_WIS;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
case ElementRealm::DARKNESS:
- 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].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(format(_("闇の扉(半径%d)", "Door to darkness(rad %d)"), 15 + plev / 2));
+ rpi.min_level = 5;
+ rpi.cost = 5 + plev / 7;
+ rpi.stat = A_WIS;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
case ElementRealm::CHAOS:
- 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].fail = 40;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("現実変容", "Alter reality"));
+ rpi.min_level = 35;
+ rpi.cost = 30;
+ rpi.stat = A_WIS;
+ rpi.fail = 40;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
case ElementRealm::EARTH:
- 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].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("地震", "Earthquake"));
+ rpi.min_level = 25;
+ rpi.cost = 15;
+ rpi.stat = A_WIS;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
case ElementRealm::DEATH:
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("増殖阻止", "Sterilization"));
+ rpi.min_level = 5;
+ rpi.cost = 5;
+ rpi.stat = A_WIS;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
default:
break;
void switch_class_racial(player_type *creature_ptr, rc_type *rc_ptr)
{
+ rpi_type rpi;
switch (creature_ptr->pclass) {
case CLASS_WARRIOR:
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 35;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("剣の舞い", "Sword Dancing"));
+ rpi.min_level = 40;
+ rpi.cost = 75;
+ rpi.stat = A_DEX;
+ rpi.fail = 35;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_HIGH_MAGE:
if (creature_ptr->realm1 == REALM_HEX) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 0;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("詠唱をやめる", "Stop spell casting"));
+ rpi.min_level = 1;
+ rpi.cost = 0;
+ rpi.stat = A_INT;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
}
/* Fall through */
case CLASS_MAGE:
case CLASS_SORCERER:
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 25;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("魔力食い", "Eat Magic"));
+ rpi.min_level = 25;
+ rpi.cost = 1;
+ rpi.stat = A_INT;
+ rpi.fail = 25;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_PRIEST:
if (is_good_realm(creature_ptr->realm1)) {
- 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;
+ rpi = rc_ptr->make_power(_("武器祝福", "Bless Weapon"));
+ rpi.min_level = 35;
+ rpi.cost = 70;
+ rpi.stat = A_WIS;
+ rpi.fail = 50;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
} else {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 35;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("召魂", "Evocation"));
+ rpi.min_level = 42;
+ rpi.cost = 40;
+ rpi.stat = A_WIS;
+ rpi.fail = 35;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
}
break;
case CLASS_ROGUE:
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("ヒット&アウェイ", "Hit and Away"));
+ rpi.min_level = 8;
+ rpi.cost = 12;
+ rpi.stat = A_DEX;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_RANGER:
case CLASS_SNIPER:
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("モンスター調査", "Probe Monster"));
+ rpi.min_level = 15;
+ rpi.cost = 20;
+ rpi.stat = A_INT;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_PALADIN:
if (is_good_realm(creature_ptr->realm1)) {
- 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;
+ rpi = rc_ptr->make_power(_("ホーリー・ランス", "Holy Lance"));
+ rpi.min_level = 30;
+ rpi.cost = 30;
+ rpi.stat = A_WIS;
+ rpi.fail = 30;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
} else {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 30;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("ヘル・ランス", "Hell Lance"));
+ rpi.min_level = 30;
+ rpi.cost = 30;
+ rpi.stat = A_WIS;
+ rpi.fail = 30;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
}
break;
case CLASS_WARRIOR_MAGE:
- 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;
+ rpi = rc_ptr->make_power(_("変換: HP→MP", "Convert HP to SP"));
+ rpi.min_level = 25;
+ rpi.cost = 0;
+ rpi.stat = A_INT;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("変換: MP→HP", "Convert SP to HP"));
+ rpi.min_level = 25;
+ rpi.cost = 0;
+ rpi.stat = A_INT;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_1);
break;
case CLASS_CHAOS_WARRIOR:
- 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].fail = 25;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("幻惑の光", "Confusing Light"));
+ rpi.min_level = 40;
+ rpi.cost = 50;
+ rpi.stat = A_INT;
+ rpi.fail = 25;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_MONK:
- 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;
+ rpi = rc_ptr->make_power(_("構える", "Assume a Stance"));
+ rpi.min_level = 25;
+ rpi.cost = 0;
+ rpi.stat = A_DEX;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("百裂拳", "Double Attack"));
+ rpi.min_level = 30;
+ rpi.cost = 30;
+ rpi.stat = A_STR;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, -4);
break;
case CLASS_MINDCRAFTER:
case CLASS_FORCETRAINER:
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("明鏡止水", "Clear Mind"));
+ rpi.min_level = 15;
+ rpi.cost = 0;
+ rpi.stat = A_WIS;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_TOURIST:
- 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;
+ rpi = rc_ptr->make_power(_("写真撮影", "Take a Photograph"));
+ rpi.min_level = 1;
+ rpi.cost = 0;
+ rpi.stat = A_DEX;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
- 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].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("真・鑑定", "Identify True"));
+ rpi.min_level = 25;
+ rpi.cost = 20;
+ rpi.stat = A_INT;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, -4);
break;
case CLASS_IMITATOR:
- 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].fail = 30;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("倍返し", "Double Revenge"));
+ rpi.min_level = 30;
+ rpi.cost = 100;
+ rpi.stat = A_DEX;
+ rpi.fail = 30;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_BEASTMASTER:
- 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;
+ rpi = rc_ptr->make_power(_("生物支配", "Dominate a Living Thing"));
+ rpi.min_level = 1;
+ rpi.cost = (creature_ptr->lev + 3) / 4;
+ rpi.stat = A_CHR;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("真・生物支配", "Dominate Living Things"));
+ rpi.min_level = 30;
+ rpi.cost = (creature_ptr->lev + 20) / 2;
+ rpi.stat = A_CHR;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, -4);
break;
case CLASS_ARCHER:
- 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].fail = 0;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("弾/矢の製造", "Create Ammo"));
+ rpi.min_level = 1;
+ rpi.cost = 0;
+ rpi.stat = A_DEX;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_MAGIC_EATER:
- 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;
+ rpi = rc_ptr->make_power(_("魔力の取り込み", "Absorb Magic"));
+ rpi.min_level = 1;
+ rpi.cost = 0;
+ rpi.stat = A_INT;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
- 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].fail = 0;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("強力発動", "Powerful Activation"));
+ rpi.min_level = 10;
+ rpi.cost = 10 + (rc_ptr->lvl - 10) / 2;
+ rpi.stat = A_INT;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, -4);
break;
case CLASS_BARD:
- 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].fail = 0;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("歌を止める", "Stop Singing"));
+ rpi.min_level = 1;
+ rpi.cost = 0;
+ rpi.stat = A_CHR;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_RED_MAGE:
- 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].fail = 0;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("連続魔", "Double Magic"));
+ rpi.min_level = 48;
+ rpi.cost = 20;
+ rpi.stat = A_INT;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_SAMURAI:
- 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;
+ rpi = rc_ptr->make_power(_("気合いため", "Concentration"));
+ rpi.min_level = 1;
+ rpi.cost = 0;
+ rpi.stat = A_WIS;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
- 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 = -4;
+ rpi = rc_ptr->make_power(_("型", "Assume a Stance"));
+ rpi.min_level = 25;
+ rpi.cost = 0;
+ rpi.stat = A_DEX;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, -4);
break;
case CLASS_BLUE_MAGE:
- 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].fail = 0;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("ラーニング", "Learning"));
+ rpi.min_level = 1;
+ rpi.cost = 0;
+ rpi.stat = A_INT;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_CAVALRY:
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("荒馬ならし", "Rodeo"));
+ rpi.min_level = 10;
+ rpi.cost = 0;
+ rpi.stat = A_STR;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_BERSERKER:
- 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].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("帰還", "Recall"));
+ rpi.min_level = 10;
+ rpi.cost = 10;
+ rpi.stat = A_DEX;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_MIRROR_MASTER:
- 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;
+ rpi = rc_ptr->make_power(_("鏡割り", "Break Mirrors"));
+ rpi.min_level = 1;
+ rpi.cost = 0;
+ rpi.stat = A_INT;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
- 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].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -4;
+ rpi = rc_ptr->make_power(_("静水", "Mirror Concentration"));
+ rpi.min_level = 30;
+ rpi.cost = 0;
+ rpi.stat = A_INT;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, -4);
break;
case CLASS_SMITH:
- 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].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("目利き", "Judgment"));
+ rpi.min_level = 5;
+ rpi.cost = 15;
+ rpi.stat = A_INT;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_NINJA:
- 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].fail = 0;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("速駆け", "Quick Walk"));
+ rpi.min_level = 20;
+ rpi.cost = 0;
+ rpi.stat = A_DEX;
+ rpi.fail = 0;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
break;
case CLASS_ELEMENTALIST:
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -3;
+ rpi = rc_ptr->make_power(_("明鏡止水", "Clear Mind"));
+ rpi.min_level = 15;
+ rpi.cost = 0;
+ rpi.stat = A_WIS;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_CLASS_0);
switch_element_racial(creature_ptr, rc_ptr);
break;
default:
- rc_ptr->power_desc[0].racial_name = _("(なし)", "(none)");
break;
}
}
void select_mutation_racial(player_type *creature_ptr, rc_type *rc_ptr)
{
+ rpi_type rpi;
+
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::SPIT_ACID);
+ rpi = rc_ptr->make_power(_("酸の唾", "Spit Acid"));
+ rpi.min_level = 9;
+ rpi.cost = 9;
+ rpi.stat = A_DEX;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::SPIT_ACID));
}
if (creature_ptr->muta.has(MUTA::BR_FIRE)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 18;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::BR_FIRE);
+ rpi = rc_ptr->make_power(_("炎のブレス", "Fire Breath"));
+ rpi.min_level = 20;
+ rpi.cost = rc_ptr->lvl;
+ rpi.stat = A_CON;
+ rpi.fail = 18;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::BR_FIRE));
}
if (creature_ptr->muta.has(MUTA::HYPN_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;
- rc_ptr->power_desc[rc_ptr->num].fail = 18;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::HYPN_GAZE);
+ rpi = rc_ptr->make_power(_("催眠睨み", "Hypnotic Gaze"));
+ rpi.min_level = 12;
+ rpi.cost = 12;
+ rpi.stat = A_CHR;
+ rpi.fail = 18;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::HYPN_GAZE));
}
if (creature_ptr->muta.has(MUTA::TELEKINES)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::TELEKINES);
+ rpi = rc_ptr->make_power(_("念動力", "Telekinesis"));
+ rpi.min_level = 9;
+ rpi.cost = 9;
+ rpi.stat = A_WIS;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::TELEKINES));
}
if (creature_ptr->muta.has(MUTA::VTELEPORT)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::VTELEPORT);
+ rpi = rc_ptr->make_power(_("テレポート", "Teleport"));
+ rpi.min_level = 7;
+ rpi.cost = 7;
+ rpi.stat = A_WIS;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::VTELEPORT));
}
if (creature_ptr->muta.has(MUTA::MIND_BLST)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::MIND_BLST);
+ rpi = rc_ptr->make_power(_("精神攻撃", "Mind Blast"));
+ rpi.min_level = 5;
+ rpi.cost = 3;
+ rpi.stat = A_WIS;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::MIND_BLST));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::RADIATION);
+ rpi = rc_ptr->make_power(_("放射能", "Emit Radiation"));
+ rpi.min_level = 15;
+ rpi.cost = 15;
+ rpi.stat = A_CON;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::RADIATION));
}
if (creature_ptr->muta.has(MUTA::VAMPIRISM)) {
- 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].fail = 9;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::VAMPIRISM);
+ rpi = rc_ptr->make_power(_("吸血", "Vampiric Drain"));
+ rpi.min_level = 2;
+ rpi.cost = 1 + (rc_ptr->lvl / 3);
+ rpi.stat = A_CON;
+ rpi.fail = 9;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::VAMPIRISM));
}
if (creature_ptr->muta.has(MUTA::SMELL_MET)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::SMELL_MET);
+ rpi = rc_ptr->make_power(_("金属嗅覚", "Smell Metal"));
+ rpi.min_level = 3;
+ rpi.cost = 2;
+ rpi.stat = A_INT;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::SMELL_MET));
}
if (creature_ptr->muta.has(MUTA::SMELL_MON)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::SMELL_MON);
+ rpi = rc_ptr->make_power(_("敵臭嗅覚", "Smell Monsters"));
+ rpi.min_level = 5;
+ rpi.cost = 4;
+ rpi.stat = A_INT;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::SMELL_MON));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::BLINK);
+ rpi = rc_ptr->make_power(_("ショート・テレポート", "Blink"));
+ rpi.min_level = 3;
+ rpi.cost = 3;
+ rpi.stat = A_WIS;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::BLINK));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 18;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::EAT_ROCK);
+ rpi = rc_ptr->make_power(_("岩食い", "Eat Rock"));
+ rpi.min_level = 8;
+ rpi.cost = 12;
+ rpi.stat = A_CON;
+ rpi.fail = 18;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::EAT_ROCK));
}
if (creature_ptr->muta.has(MUTA::SWAP_POS)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 16;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::SWAP_POS);
+ rpi = rc_ptr->make_power(_("位置交換", "Swap Position"));
+ rpi.min_level = 15;
+ rpi.cost = 12;
+ rpi.stat = A_DEX;
+ rpi.fail = 16;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::SWAP_POS));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 16;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::SHRIEK);
+ rpi = rc_ptr->make_power(_("叫び", "Shriek"));
+ rpi.min_level = 20;
+ rpi.cost = 14;
+ rpi.stat = A_CON;
+ rpi.fail = 16;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::SHRIEK));
}
if (creature_ptr->muta.has(MUTA::ILLUMINE)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::ILLUMINE);
+ rpi = rc_ptr->make_power(_("照明", "Illuminate"));
+ rpi.min_level = 3;
+ rpi.cost = 2;
+ rpi.stat = A_INT;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::ILLUMINE));
}
if (creature_ptr->muta.has(MUTA::DET_CURSE)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::DET_CURSE);
+ rpi = rc_ptr->make_power(_("呪い感知", "Detect Curses"));
+ rpi.min_level = 7;
+ rpi.cost = 14;
+ rpi.stat = A_WIS;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::DET_CURSE));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::BERSERK);
+ rpi = rc_ptr->make_power(_("狂戦士化", "Berserk"));
+ rpi.min_level = 8;
+ rpi.cost = 8;
+ rpi.stat = A_STR;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::BERSERK));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 18;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::POLYMORPH);
+ rpi = rc_ptr->make_power(_("変身", "Polymorph"));
+ rpi.min_level = 18;
+ rpi.cost = 20;
+ rpi.stat = A_CON;
+ rpi.fail = 18;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::POLYMORPH));
}
if (creature_ptr->muta.has(MUTA::MIDAS_TCH)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::MIDAS_TCH);
+ rpi = rc_ptr->make_power(_("ミダスの手", "Midas Touch"));
+ rpi.min_level = 10;
+ rpi.cost = 5;
+ rpi.stat = A_INT;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::MIDAS_TCH));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::GROW_MOLD);
+ rpi = rc_ptr->make_power(_("カビ発生", "Grow Mold"));
+ rpi.min_level = 1;
+ rpi.cost = 6;
+ rpi.stat = A_CON;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::GROW_MOLD));
}
if (creature_ptr->muta.has(MUTA::RESIST)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::RESIST);
+ rpi = rc_ptr->make_power(_("エレメント耐性", "Resist Elements"));
+ rpi.min_level = 10;
+ rpi.cost = 12;
+ rpi.stat = A_CON;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::RESIST));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 16;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::EARTHQUAKE);
+ rpi = rc_ptr->make_power(_("地震", "Earthquake"));
+ rpi.min_level = 12;
+ rpi.cost = 12;
+ rpi.stat = A_STR;
+ rpi.fail = 16;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::EARTHQUAKE));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::EAT_MAGIC);
+ rpi = rc_ptr->make_power(_("魔力食い", "Eat Magic"));
+ rpi.min_level = 17;
+ rpi.cost = 1;
+ rpi.stat = A_WIS;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::EAT_MAGIC));
}
if (creature_ptr->muta.has(MUTA::WEIGH_MAG)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::WEIGH_MAG);
+ rpi = rc_ptr->make_power(_("魔力感知", "Weigh Magic"));
+ rpi.min_level = 6;
+ rpi.cost = 6;
+ rpi.stat = A_INT;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::WEIGH_MAG));
}
if (creature_ptr->muta.has(MUTA::STERILITY)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::STERILITY);
+ rpi = rc_ptr->make_power(_("増殖阻止", "Sterilize"));
+ rpi.min_level = 12;
+ rpi.cost = 23;
+ rpi.stat = A_CHR;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::STERILITY));
}
if (creature_ptr->muta.has(MUTA::HIT_AND_AWAY)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::HIT_AND_AWAY);
+ rpi = rc_ptr->make_power(_("ヒット&アウェイ", "Panic Hit"));
+ rpi.min_level = 10;
+ rpi.cost = 12;
+ rpi.stat = A_DEX;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::HIT_AND_AWAY));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 8;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::DAZZLE);
+ rpi = rc_ptr->make_power(_("眩惑", "Dazzle"));
+ rpi.min_level = 7;
+ rpi.cost = 15;
+ rpi.stat = A_CHR;
+ rpi.fail = 8;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::DAZZLE));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 9;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::LASER_EYE);
+ rpi = rc_ptr->make_power(_("レーザー・アイ", "Laser Eye"));
+ rpi.min_level = 7;
+ rpi.cost = 10;
+ rpi.stat = A_WIS;
+ rpi.fail = 9;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::LASER_EYE));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 16;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::RECALL);
+ rpi = rc_ptr->make_power(_("帰還", "Recall"));
+ rpi.min_level = 17;
+ rpi.cost = 50;
+ rpi.stat = A_INT;
+ rpi.fail = 16;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::RECALL));
}
if (creature_ptr->muta.has(MUTA::BANISH)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 18;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::BANISH);
+ rpi = rc_ptr->make_power(_("邪悪消滅", "Banish Evil"));
+ rpi.min_level = 25;
+ rpi.cost = 25;
+ rpi.stat = A_WIS;
+ rpi.fail = 18;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::BANISH));
}
if (creature_ptr->muta.has(MUTA::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;
- rc_ptr->power_desc[rc_ptr->num].fail = 11;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::COLD_TOUCH);
+ rpi = rc_ptr->make_power(_("凍結の手", "Cold Touch"));
+ rpi.min_level = 2;
+ rpi.cost = 2;
+ rpi.stat = A_CON;
+ rpi.fail = 11;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::COLD_TOUCH));
}
if (creature_ptr->muta.has(MUTA::LAUNCHER)) {
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 6;
- rc_ptr->power_desc[rc_ptr->num++].number = static_cast<int>(MUTA::LAUNCHER);
+ rpi = rc_ptr->make_power(_("アイテム投げ", "Throw Object"));
+ rpi.min_level = 1;
+ rpi.cost = rc_ptr->lvl;
+ rpi.stat = A_STR;
+ rpi.fail = 6;
+ rc_ptr->add_power(rpi, static_cast<int>(MUTA::LAUNCHER));
}
}
void set_mimic_racial_command(player_type *creature_ptr, rc_type *rc_ptr)
{
+ rpi_type rpi;
switch (creature_ptr->mimic_form) {
case MIMIC_DEMON:
case MIMIC_DEMON_LORD:
- 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].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("地獄/火炎のブレス (ダメージ %d)", "Nether or Fire Breath (dam %d)"), rc_ptr->lvl * 3));
+ rpi.min_level = 15;
+ rpi.cost = 10 + rc_ptr->lvl / 3;
+ rpi.stat = A_CON;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case MIMIC_VAMPIRE:
- 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].fail = 9;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("吸血", "Vampiric Drain"));
+ rpi.min_level = 2;
+ rpi.cost = 1 + (rc_ptr->lvl / 3);
+ rpi.stat = A_CON;
+ rpi.fail = 9;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
}
}
void set_race_racial_command(player_type *creature_ptr, rc_type *rc_ptr)
{
+ rpi_type rpi;
switch (creature_ptr->prace) {
case RACE_DWARF:
- 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].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("ドアと罠 感知", "Detect Doors+Traps"));
+ rpi.min_level = 5;
+ rpi.cost = 5;
+ rpi.stat = A_WIS;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_NIBELUNG:
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("ドアと罠 感知", "Detect Doors+Traps"));
+ rpi.min_level = 10;
+ rpi.cost = 5;
+ rpi.stat = A_WIS;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_HOBBIT:
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("食糧生成", "Create Food"));
+ rpi.min_level = 15;
+ rpi.cost = 10;
+ rpi.stat = A_INT;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_GNOME:
- 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].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("ショート・テレポート", "Blink"));
+ rpi.min_level = 5;
+ rpi.cost = 5;
+ rpi.stat = A_INT;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_HALF_ORC:
- 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].fail = rc_ptr->is_warrior ? 5 : 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("恐怖除去", "Remove Fear"));
+ rpi.min_level = 3;
+ rpi.cost = 5;
+ rpi.stat = A_WIS;
+ rpi.fail = rc_ptr->is_warrior ? 5 : 10;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_HALF_TROLL:
- 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].fail = rc_ptr->is_warrior ? 6 : 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("狂戦士化", "Berserk"));
+ rpi.min_level = 10;
+ rpi.cost = 12;
+ rpi.stat = A_STR;
+ rpi.fail = rc_ptr->is_warrior ? 6 : 12;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_BARBARIAN:
- 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].fail = rc_ptr->is_warrior ? 6 : 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("狂戦士化", "Berserk"));
+ rpi.min_level = 8;
+ rpi.cost = 10;
+ rpi.stat = A_STR;
+ rpi.fail = rc_ptr->is_warrior ? 6 : 12;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_AMBERITE:
- 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;
+ rpi = rc_ptr->make_power(_("シャドウ・シフト", "Shadow Shifting"));
+ rpi.min_level = 30;
+ rpi.cost = 50;
+ rpi.stat = A_INT;
+ rpi.fail = 50;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
- 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].fail = 50;
- rc_ptr->power_desc[rc_ptr->num++].number = -2;
+ rpi = rc_ptr->make_power(_("パターン・ウォーク", "Pattern Mindwalking"));
+ rpi.min_level = 40;
+ rpi.cost = 75;
+ rpi.stat = A_WIS;
+ rpi.fail = 50;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_1);
break;
case RACE_HALF_OGRE:
- 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].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("爆発のルーン", "Explosive Rune"));
+ rpi.min_level = 25;
+ rpi.cost = 35;
+ rpi.stat = A_INT;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_HALF_GIANT:
- 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].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("岩石溶解", "Stone to Mud"));
+ rpi.min_level = 20;
+ rpi.cost = 10;
+ rpi.stat = A_STR;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_HALF_TITAN:
- 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].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("スキャン・モンスター", "Probing"));
+ rpi.min_level = 15;
+ rpi.cost = 10;
+ rpi.stat = A_INT;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_CYCLOPS:
- 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].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("岩石投げ(ダメージ %d)", "Throw Boulder (dam %d)"), (3 * rc_ptr->lvl) / 2));
+ rpi.min_level = 20;
+ rpi.cost = 15;
+ rpi.stat = A_STR;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_YEEK:
- 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].fail = 10;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("モンスター恐慌", "Scare Monster"));
+ rpi.min_level = 15;
+ rpi.cost = 15;
+ rpi.stat = A_WIS;
+ rpi.fail = 10;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_SPECTRE:
- 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].fail = 3;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("モンスター恐慌", "Scare Monster"));
+ rpi.min_level = 4;
+ rpi.cost = 6;
+ rpi.stat = A_INT;
+ rpi.fail = 3;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_KLACKON:
- 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].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("酸の唾 (ダメージ %d)", "Spit Acid (dam %d)"), rc_ptr->lvl));
+ rpi.min_level = 9;
+ rpi.cost = 9;
+ rpi.stat = A_DEX;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_KOBOLD:
- 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].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("毒のダーツ (ダメージ %d)", "Poison Dart (dam %d)"), rc_ptr->lvl));
+ rpi.min_level = 12;
+ rpi.cost = 8;
+ rpi.stat = A_DEX;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_DARK_ELF:
- 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].fail = 9;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("マジック・ミサイル (ダメージ %dd%d)", "Magic Missile (dm %dd%d)"), 3 + ((rc_ptr->lvl - 1) / 5), 4));
+ rpi.min_level = 2;
+ rpi.cost = 2;
+ rpi.stat = A_INT;
+ rpi.fail = 9;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_DRACONIAN:
- 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].fail = 12;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("ブレス (ダメージ %d)", "Breath Weapon (dam %d)"), rc_ptr->lvl * 2));
+ rpi.min_level = 1;
+ rpi.cost = rc_ptr->lvl;
+ rpi.stat = A_CON;
+ rpi.fail = 12;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_MIND_FLAYER:
- 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].fail = 14;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("精神攻撃 (ダメージ %d)", "Mind Blast (dam %d)"), rc_ptr->lvl));
+ rpi.min_level = 15;
+ rpi.cost = 12;
+ rpi.stat = A_INT;
+ rpi.fail = 14;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_IMP:
- 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].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("ファイア・ボルト/ボール (ダメージ %d)", "Fire Bolt/Ball (dam %d)"), rc_ptr->lvl));
+ rpi.min_level = 9;
+ rpi.cost = 15;
+ rpi.stat = A_WIS;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_GOLEM:
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 8;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("肌石化 (期間 1d20+30)", "Stone Skin (dur 1d20+30)"));
+ rpi.min_level = 20;
+ rpi.cost = 15;
+ rpi.stat = A_CON;
+ rpi.fail = 8;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_SKELETON:
case RACE_ZOMBIE:
- 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].fail = 18;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("経験値復活", "Restore Experience"));
+ rpi.min_level = 30;
+ rpi.cost = 30;
+ rpi.stat = A_WIS;
+ rpi.fail = 18;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_VAMPIRE:
- 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].fail = 9;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("吸血", "Vampiric Drain"));
+ rpi.min_level = 2;
+ rpi.cost = 1 + (rc_ptr->lvl / 3);
+ rpi.stat = A_CON;
+ rpi.fail = 9;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_SPRITE:
- 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].fail = 15;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("眠り粉", "Sleeping Dust"));
+ rpi.min_level = 12;
+ rpi.cost = 12;
+ rpi.stat = A_INT;
+ rpi.fail = 15;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_BALROG:
- 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].fail = 20;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(format(_("地獄/火炎のブレス (ダメージ %d)", "Nether or Fire Breath (dam %d)"), rc_ptr->lvl * 3));
+ rpi.min_level = 15;
+ rpi.cost = 10 + rc_ptr->lvl / 3;
+ rpi.stat = A_CON;
+ rpi.fail = 20;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_KUTAR:
- 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;
- rc_ptr->power_desc[rc_ptr->num].fail = 8;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi = rc_ptr->make_power(_("横に伸びる", "Expand Horizontally (dur 30+1d20)"));
+ rpi.min_level = 20;
+ rpi.cost = 15;
+ rpi.stat = A_CHR;
+ rpi.fail = 8;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
case RACE_ANDROID:
if (creature_ptr->lev < 10) {
- 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;
+ rpi = rc_ptr->make_power(_("レイガン", "Ray Gun"));
+ rpi.min_level = 1;
+ rpi.cost = 7;
+ rpi.fail = 8;
} else if (creature_ptr->lev < 25) {
- 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;
+ rpi = rc_ptr->make_power(_("ブラスター", "Blaster"));
+ rpi.min_level = 10;
+ rpi.cost = 13;
+ rpi.fail = 10;
} else if (creature_ptr->lev < 35) {
- 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;
+ rpi = rc_ptr->make_power(_("バズーカ", "Bazooka"));
+ rpi.min_level = 25;
+ rpi.cost = 26;
+ rpi.fail = 12;
} else if (creature_ptr->lev < 45) {
- 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;
+ rpi = rc_ptr->make_power(_("ビームキャノン", "Beam Cannon"));
+ rpi.min_level = 35;
+ rpi.cost = 40;
+ rpi.fail = 15;
} else {
- 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;
+ rpi = rc_ptr->make_power(_("ロケット", "Rocket"));
+ rpi.min_level = 45;
+ rpi.cost = 60;
+ rpi.fail = 18;
}
- rc_ptr->power_desc[rc_ptr->num].stat = A_STR;
- rc_ptr->power_desc[rc_ptr->num++].number = -1;
+ rpi.stat = A_STR;
+ rc_ptr->add_power(rpi, RC_IDX_RACE_0);
break;
default:
break;
#include "racial/racial-util.h"
#include "io/input-key-requester.h"
-rc_type *initialize_rc_type(player_type *creature_ptr, rc_type *rc_ptr)
+rc_type::rc_type(player_type *creature_ptr)
{
- rc_ptr->num = 0;
- rc_ptr->command_code = 0;
- rc_ptr->ask = TRUE;
- rc_ptr->lvl = creature_ptr->lev;
- 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;
+ this->ask = true;
+ this->lvl = creature_ptr->lev;
+ this->is_warrior = (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER);
+ this->menu_line = use_menu ? 1 : 0;
+}
+
+rpi_type rc_type::make_power(std::string name)
+{
+ auto rpi = rpi_type();
+ rpi.racial_name = name;
+ return rpi;
+}
- return rc_ptr;
+void rc_type::add_power(rpi_type& rpi, int number)
+{
+ rpi.number = number;
+ this->power_desc.emplace_back(rpi);
+}
+
+COMMAND_CODE rc_type::size()
+{
+ return (COMMAND_CODE)this->power_desc.size();
}
#include "system/angband.h"
#include <string>
-#include <array>
+#include <vector>
-#define MAX_RACIAL_POWERS 36
+/*!
+ * @brief レイシャル/クラスパワー呼び出し番号
+ */
+enum rc_index : int {
+ RC_IDX_RACE_0 = -1, //!< 種族0
+ RC_IDX_RACE_1 = -2, //!< 種族1
+ RC_IDX_CLASS_0 = -3, //!< 職業0
+ RC_IDX_CLASS_1 = -4, //!< 職業1
+};
/*!
* レイシャル/クラスパワー定義構造体
*/
struct rpi_type {
- std::string racial_name{};
- PLAYER_LEVEL min_level{}; //!<体得レベル
- int cost{};
- int stat{};
- PERCENTAGE fail{};
- int number{};
- int racial_cost{};
+ std::string racial_name{}; //!< パワー名
+ PLAYER_LEVEL min_level{}; //!< 使用可能最小レベル
+ int cost{}; //!< コスト
+ int stat{}; //!< 使用に必要な能力値
+ PERCENTAGE fail{}; //!< 難易度(失敗率)
+ int number{}; //!< 呼び出し番号
+ int racial_cost{}; //!< @todo 種族コスト、おそらく不要
};
/*!
* レイシャル/クラスパワー管理構造体
*/
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{};
-};
+ std::vector<rpi_type> power_desc{}; //!< パワー定義配列
+ COMMAND_CODE command_code{}; //!< 使用しようとしているパワー番号
+ int ask{}; //!< 選択後確認するかどうか
+ PLAYER_LEVEL lvl{}; //!< プレイヤーレベル
+ bool is_warrior{}; //!< 戦士/狂戦士かどうか
+ bool flag{}; //!< パワーを選んだかどうか
+ bool redraw{}; //!< 再描画するかどうか
+ bool cast{}; //!< パワーが使用されたかどうか
+ char choice{}; //!< コマンドキー
+ char out_val[160]{}; //!< 出力文字列用バッファ
+ int menu_line{}; //!< 現在選択中の行
-rc_type *initialize_rc_type(player_type *creature_ptr, rc_type *rc_ptr);
+ /*!
+ * @brief コンストラクタ
+ * @param creature_ptr プレイヤー情報への参照ポインタ
+ * @return 管理構造体
+ */
+ rc_type(player_type *creature_prt);
+
+ /*!
+ * @brief 指定したパワー名のレイシャル/クラスパワー定義構造体を返す
+ * @param name パワー名
+ * @return パワー定義構造体
+ */
+ rpi_type make_power(std::string name);
+
+ /*!
+ * @brief レイシャル/クラスパワー定義を追加
+ * @param rpi レイシャル/クラスパワー定義(参照渡し)
+ * @param number 呼び出し番号
+ */
+ void add_power(rpi_type &rpi, int number);
+
+ /*!
+ * @brief レイシャル/クラスパワー数を返す
+ * @return パワー数
+ */
+ COMMAND_CODE size();
+};