#include "angband.h"\r
#include "cmd-spell.h"\r
+#include "projection.h"\r
+#include "spells-summon.h"\r
+#include "avatar.h"\r
\r
\r
/*!\r
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
*/\r
-cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
+concptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
{\r
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
\r
- static const char s_dam[] = _("損傷:", "dam ");\r
- static const char s_rng[] = _("射程", "rng ");\r
-\r
DIRECTION dir;\r
- int plev = p_ptr->lev;\r
+ PLAYER_LEVEL plev = p_ptr->lev;\r
\r
switch (spell)\r
{\r
if (desc) return _("電撃の短いビームを放つ。", "Fires a short beam of lightning.");\r
\r
{\r
- int dice = 3 + (plev - 1) / 5;\r
- int sides = 4;\r
+ DICE_NUMBER dice = 3 + (plev - 1) / 5;\r
+ DICE_SID sides = 4;\r
POSITION range = plev / 6 + 2;\r
\r
- if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);\r
+ if (info) return format("%s%dd%d %s%d", KWD_DAM, dice, sides, KWD_RANGE, range);\r
\r
if (cast)\r
{\r
if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
\r
{\r
- int dice = 2;\r
- int sides = plev / 2;\r
+ DICE_NUMBER dice = 2;\r
+ DICE_SID sides = plev / 2;\r
POSITION rad = (plev / 10) + 1;\r
\r
if (info) return info_damage(dice, sides, 0);\r
{\r
if (!get_aim_dir(&dir)) return NULL;\r
\r
- charm_animal(dir, power);\r
+ charm_animal(dir, plev);\r
}\r
}\r
break;\r
if (desc) return _("怪我を全快させ、毒を体から完全に取り除き、体力を少し回復させる。", "Heals all cut and poison status. Heals HP a little.");\r
\r
{\r
- int dice = 2;\r
- int sides = 8;\r
+ DICE_NUMBER dice = 2;\r
+ DICE_SID sides = 8;\r
\r
if (info) return info_heal(dice, sides, 0);\r
\r
if (desc) return _("壁を溶かして床にする。", "Turns one rock square to mud.");\r
\r
{\r
- int dice = 1;\r
- int sides = 30;\r
+ DICE_NUMBER dice = 1;\r
+ DICE_SID sides = 30;\r
int base = 20;\r
\r
if (info) return info_damage(dice, sides, base);\r
if (desc) return _("冷気のボルトもしくはビームを放つ。", "Fires a bolt or beam of cold.");\r
\r
{\r
- int dice = 3 + (plev - 5) / 4;\r
- int sides = 8;\r
+ DICE_NUMBER dice = 3 + (plev - 5) / 4;\r
+ DICE_SID sides = 8;\r
\r
if (info) return info_damage(dice, sides, 0);\r
\r
if (desc) return _("火炎のボルトもしくはビームを放つ。", "Fires a bolt or beam of fire.");\r
\r
{\r
- int dice = 5 + (plev - 5) / 4;\r
- int sides = 8;\r
+ DICE_NUMBER dice = 5 + (plev - 5) / 4;\r
+ DICE_SID sides = 8;\r
\r
if (info) return info_damage(dice, sides, 0);\r
\r
if (desc) return _("光線を放つ。光りを嫌うモンスターに効果がある。", "Fires a beam of light which damages to light-sensitive monsters.");\r
\r
{\r
- int dice = 6;\r
- int sides = 8;\r
+ DICE_NUMBER dice = 6;\r
+ DICE_SID sides = 8;\r
\r
if (info) return info_damage(dice, sides, 0);\r
\r
case 13:\r
if (name) return _("足かせ", "Entangle");\r
if (desc) return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");\r
-\r
{\r
int power = plev;\r
-\r
if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- slow_monsters(plev);\r
- }\r
+ if (cast) slow_monsters(plev);\r
}\r
break;\r
\r
{\r
if (cast)\r
{\r
- if (!(summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))\r
+ if (!(summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET), '\0')))\r
{\r
msg_print(_("動物は現れなかった。", "No animals arrive."));\r
}\r
\r
{\r
int base = 20;\r
- int sides = 30;\r
+ DICE_SID sides = 30;\r
\r
if (info) return info_duration(base, sides);\r
\r
\r
{\r
int power = plev * 2;\r
-\r
if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- charm_animals(power);\r
- }\r
+ if (cast) charm_animals(power);\r
}\r
break;\r
\r
break;\r
\r
case 25:\r
- if (name) return _("カマイタチ", "Cyclone");\r
+ if (name) return _("カマイタチ", "Whirlwind");\r
if (desc) return _("全方向に向かって攻撃する。", "Attacks all adjacent monsters.");\r
-\r
- {\r
- if (cast)\r
- {\r
- int y = 0, x = 0;\r
- cave_type *c_ptr;\r
- monster_type *m_ptr;\r
-\r
- for (dir = 0; dir < 8; dir++)\r
- {\r
- y = p_ptr->y + ddy_ddd[dir];\r
- x = p_ptr->x + ddx_ddd[dir];\r
- c_ptr = &cave[y][x];\r
-\r
- /* Get the monster */\r
- m_ptr = &m_list[c_ptr->m_idx];\r
-\r
- /* Hack -- attack monsters */\r
- if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))\r
- py_attack(y, x, 0);\r
- }\r
- }\r
- }\r
+ if (cast) massacre();\r
break;\r
\r
case 26:\r
{\r
int d_dam = 4 * plev;\r
int b_dam = (100 + plev) * 2;\r
- int b_rad = 1 + plev / 12;\r
- int q_rad = 20 + plev / 2;\r
+ POSITION b_rad = 1 + plev / 12;\r
+ POSITION q_rad = 20 + plev / 2;\r
\r
- if (info) return format("%s%d+%d", s_dam, d_dam, b_dam / 2);\r
+ if (info) return format("%s%d+%d", KWD_DAM, d_dam, b_dam / 2);\r
\r
if (cast)\r
{\r