else if (die < 71)
fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
damroll(8 + ((plev - 5) / 4), 8));
- else if (die < 76) drain_life(dir, 75);
+ else if (die < 76) hypodynamic_bolt(dir, 75);
else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
- else if (die < 101) drain_life(dir, 100 + plev);
+ else if (die < 101) hypodynamic_bolt(dir, 100 + plev);
else if (die < 104)
{
earthquake(p_ptr->y, p_ptr->x, 12);
}
else if (die < 76)
{
- drain_life(dir, 75);
+ hypodynamic_bolt(dir, 75);
}
else if (die < 81)
{
}
else if (die < 101)
{
- drain_life(dir, 100 + plev);
+ hypodynamic_bolt(dir, 100 + plev);
}
else if (die < 104)
{
* @param spell 基準となる引数ID
* @return なし
*/
-static void wild_magic(int spell)
+static void wild_magic(SPELL_IDX spell)
{
int counter = 0;
int type = SUMMON_MOLD + randint0(6);
{
msg_print(_("《審判》だ。", "It's the Judgement."));
do_cmd_rerate(FALSE);
- if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
- {
- msg_print(_("全ての突然変異が治った。", "You are cured of all mutations."));
- p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
- p_ptr->update |= PU_BONUS;
- handle_stuff();
- }
+ lose_all_mutations();
}
else if (die < 120)
{
* @param song 魔法効果のID
* @return なし
*/
-static void start_singing(MAGIC_NUM2 spell, MAGIC_NUM1 song)
+static void start_singing(SPELL_IDX spell, MAGIC_NUM1 song)
{
/* Remember the song index */
- p_ptr->magic_num1[0] = song;
+ SINGING_SONG_EFFECT(p_ptr) = (MAGIC_NUM1)song;
/* Remember the index of the spell which activated the song */
- p_ptr->magic_num2[0] = spell;
+ SINGING_SONG_ID(p_ptr) = (MAGIC_NUM2)spell;
/* Now the player is singing */
if (p_ptr->pclass != CLASS_BARD) return;
/* Are there interupted song? */
- if (p_ptr->magic_num1[1])
+ if (INTERUPTING_SONG_EFFECT(p_ptr))
{
/* Forget interupted song */
- p_ptr->magic_num1[1] = 0;
+ INTERUPTING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
return;
}
/* The player is singing? */
- if (!p_ptr->magic_num1[0]) return;
+ if (!SINGING_SONG_EFFECT(p_ptr)) return;
/* Hack -- if called from set_action(), avoid recursive loop */
if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);
/* Message text of each song or etc. */
- do_spell(REALM_MUSIC, p_ptr->magic_num2[0], SPELL_STOP);
+ do_spell(REALM_MUSIC, SINGING_SONG_ID(p_ptr), SPELL_STOP);
- p_ptr->magic_num1[0] = MUSIC_NONE;
- p_ptr->magic_num2[0] = 0;
+ SINGING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
+ SINGING_SONG_ID(p_ptr) = 0;
/* Recalculate bonuses */
p_ptr->update |= (PU_BONUS);
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_life_spell(int spell, BIT_FLAGS mode)
+static cptr do_life_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_sorcery_spell(int spell, BIT_FLAGS mode)
+static cptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_nature_spell(int spell, BIT_FLAGS mode)
+static cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_chaos_spell(int spell, BIT_FLAGS mode)
+static cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_death_spell(int spell, BIT_FLAGS mode)
+static cptr do_death_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
case 8:
if (name) return _("エントロピーの球", "Orb of Entropy");
- if (desc) return _("ç\94\9få\91½ã\81®ã\81\82ã\82\8bè\80\85ã\81«å\8a¹æ\9e\9cã\81®ã\81\82ã\82\8bç\90\83ã\82\92æ\94¾ã\81¤ã\80\82", "Fires a ball which damages living monsters.");
-
+ if (desc) return _("ç\94\9få\91½ã\81®ã\81\82ã\82\8bè\80\85ã\81®HPã\81¨æ\9c\80大HPå\8f\8cæ\96¹ã\81«ã\83\80ã\83¡ã\83¼ã\82¸ã\82\92ä¸\8eã\81\88ã\82\8bå\8a¹æ\9e\9cã\81®ã\81\82ã\82\8bç\90\83ã\82\92æ\94¾ã\81¤ã\80\82", "Fires a ball which damages to both HP and MaxHP of living monsters.");
+
{
int dice = 3;
int sides = 6;
{
if (!get_aim_dir(&dir)) return NULL;
- fire_ball(GF_OLD_DRAIN, dir, damroll(dice, sides) + base, rad);
+ fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);
}
}
break;
break;
case 13:
- if (name) return _("å\90¸è¡\80ã\83\89ã\83¬ã\82¤ã\83³", "Vampiric Drain");
- if (desc) return _("モンスター1体から生命力を吸いとる。吸いとった生命力によって満腹度が上がる。",
- "Absorbs some HP from a monster and gives them to you. You will also gain nutritional sustenance from this.");
+ if (name) return _("å\90¸è¡\80ã\81®ç\9f¢", "Vampiric Bolt");
+ if (desc) return _("ã\83\9cã\83«ã\83\88ã\81«ã\82\88ã\82\8aã\83¢ã\83³ã\82¹ã\82¿ã\83¼1ä½\93ã\81\8bã\82\89ç\94\9få\91½å\8a\9bã\82\92å\90¸ã\81\84ã\81¨ã\82\8bã\80\82å\90¸ã\81\84ã\81¨ã\81£ã\81\9fç\94\9få\91½å\8a\9bã\81«ã\82\88ã\81£ã\81¦æº\80è\85¹åº¦ã\81\8cä¸\8aã\81\8cã\82\8bã\80\82",
+ "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");
{
int dice = 1;
if (!get_aim_dir(&dir)) return NULL;
- if (drain_life(dir, dam))
+ if (hypodynamic_bolt(dir, dam))
{
chg_virtue(V_SACRIFICE, -1);
chg_virtue(V_VITALITY, -1);
break;
case 21:
- if (name) return _("真・吸血", "Vampirism True");
- if (desc) return _("モンスター1体から生命力を吸いとる。吸いとった生命力によって体力が回復する。",
+ if (name) return _("吸血の連矢", "Vampiric Bolts");
+ if (desc) return _("3連射のボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって体力が回復する。",
"Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");
-
{
HIT_POINT dam = 100;
for (i = 0; i < 3; i++)
{
- if (drain_life(dir, dam))
+ if (hypodynamic_bolt(dir, dam))
hp_player(dam);
}
}
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_trump_spell(int spell, BIT_FLAGS mode)
+static cptr do_trump_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_arcane_spell(int spell, BIT_FLAGS mode)
+static cptr do_arcane_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_craft_spell(int spell, BIT_FLAGS mode)
+static cptr do_craft_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_daemon_spell(int spell, BIT_FLAGS mode)
+static cptr do_daemon_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_crusade_spell(int spell, BIT_FLAGS mode)
+static cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP 時はNULL文字列を返す。
*/
-static cptr do_music_spell(MAGIC_NUM2 spell, BIT_FLAGS mode)
+static cptr do_music_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
{
msg_print(_("静かな音楽が感覚を研ぎ澄まさせた...", "Your quiet music sharpens your sense of hearing..."));
/* Hack -- Initialize the turn count */
- p_ptr->magic_num1[2] = 0;
-
+ SINGING_COUNT(p_ptr) = 0;
start_singing(spell, MUSIC_DETECT);
}
if (cont)
{
- int count = p_ptr->magic_num1[2];
+ int count = SINGING_COUNT(p_ptr);
if (count >= 19) wiz_lite(FALSE);
if (count >= 11)
{
map_area(rad);
if (plev > 39 && count < 19)
- p_ptr->magic_num1[2] = count + 1;
+ SINGING_COUNT(p_ptr) = count + 1;
}
if (count >= 6)
{
detect_objects_normal(rad);
if (plev > 24 && count < 11)
- p_ptr->magic_num1[2] = count + 1;
+ SINGING_COUNT(p_ptr) = count + 1;
}
if (count >= 3)
{
detect_monsters_normal(rad);
if (plev > 19 && count < 6)
- p_ptr->magic_num1[2] = count + 1;
+ SINGING_COUNT(p_ptr) = count + 1;
}
detect_traps(rad, TRUE);
detect_doors(rad);
detect_stairs(rad);
if (plev > 14 && count < 3)
- p_ptr->magic_num1[2] = count + 1;
+ SINGING_COUNT(p_ptr) = count + 1;
}
}
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_CAST)
* @return SPELL_NAME / SPELL_DESC 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
*/
-static cptr do_hissatsu_spell(int spell, BIT_FLAGS mode)
+static cptr do_hissatsu_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_CONT / SPELL_STOP)
* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST / SPELL_CONT / SPELL_STOP 時はNULL文字列を返す。
*/
-static cptr do_hex_spell(int spell, BIT_FLAGS mode)
+static cptr do_hex_spell(SPELL_IDX spell, BIT_FLAGS mode)
{
bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
if (name) return _("我慢", "Patience");
if (desc) return _("数ターン攻撃を耐えた後、受けたダメージを地獄の業火として周囲に放出する。",
"Bursts hell fire strongly after patients any damage while few turns.");
- power = MIN(200, (p_ptr->magic_num1[2] * 2));
+ power = MIN(200, (HEX_REVENGE_POWER(p_ptr) * 2));
if (info) return info_damage(0, 0, power);
if (cast)
{
int a = 3 - (p_ptr->pspeed - 100) / 10;
MAGIC_NUM2 r = 3 + randint1(3) + MAX(0, MIN(3, a));
- if (p_ptr->magic_num2[2] > 0)
+ if (HEX_REVENGE_TURN(p_ptr) > 0)
{
msg_print(_("すでに我慢をしている。", "You are already patienting."));
return NULL;
}
- p_ptr->magic_num2[1] = 1;
- p_ptr->magic_num2[2] = r;
- p_ptr->magic_num1[2] = 0;
+ HEX_REVENGE_TYPE(p_ptr) = 1;
+ HEX_REVENGE_TURN(p_ptr) = r;
+ HEX_REVENGE_POWER(p_ptr) = 0;
msg_print(_("じっと耐えることにした。", "You decide to patient all damages."));
add = FALSE;
}
{
int rad = 2 + (power / 50);
- p_ptr->magic_num2[2]--;
+ HEX_REVENGE_TURN(p_ptr)--;
- if ((p_ptr->magic_num2[2] <= 0) || (power >= 200))
+ if ((HEX_REVENGE_TURN(p_ptr) <= 0) || (power >= 200))
{
msg_print(_("我慢が解かれた!", "Time for end of patioence!"));
if (power)
}
/* Reset */
- p_ptr->magic_num2[1] = 0;
- p_ptr->magic_num2[2] = 0;
- p_ptr->magic_num1[2] = 0;
+ HEX_REVENGE_TYPE(p_ptr) = 0;
+ HEX_REVENGE_TURN(p_ptr) = 0;
+ HEX_REVENGE_POWER(p_ptr) = 0;
}
}
break;
if (desc) return _("呪文詠唱を中止することなく、薬の効果を得ることができる。", "Quaffs a potion without canceling of casting a spell.");
if (cast)
{
- p_ptr->magic_num1[0] |= (1L << HEX_INHAIL);
+ CASTING_HEX_FLAGS(p_ptr) |= (1L << HEX_INHAIL);
do_cmd_quaff_potion();
- p_ptr->magic_num1[0] &= ~(1L << HEX_INHAIL);
+ CASTING_HEX_FLAGS(p_ptr) &= ~(1L << HEX_INHAIL);
add = FALSE;
}
break;
case 11:
- if (name) return _("吸血霧", "Vampiric mist");
- if (desc) return _("視界内のモンスターに微弱量の生命力吸収のダメージを与える。与えたダメージの分、体力が回復する。",
- "Deals few dameges of drain life to all monsters in your sight.");
+ if (name) return _("衰弱の霧", "Hypodynamic mist");
+ if (desc) return _("視界内のモンスターに微弱量の衰弱属性のダメージを与える。",
+ "Deals few damages of hypodynamia to all monsters in your sight.");
power = (plev / 2) + 5;
if (info) return info_damage(1, power, 0);
if (cast || cont)
{
- project_hack(GF_OLD_DRAIN, randint1(power));
+ project_hack(GF_HYPODYNAMIA, randint1(power));
}
break;
if ((!o_ptr->k_idx) || (!object_is_cursed(o_ptr)))
{
do_spell(REALM_HEX, spell, SPELL_STOP);
- p_ptr->magic_num1[0] &= ~(1L << spell);
- p_ptr->magic_num2[0]--;
- if (!p_ptr->magic_num2[0]) set_action(ACTION_NONE);
+ CASTING_HEX_FLAGS(p_ptr) &= ~(1L << spell);
+ CASTING_HEX_NUM(p_ptr)--;
+ if (!SINGING_SONG_ID(p_ptr)) set_action(ACTION_NONE);
}
}
if (stop)
if (!flag)
{
msg_format(_("%sの呪文の詠唱をやめた。", "Finish casting '%^s'."), do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
- p_ptr->magic_num1[0] &= ~(1L << HEX_RESTORE);
- if (cont) p_ptr->magic_num2[0]--;
- if (p_ptr->magic_num2) p_ptr->action = ACTION_NONE;
+ CASTING_HEX_FLAGS(p_ptr) &= ~(1L << HEX_RESTORE);
+ if (cont) CASTING_HEX_NUM(p_ptr)--;
+ if (CASTING_HEX_NUM(p_ptr)) p_ptr->action = ACTION_NONE;
/* Redraw status */
p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
if (name) return _("復讐の宣告", "Revenge sentence");
if (desc) return _("数ターン後にそれまで受けたダメージに応じた威力の地獄の劫火の弾を放つ。",
"Fires a ball of hell fire to try revenging after few turns.");
- power = p_ptr->magic_num1[2];
+ power = HEX_REVENGE_POWER(p_ptr);
if (info) return info_damage(0, 0, power);
if (cast)
{
int a = 3 - (p_ptr->pspeed - 100) / 10;
r = 1 + randint1(2) + MAX(0, MIN(3, a));
- if (p_ptr->magic_num2[2] > 0)
+ if (HEX_REVENGE_TURN(p_ptr) > 0)
{
msg_print(_("すでに復讐は宣告済みだ。", "You already pronounced your revenge."));
return NULL;
}
- p_ptr->magic_num2[1] = 2;
- p_ptr->magic_num2[2] = r;
+ HEX_REVENGE_TYPE(p_ptr) = 2;
+ HEX_REVENGE_TURN(p_ptr) = r;
msg_format(_("あなたは復讐を宣告した。あと %d ターン。", "You pronounce your revenge. %d turns left."), r);
add = FALSE;
}
if (cont)
{
- p_ptr->magic_num2[2]--;
+ HEX_REVENGE_TURN(p_ptr)--;
- if (p_ptr->magic_num2[2] <= 0)
+ if (HEX_REVENGE_TURN(p_ptr) <= 0)
{
int dir;
{
msg_print(_("復讐する気が失せた。", "You are not a mood to revenge."));
}
- p_ptr->magic_num1[2] = 0;
+ HEX_REVENGE_POWER(p_ptr) = 0;
}
}
break;
if ((cast) && (add))
{
/* add spell */
- p_ptr->magic_num1[0] |= 1L << (spell);
- p_ptr->magic_num2[0]++;
+ CASTING_HEX_FLAGS(p_ptr) |= 1L << (spell);
+ CASTING_HEX_NUM(p_ptr)++;
if (p_ptr->action != ACTION_SPELL) set_action(ACTION_SPELL);
}