F:NO_CONF | NO_SLEEP | NO_STUN | QUANTUM | RAND_25
F:REGENERATE | SELF_DARK_1 | SELF_DARK_2
S:1_IN_5 | BR_NETH | BRAIN_SMASH | SCARE | S_UNDEAD | S_HI_UNDEAD
-S:DRAIN_MANA | HEAL | ANIM_DEAD
+S:DRAIN_MANA | HEAL | ANIM_DEAD | BO_ABYSS | BO_VOID | BR_ABYSS | BR_VOID | BA_VOID | BA_ABYSS
D:$A black hole in the fabric of reality.
D:$ It simply is not there.
D:現実という生地に空いた黒い穴。これは「無」だ。
S:BO_PLAS
D:$It is a brain-like monster on a machine with four spider-like legs.
D:それは脳みそのような生き物で、蜘蛛のような脚を4つ持つ機械に乗っている。
+
+N:1351:ヴォイド・ボルテックス
+E:Void vortex
+G:v:v
+I:140:32d20:100:80:0
+W:55:1:0:4000:0:0
+F:ATTR_MULTI | ATTR_ANY |
+F:PREVENT_SUDDEN_MAGIC | NEVER_BLOW |
+F:RAND_50 | RAND_25 | CAN_FLY |
+F:EMPTY_MIND | BASH_DOOR | POWERFUL |
+F:RES_GRAV | RES_TELE | NO_CONF | NO_SLEEP | NO_FEAR | NO_STUN | NONLIVING
+S:1_IN_6 |
+S:BR_VOID
+V:150
+D:$It's a void whirlpool.
+D:空虚な渦巻きだ。
+
+N:1352:アビス・ボルテックス
+E:Abyss vortex
+G:v:v
+I:140:32d20:100:80:0
+W:55:1:0:4000:0:0
+F:ATTR_MULTI | ATTR_ANY |
+F:PREVENT_SUDDEN_MAGIC | NEVER_BLOW |
+F:RAND_50 | RAND_25 | CAN_FLY |
+F:EMPTY_MIND | BASH_DOOR | POWERFUL |
+F:HAS_DARK_1 | HAS_DARK_2 | RES_DARK | NO_CONF | NO_SLEEP | NO_FEAR | NO_STUN | NONLIVING
+S:1_IN_6 |
+S:BR_ABYSS
+V:150
+D:$It's a abyssal whirlpool.
+D:深淵の渦巻きだ。
+
return true;
}
+bool cast_blue_ball_void(PlayerType *player_ptr, bmc_type *bmc_ptr)
+{
+ if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
+ return false;
+
+ msg_print(_("虚空の嵐の呪文を念じた。", "You invoke a void storm."));
+ bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_VOID, bmc_ptr->plev, DAM_ROLL);
+ fire_ball(player_ptr, AttributeType::VOID_MAGIC, bmc_ptr->dir, bmc_ptr->damage, 4);
+ return true;
+}
+
+bool cast_blue_ball_abyss(PlayerType *player_ptr, bmc_type *bmc_ptr)
+{
+ if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
+ return false;
+
+ msg_print(_("深淵の嵐の呪文を念じた。", "You invoke a abyss storm."));
+ bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_ABYSS, bmc_ptr->plev, DAM_ROLL);
+ fire_ball(player_ptr, AttributeType::ABYSS, bmc_ptr->dir, bmc_ptr->damage, 4);
+ return true;
+}
+
bool cast_blue_bolt_acid(PlayerType *player_ptr, bmc_type *bmc_ptr)
{
if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
fire_bolt(player_ptr, AttributeType::MISSILE, bmc_ptr->dir, bmc_ptr->damage);
return true;
}
+
+bool cast_blue_bolt_abyss(PlayerType *player_ptr, bmc_type *bmc_ptr)
+{
+ if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
+ return false;
+
+ msg_print(_("アビス・ボルトの呪文を唱えた。", "You cast a abyss bolt."));
+ bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_ABYSS, bmc_ptr->plev, DAM_ROLL);
+ fire_bolt(player_ptr, AttributeType::ABYSS, bmc_ptr->dir, bmc_ptr->damage);
+ return true;
+}
+
+bool cast_blue_bolt_void(PlayerType *player_ptr, bmc_type *bmc_ptr)
+{
+ if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
+ return false;
+
+ msg_print(_("ヴォイド・ボルトの呪文を唱えた。", "You cast a void bolt."));
+ bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_VOID, bmc_ptr->plev, DAM_ROLL);
+ fire_bolt(player_ptr, AttributeType::VOID_MAGIC, bmc_ptr->dir, bmc_ptr->damage);
+ return true;
+}
bool cast_blue_ball_star_burst(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_ball_dark_storm(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_ball_mana_storm(PlayerType *player_ptr, bmc_type *bmc_ptr);
+bool cast_blue_ball_void(PlayerType *player_ptr, bmc_type *bmc_ptr);
+bool cast_blue_ball_abyss(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_bolt_acid(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_bolt_elec(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_bolt_mana(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_bolt_plasma(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_bolt_icee(PlayerType *player_ptr, bmc_type *bmc_ptr);
+bool cast_blue_bolt_void(PlayerType *player_ptr, bmc_type *bmc_ptr);
+bool cast_blue_bolt_abyss(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_bolt_missile(PlayerType *player_ptr, bmc_type *bmc_ptr);
fire_breath(player_ptr, AttributeType::DISINTEGRATE, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
return true;
}
+
+/*!
+ * @brief 虚無のブレスの青魔法
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param bmc_ptr 青魔法詠唱への参照ポインタ
+ */
+bool cast_blue_breath_void(PlayerType *player_ptr, bmc_type *bmc_ptr)
+{
+ if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
+ return false;
+
+ msg_print(_("虚無のブレスを吐いた。", "You breathe void."));
+ bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BR_VOID, bmc_ptr->plev, DAM_ROLL);
+ fire_breath(player_ptr, AttributeType::VOID_MAGIC, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
+ return true;
+}
+
+/*!
+ * @brief 深淵のブレスの青魔法
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param bmc_ptr 青魔法詠唱への参照ポインタ
+ */
+bool cast_blue_breath_abyss(PlayerType *player_ptr, bmc_type *bmc_ptr)
+{
+ if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
+ return false;
+
+ msg_print(_("分解のブレスを吐いた。", "You breathe abyss."));
+ bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BR_ABYSS, bmc_ptr->plev, DAM_ROLL);
+ fire_breath(player_ptr, AttributeType::ABYSS, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
+ return true;
+}
bool cast_blue_breath_mana(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_breath_nuke(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_breath_disintegration(PlayerType *player_ptr, bmc_type *bmc_ptr);
+bool cast_blue_breath_void(PlayerType *player_ptr, bmc_type *bmc_ptr);
+bool cast_blue_breath_abyss(PlayerType *player_ptr, bmc_type *bmc_ptr);
return cast_blue_breath_nuke(player_ptr, bmc_ptr);
case MonsterAbilityType::BR_DISI:
return cast_blue_breath_disintegration(player_ptr, bmc_ptr);
+ case MonsterAbilityType::BR_VOID:
+ return cast_blue_breath_void(player_ptr, bmc_ptr);
+ case MonsterAbilityType::BR_ABYSS:
+ return cast_blue_breath_abyss(player_ptr, bmc_ptr);
case MonsterAbilityType::BA_ACID:
return cast_blue_ball_acid(player_ptr, bmc_ptr);
case MonsterAbilityType::BA_ELEC:
return cast_blue_ball_dark_storm(player_ptr, bmc_ptr);
case MonsterAbilityType::BA_MANA:
return cast_blue_ball_mana_storm(player_ptr, bmc_ptr);
+ case MonsterAbilityType::BA_VOID:
+ return cast_blue_ball_void(player_ptr, bmc_ptr);
+ case MonsterAbilityType::BA_ABYSS:
+ return cast_blue_ball_abyss(player_ptr, bmc_ptr);
case MonsterAbilityType::DRAIN_MANA:
return cast_blue_drain_mana(player_ptr, bmc_ptr);
case MonsterAbilityType::MIND_BLAST:
return cast_blue_bolt_plasma(player_ptr, bmc_ptr);
case MonsterAbilityType::BO_ICEE:
return cast_blue_bolt_icee(player_ptr, bmc_ptr);
+ case MonsterAbilityType::BO_ABYSS:
+ return cast_blue_bolt_abyss(player_ptr, bmc_ptr);
+ case MonsterAbilityType::BO_VOID:
+ return cast_blue_bolt_void(player_ptr, bmc_ptr);
case MonsterAbilityType::MISSILE:
return cast_blue_bolt_missile(player_ptr, bmc_ptr);
case MonsterAbilityType::SCARE:
case MonsterAbilityType::BR_INER:
case MonsterAbilityType::BR_FORC:
case MonsterAbilityType::BR_DISI:
+ case MonsterAbilityType::BR_VOID:
+ case MonsterAbilityType::BR_ABYSS:
case MonsterAbilityType::BA_NUKE:
case MonsterAbilityType::BA_CHAO:
case MonsterAbilityType::BA_ACID:
case MonsterAbilityType::BA_POIS:
case MonsterAbilityType::BA_NETH:
case MonsterAbilityType::BA_WATE:
+ case MonsterAbilityType::BA_VOID:
+ case MonsterAbilityType::BA_ABYSS:
set_bluemage_damage(player_ptr, power, plev, KWD_DAM, p);
break;
case MonsterAbilityType::DRAIN_MANA:
case MonsterAbilityType::BO_WATE:
case MonsterAbilityType::BO_MANA:
case MonsterAbilityType::BO_PLAS:
+ case MonsterAbilityType::BO_ABYSS:
+ case MonsterAbilityType::BO_VOID:
case MonsterAbilityType::BO_ICEE:
case MonsterAbilityType::MISSILE:
set_bluemage_damage(player_ptr, power, plev, KWD_DAM, p);
const auto power_int = enum2i(power);
- if ((power_int > 2 && power_int < 41) || (power_int > 41 && power_int < 59) || (power == MonsterAbilityType::PSY_SPEAR))
+ if ((power_int > 2 && power_int < 41) || (power_int > 41 && power_int < 59) || (power == MonsterAbilityType::PSY_SPEAR)
+ || (power == MonsterAbilityType::BO_VOID) || (power == MonsterAbilityType::BO_ABYSS)
+ || (power == MonsterAbilityType::BR_VOID) || (power == MonsterAbilityType::BR_ABYSS))
sprintf(p, " %s%d", KWD_DAM, (int)dam);
else {
switch (power) {
fire_breath(player_ptr, AttributeType::DISINTEGRATE, dir, damage, (plev > 35 ? 3 : 2));
break;
+ case MonsterAbilityType::BR_VOID:
+ if (!get_aim_dir(player_ptr, &dir))
+ return false;
+ else
+ msg_print(_("虚空のブレスを吐いた。", "You breathe void."));
+
+ fire_breath(player_ptr, AttributeType::VOID_MAGIC, dir, damage, (plev > 35 ? 3 : 2));
+ break;
+
+ case MonsterAbilityType::BR_ABYSS:
+ if (!get_aim_dir(player_ptr, &dir))
+ return false;
+ else
+ msg_print(_("深淵のブレスを吐いた。", "You breathe abyss."));
+
+ fire_breath(player_ptr, AttributeType::ABYSS, dir, damage, (plev > 35 ? 3 : 2));
+ break;
+
case MonsterAbilityType::BA_ACID:
if (!get_aim_dir(player_ptr, &dir))
return false;
fire_ball(player_ptr, AttributeType::DARK, dir, damage, 4);
break;
+ case MonsterAbilityType::BA_VOID:
+ if (!get_aim_dir(player_ptr, &dir))
+ return false;
+ else
+ msg_print(_("虚空の嵐の呪文を念じた。", "You cast a void ball."));
+
+ fire_ball(player_ptr, AttributeType::VOID_MAGIC, dir, damage, 4);
+ break;
+ case MonsterAbilityType::BA_ABYSS:
+ if (!get_aim_dir(player_ptr, &dir))
+ return false;
+ else
+ msg_print(_("深淵の嵐の呪文を念じた。", "You cast a abyss ball."));
+
+ fire_ball(player_ptr, AttributeType::ABYSS, dir, damage, 4);
+ break;
case MonsterAbilityType::DRAIN_MANA:
if (!get_aim_dir(player_ptr, &dir))
return false;
fire_bolt(player_ptr, AttributeType::ICE, dir, damage);
break;
+ case MonsterAbilityType::BO_VOID:
+ if (!get_aim_dir(player_ptr, &dir))
+ return false;
+ else
+ msg_print(_("虚空の矢の呪文を唱えた。", "You cast a void bolt."));
+
+ fire_bolt(player_ptr, AttributeType::VOID_MAGIC, dir, damage);
+ break;
+ case MonsterAbilityType::BO_ABYSS:
+ if (!get_aim_dir(player_ptr, &dir))
+ return false;
+ else
+ msg_print(_("深淵の矢の呪文を唱えた。", "You cast a abyss bolt."));
+
+ fire_bolt(player_ptr, AttributeType::ABYSS, dir, damage);
+ break;
case MonsterAbilityType::MISSILE:
if (!get_aim_dir(player_ptr, &dir))
return false;
{"BR_NUKE", MonsterAbilityType::BR_NUKE },
{"BA_CHAO", MonsterAbilityType::BA_CHAO },
{"BR_DISI", MonsterAbilityType::BR_DISI },
+ {"BR_VOID", MonsterAbilityType::BR_VOID },
+ {"BR_ABYSS", MonsterAbilityType::BR_ABYSS },
{"BA_ACID", MonsterAbilityType::BA_ACID },
{"BA_ELEC", MonsterAbilityType::BA_ELEC },
{"BA_WATE", MonsterAbilityType::BA_WATE },
{"BA_MANA", MonsterAbilityType::BA_MANA },
{"BA_DARK", MonsterAbilityType::BA_DARK },
+ {"BA_VOID", MonsterAbilityType::BA_VOID },
+ {"BA_ABYSS", MonsterAbilityType::BA_ABYSS },
{"DRAIN_MANA", MonsterAbilityType::DRAIN_MANA },
{"MIND_BLAST", MonsterAbilityType::MIND_BLAST },
{"BRAIN_SMASH", MonsterAbilityType::BRAIN_SMASH },
{"BO_MANA", MonsterAbilityType::BO_MANA },
{"BO_PLAS", MonsterAbilityType::BO_PLAS },
{"BO_ICEE", MonsterAbilityType::BO_ICEE },
+ {"BO_VOID", MonsterAbilityType::BO_VOID },
+ {"BO_ABYSS", MonsterAbilityType::BO_ABYSS },
{"MISSILE", MonsterAbilityType::MISSILE },
{"SCARE", MonsterAbilityType::SCARE },
{"BLIND", MonsterAbilityType::BLIND },
lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
}
+
+ if (lore_ptr->ability_flags.has(MonsterAbilityType::BR_VOID)) {
+ set_damage(player_ptr, lore_ptr, MonsterAbilityType::BR_VOID, _("虚空%s", "void%s"));
+ lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+ lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
+ }
+
+ if (lore_ptr->ability_flags.has(MonsterAbilityType::BR_ABYSS)) {
+ set_damage(player_ptr, lore_ptr, MonsterAbilityType::BR_ABYSS, _("深淵%s", "abyss%s"));
+ lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+ lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
+ }
}
void set_ball_types(PlayerType *player_ptr, lore_type *lore_ptr)
lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
}
+
+ if (lore_ptr->ability_flags.has(MonsterAbilityType::BA_VOID)) {
+ set_damage(player_ptr, lore_ptr, MonsterAbilityType::BA_VOID, _("虚空の嵐%s", "invoke void storms%s"));
+ lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+ lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
+ }
+
+ if (lore_ptr->ability_flags.has(MonsterAbilityType::BA_ABYSS)) {
+ set_damage(player_ptr, lore_ptr, MonsterAbilityType::BA_ABYSS, _("深淵の嵐%s", "invoke abyss storms%s"));
+ lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+ lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
+ }
}
void set_particular_types(PlayerType *player_ptr, lore_type *lore_ptr)
lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
}
+ if (lore_ptr->ability_flags.has(MonsterAbilityType::BO_VOID)) {
+ set_damage(player_ptr, lore_ptr, MonsterAbilityType::BO_VOID, _("ヴォイド・ボルト%s", "produce void bolts%s"));
+ lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+ lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
+ }
+
+ if (lore_ptr->ability_flags.has(MonsterAbilityType::BO_ABYSS)) {
+ set_damage(player_ptr, lore_ptr, MonsterAbilityType::BO_ABYSS, _("アビス・ボルト%s", "produce abyss bolts%s"));
+ lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+ lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
+ }
+
if (lore_ptr->ability_flags.has(MonsterAbilityType::MISSILE)) {
set_damage(player_ptr, lore_ptr, MonsterAbilityType::MISSILE, _("マジックミサイル%s", "produce magic missiles%s"));
lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
S_HI_DRAGON = 93, /* Summon Ancient Dragon */
S_AMBERITES = 94, /* Summon Amberites */
S_UNIQUE = 95, /* Summon Unique Monster */
+ BO_VOID = 97, /*!< モンスター能力: ヴォイド・ボルト / Void Bolt */
+ BO_ABYSS = 98, /*!< モンスター能力: アビス・ボルト / Abyss Bolt */
+ BR_VOID = 99, /*!< モンスター能力: 虚無のブレス / Breathe Void */
+ BR_ABYSS = 100, /*!< モンスター能力: 深淵のブレス / Breathe Abyss */
+ BA_VOID = 101, /*!< モンスター能力: 虚無のボール / Void Ball */
+ BA_ABYSS = 102, /*!< モンスター能力: 深淵のボール / Abyss Ball */
MAX,
};
const EnumClassFlagGroup<MonsterAbilityType> RF_ABILITY_BOLT_MASK = {
MonsterAbilityType::ROCKET, MonsterAbilityType::SHOOT, MonsterAbilityType::BO_ACID, MonsterAbilityType::BO_ELEC,
MonsterAbilityType::BO_FIRE, MonsterAbilityType::BO_COLD, MonsterAbilityType::BO_NETH, MonsterAbilityType::BO_WATE,
- MonsterAbilityType::BO_MANA, MonsterAbilityType::BO_PLAS, MonsterAbilityType::BO_ICEE, MonsterAbilityType::MISSILE,
+ MonsterAbilityType::BO_MANA, MonsterAbilityType::BO_PLAS, MonsterAbilityType::BO_ICEE, MonsterAbilityType::BO_VOID,
+ MonsterAbilityType::BO_ABYSS, MonsterAbilityType::MISSILE,
};
/*
*/
const EnumClassFlagGroup<MonsterAbilityType> RF_ABILITY_BIG_BALL_MASK = {
MonsterAbilityType::BA_CHAO, MonsterAbilityType::BA_LITE, MonsterAbilityType::BA_DARK, MonsterAbilityType::BA_WATE,
- MonsterAbilityType::BA_MANA,
+ MonsterAbilityType::BA_MANA, MonsterAbilityType::BA_VOID, MonsterAbilityType::BA_ABYSS,
};
/*
MonsterAbilityType::BR_CONF, MonsterAbilityType::BR_SOUN, MonsterAbilityType::BR_CHAO, MonsterAbilityType::BR_DISE,
MonsterAbilityType::BR_NEXU, MonsterAbilityType::BR_SHAR, MonsterAbilityType::BR_TIME, MonsterAbilityType::BR_INER,
MonsterAbilityType::BR_GRAV, MonsterAbilityType::BR_PLAS, MonsterAbilityType::BR_FORC, MonsterAbilityType::BR_MANA,
- MonsterAbilityType::BR_NUKE, MonsterAbilityType::BR_DISI,
+ MonsterAbilityType::BR_NUKE, MonsterAbilityType::BR_DISI, MonsterAbilityType::BR_VOID, MonsterAbilityType::BR_ABYSS,
};
/*
case MonsterAbilityType::BR_NUKE: return spell_RF4_BREATH(player_ptr, AttributeType::NUKE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_NUKE */
case MonsterAbilityType::BA_CHAO: return spell_RF4_BA_CHAO(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BA_CHAO */
case MonsterAbilityType::BR_DISI: return spell_RF4_BREATH(player_ptr, AttributeType::DISINTEGRATE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_DISI */
+ case MonsterAbilityType::BR_VOID: return spell_RF4_BREATH(player_ptr, AttributeType::VOID_MAGIC, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_VOID */
+ case MonsterAbilityType::BR_ABYSS: return spell_RF4_BREATH(player_ptr, AttributeType::ABYSS, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_ABYSS */
case MonsterAbilityType::BA_ACID: return spell_RF5_BA_ACID(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_ACID */
case MonsterAbilityType::BA_ELEC: return spell_RF5_BA_ELEC(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_ELEC */
case MonsterAbilityType::BA_FIRE: return spell_RF5_BA_FIRE(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_FIRE */
case MonsterAbilityType::BA_WATE: return spell_RF5_BA_WATE(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_WATE */
case MonsterAbilityType::BA_MANA: return spell_RF5_BA_MANA(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_MANA */
case MonsterAbilityType::BA_DARK: return spell_RF5_BA_DARK(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_DARK */
+ case MonsterAbilityType::BA_VOID: return spell_RF5_BA_VOID(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_VOID */
+ case MonsterAbilityType::BA_ABYSS: return spell_RF5_BA_ABYSS(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_ABYSS */
case MonsterAbilityType::DRAIN_MANA: return spell_RF5_DRAIN_MANA(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_DRAIN_MANA */
case MonsterAbilityType::MIND_BLAST: return spell_RF5_MIND_BLAST(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MIND_BLAST */
case MonsterAbilityType::BRAIN_SMASH: return spell_RF5_BRAIN_SMASH(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MIND_BLAST */
case MonsterAbilityType::BO_MANA: return spell_RF5_BO_MANA(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_MANA */
case MonsterAbilityType::BO_PLAS: return spell_RF5_BO_PLAS(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_PLAS */
case MonsterAbilityType::BO_ICEE: return spell_RF5_BO_ICEE(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ICEE */
+ case MonsterAbilityType::BO_VOID: return spell_RF5_BO_VOID(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_VOID */
+ case MonsterAbilityType::BO_ABYSS: return spell_RF5_BO_ABYSS(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ABYSS */
case MonsterAbilityType::MISSILE: return spell_RF5_MISSILE(player_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MISSILE */
case MonsterAbilityType::SCARE: return spell_RF5_SCARE(m_idx, player_ptr, 0, MONSTER_TO_PLAYER); /* RF5_SCARE */
case MonsterAbilityType::BLIND: return spell_RF5_BLIND(m_idx, player_ptr, 0, MONSTER_TO_PLAYER); /* RF5_BLIND */
case MonsterAbilityType::BR_NUKE: return spell_RF4_BREATH(player_ptr, AttributeType::NUKE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_NUKE */
case MonsterAbilityType::BA_CHAO: return spell_RF4_BA_CHAO(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BA_CHAO */
case MonsterAbilityType::BR_DISI: return spell_RF4_BREATH(player_ptr, AttributeType::DISINTEGRATE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_DISI */
+ case MonsterAbilityType::BR_VOID: return spell_RF4_BREATH(player_ptr, AttributeType::VOID_MAGIC, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_VOID */
+ case MonsterAbilityType::BR_ABYSS: return spell_RF4_BREATH(player_ptr, AttributeType::ABYSS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_ABYSS */
case MonsterAbilityType::BA_ACID: return spell_RF5_BA_ACID(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_ACID */
case MonsterAbilityType::BA_ELEC: return spell_RF5_BA_ELEC(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_ELEC */
case MonsterAbilityType::BA_FIRE: return spell_RF5_BA_FIRE(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_FIRE */
case MonsterAbilityType::BA_WATE: return spell_RF5_BA_WATE(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_WATE */
case MonsterAbilityType::BA_MANA: return spell_RF5_BA_MANA(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_MANA */
case MonsterAbilityType::BA_DARK: return spell_RF5_BA_DARK(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_DARK */
+ case MonsterAbilityType::BA_VOID: return spell_RF5_BA_VOID(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_VOID */
+ case MonsterAbilityType::BA_ABYSS: return spell_RF5_BA_ABYSS(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_ABYSS */
case MonsterAbilityType::DRAIN_MANA: return spell_RF5_DRAIN_MANA(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_DRAIN_MANA */
case MonsterAbilityType::MIND_BLAST: return spell_RF5_MIND_BLAST(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_MIND_BLAST */
case MonsterAbilityType::BRAIN_SMASH: return spell_RF5_BRAIN_SMASH(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BRAIN_SMASH */
case MonsterAbilityType::BO_MANA: return spell_RF5_BO_MANA(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_MANA */
case MonsterAbilityType::BO_PLAS: return spell_RF5_BO_PLAS(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_PLAS */
case MonsterAbilityType::BO_ICEE: return spell_RF5_BO_ICEE(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_ICEE */
+ case MonsterAbilityType::BO_VOID: return spell_RF5_BO_VOID(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_VOID */
+ case MonsterAbilityType::BO_ABYSS: return spell_RF5_BO_ABYSS(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_ABYSS */
case MonsterAbilityType::MISSILE: return spell_RF5_MISSILE(player_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_MISSILE */
case MonsterAbilityType::SCARE: return spell_RF5_SCARE(m_idx, player_ptr, t_idx, MONSTER_TO_MONSTER); /* RF5_SCARE */
case MonsterAbilityType::BLIND: return spell_RF5_BLIND(m_idx, player_ptr, t_idx, MONSTER_TO_MONSTER); /* RF5_BLIND */
msr_ptr->ability_flags.reset(MonsterAbilityType::BO_ICEE);
if (int_outof(msr_ptr->r_ptr, 150))
+ msr_ptr->ability_flags.reset(MonsterAbilityType::BO_VOID);
+
+ if (int_outof(msr_ptr->r_ptr, 150))
+ msr_ptr->ability_flags.reset(MonsterAbilityType::BO_ABYSS);
+
+ if (int_outof(msr_ptr->r_ptr, 150))
msr_ptr->ability_flags.reset(MonsterAbilityType::MISSILE);
}
{ MonsterAbilityType::BR_NUKE, { 25, 15, 70, 800, 95, A_CON, _("放射性廃棄物のブレス", "breathe nuke") } },
{ MonsterAbilityType::BA_CHAO, { 30, 32, 85, 400, 80, A_INT, _("純ログルス", "raw Logrus") } },
{ MonsterAbilityType::BR_DISI, { 35, 40, 95, 150, 95, A_CON, _("分解のブレス", "breathe disintegration") } },
+ { MonsterAbilityType::BR_VOID, { 40, 44, 95, 250, 95, A_CON, _("虚空のブレス", "breathe void") } },
+ { MonsterAbilityType::BR_ABYSS, { 40, 44, 95, 250, 95, A_CON, _("深淵のブレス", "breathe abyss") } },
{ MonsterAbilityType::BA_ACID, { 18, 13, 55, 630, 80, A_INT, _("アシッド・ボール", "acid ball") } },
{ MonsterAbilityType::BA_ELEC, { 14, 10, 45, 316, 60, A_INT, _("サンダー・ボール", "lightning ball") } },
{ MonsterAbilityType::BA_WATE, { 30, 22, 75, 350, 80, A_INT, _("ウォーター・ボール", "water ball") } },
{ MonsterAbilityType::BA_MANA, { 44, 45, 85, 550, 95, A_INT, _("魔力の嵐", "mana storm") } },
{ MonsterAbilityType::BA_DARK, { 40, 42, 90, 550, 95, A_INT, _("暗黒の嵐", "darkness storm") } },
+ { MonsterAbilityType::BA_VOID, { 38, 41, 85, 400, 90, A_INT, _("虚空の嵐", "void ball") } },
+ { MonsterAbilityType::BA_ABYSS, { 39, 42, 85, 400, 90, A_INT, _("深淵の嵐", "abyss ball") } },
{ MonsterAbilityType::DRAIN_MANA, { 10, 5, 50, 0, 25, A_INT, _("魔力吸収", "drain mana") } },
{ MonsterAbilityType::MIND_BLAST, { 25, 10, 60, 0, 30, A_INT, _("精神攻撃", "mind blast") } },
{ MonsterAbilityType::BRAIN_SMASH, { 30, 14, 65, 0, 30, A_INT, _("脳攻撃", "brain smash") } },
{ MonsterAbilityType::BO_MANA, { 25, 24, 90, 400, 80, A_INT, _("魔力の矢", "mana bolt") } },
{ MonsterAbilityType::BO_PLAS, { 25, 20, 80, 216, 60, A_INT, _("プラズマ・ボルト", "plasma bolt") } },
{ MonsterAbilityType::BO_ICEE, { 25, 16, 60, 186, 60, A_INT, _("極寒の矢", "ice bolt") } },
+ { MonsterAbilityType::BO_VOID, { 35, 31, 80, 342, 70, A_INT, _("ヴォイド・ボルト", "void bolt") } },
+ { MonsterAbilityType::BO_ABYSS, { 35, 33, 80, 342, 70, A_INT, _("アビス・ボルト", "abyss bolt") } },
{ MonsterAbilityType::MISSILE, { 3, 1, 25, 12, 20, A_INT, _("マジック・ミサイル", "magic missile") } },
{ MonsterAbilityType::SCARE, { 5, 3, 35, 0, 20, A_INT, _("恐慌", "scare") } },
{ MonsterAbilityType::BLIND, { 10, 5, 40, 0, 20, A_INT, _("盲目", "blind") } },
{ MonsterAbilityType::BR_NUKE, _("放射性廃棄物", "Nuke") },
{ MonsterAbilityType::BA_CHAO, _("純ログルス", "Logrus") },
{ MonsterAbilityType::BR_DISI, _("分解", "Disintegration") },
+ { MonsterAbilityType::BR_VOID, _("虚空", "Void") },
+ { MonsterAbilityType::BR_ABYSS, _("深淵", "Abyss") },
{ MonsterAbilityType::BA_ACID, _("酸", "Acid") },
{ MonsterAbilityType::BA_ELEC, _("電撃", "Lightning") },
{ MonsterAbilityType::BA_WATE, _("ウォーター", "Water") },
{ MonsterAbilityType::BA_MANA, _("魔力の嵐", "Mana storm") },
{ MonsterAbilityType::BA_DARK, _("暗黒の嵐", "Darkness storm") },
+ { MonsterAbilityType::BA_VOID, _("虚空", "Void") },
+ { MonsterAbilityType::BA_ABYSS, _("深淵", "Abyss") },
{ MonsterAbilityType::DRAIN_MANA, _("魔力吸収", "Drain mana") },
{ MonsterAbilityType::MIND_BLAST, _("精神攻撃", "Mind blast") },
{ MonsterAbilityType::BRAIN_SMASH, _("脳攻撃", "Brain smash") },
{ MonsterAbilityType::BO_MANA, _("魔力の矢", "Mana") },
{ MonsterAbilityType::BO_PLAS, _("プラズマ", "Plasma") },
{ MonsterAbilityType::BO_ICEE, _("極寒", "Ice") },
+ { MonsterAbilityType::BO_VOID, _("ヴォイド", "Void") },
+ { MonsterAbilityType::BO_ABYSS, _("アビス", "Abyss") },
{ MonsterAbilityType::MISSILE, _("マジックミサイル", "Magic missile") },
{ MonsterAbilityType::SCARE, _("恐慌", "Scare") },
{ MonsterAbilityType::BLIND, _("盲目", "Blind") },
case MonsterAbilityType::BO_MANA:
case MonsterAbilityType::BO_PLAS:
case MonsterAbilityType::BO_ICEE:
+ case MonsterAbilityType::BO_VOID:
+ case MonsterAbilityType::BO_ABYSS:
case MonsterAbilityType::MISSILE:
case MonsterAbilityType::SCARE:
case MonsterAbilityType::BLIND:
return res;
}
+
+/*!
+ * @brief RF5_BA_VOIDの処理。虚空の嵐。 /
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param y 対象の地点のy座標
+ * @param x 対象の地点のx座標
+ * @param m_idx 呪文を唱えるモンスターID
+ * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
+ * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
+ *
+ * プレイヤーに当たったらラーニング可。
+ */
+MonsterSpellResult spell_RF5_BA_VOID(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+{
+ mspell_cast_msg_blind msg(_("%^sが何かを力強くつぶやいた。", "%^s mumbles powerfully."),
+ _("%^sが虚空の嵐の呪文を念じた。", "%^s invokes a void storm."),
+ _("%^sが%sに対して虚空の嵐の呪文を念じた。", "%^s invokes a void storm upon %s."));
+
+ monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+
+ const auto dam = monspell_damage(player_ptr, MonsterAbilityType::BA_VOID, m_idx, DAM_ROLL);
+ const auto proj_res = breath(player_ptr, y, x, m_idx, AttributeType::VOID_MAGIC, dam, 4, false, TARGET_TYPE);
+
+ auto res = MonsterSpellResult::make_valid(dam);
+ res.learnable = proj_res.affected_player;
+
+ return res;
+}
+
+/*!
+ * @brief RF5_BA_ABYSSの処理。アビス・ボール。 /
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param y 対象の地点のy座標
+ * @param x 対象の地点のx座標
+ * @param m_idx 呪文を唱えるモンスターID
+ * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
+ * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
+ *
+ * プレイヤーに当たったらラーニング可。
+ */
+MonsterSpellResult spell_RF5_BA_ABYSS(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+{
+ mspell_cast_msg_blind msg(_("%^sが何かを力強くつぶやいた。", "%^s mumbles powerfully."),
+ _("%^sが深淵の嵐の呪文を念じた。", "%^s invokes a abyss storm."),
+ _("%^sが%sに対して深淵の嵐の呪文を念じた。", "%^s invokes a void abyss upon %s."));
+
+ monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+
+ const auto dam = monspell_damage(player_ptr, MonsterAbilityType::BA_ABYSS, m_idx, DAM_ROLL);
+ const auto proj_res = breath(player_ptr, y, x, m_idx, AttributeType::ABYSS, dam, 4, false, TARGET_TYPE);
+ if (TARGET_TYPE == MONSTER_TO_PLAYER)
+ update_smart_learn(player_ptr, m_idx, DRS_DARK);
+
+ auto res = MonsterSpellResult::make_valid(dam);
+ res.learnable = proj_res.affected_player;
+
+ return res;
+}
MonsterSpellResult spell_RF5_BA_MANA(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
MonsterSpellResult spell_RF5_BA_DARK(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
MonsterSpellResult spell_RF5_BA_LITE(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
+MonsterSpellResult spell_RF5_BA_VOID(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
+MonsterSpellResult spell_RF5_BA_ABYSS(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
}
/*!
+ * @brief RF5_BO_VOIDの処理。ヴォイド・ボルト。 /
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param y 対象の地点のy座標
+ * @param x 対象の地点のx座標
+ * @param m_idx 呪文を唱えるモンスターID
+ * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
+ * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
+ *
+ * プレイヤーに当たったらラーニング可。
+ */
+MonsterSpellResult spell_RF5_BO_VOID(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+{
+ mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
+ _("%^sがヴォイド・ボルトの呪文を唱えた。", "%^s casts a void bolt."),
+ _("%^sが%sに向かってヴォイド・ボルトの呪文を唱えた。", "%^s casts a void bolt at %s."));
+
+ monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+
+ const auto dam = monspell_damage(player_ptr, MonsterAbilityType::BO_VOID, m_idx, DAM_ROLL);
+ const auto proj_res = bolt(player_ptr, m_idx, y, x, AttributeType::VOID_MAGIC, dam, TARGET_TYPE);
+ if (TARGET_TYPE == MONSTER_TO_PLAYER) {
+ update_smart_learn(player_ptr, m_idx, DRS_REFLECT);
+ }
+
+ auto res = MonsterSpellResult::make_valid(dam);
+ res.learnable = proj_res.affected_player;
+
+ return res;
+}
+
+/*!
+ * @brief RF5_BO_ABYSSの処理。アビス・ボルト。 /
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param y 対象の地点のy座標
+ * @param x 対象の地点のx座標
+ * @param m_idx 呪文を唱えるモンスターID
+ * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
+ * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
+ *
+ * プレイヤーに当たったらラーニング可。
+ */
+MonsterSpellResult spell_RF5_BO_ABYSS(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+{
+ mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
+ _("%^sがアビス・ボルトの呪文を唱えた。", "%^s casts a abyss bolt."),
+ _("%^sが%sに向かってアビス・ボルトの呪文を唱えた。", "%^s casts a abyss bolt at %s."));
+
+ monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+
+ const auto dam = monspell_damage(player_ptr, MonsterAbilityType::BO_ABYSS, m_idx, DAM_ROLL);
+ const auto proj_res = bolt(player_ptr, m_idx, y, x, AttributeType::ABYSS, dam, TARGET_TYPE);
+ if (TARGET_TYPE == MONSTER_TO_PLAYER) {
+ update_smart_learn(player_ptr, m_idx, DRS_REFLECT);
+ }
+
+ auto res = MonsterSpellResult::make_valid(dam);
+ res.learnable = proj_res.affected_player;
+
+ return res;
+}
+
+/*!
* @brief RF5_MISSILEの処理。マジック・ミサイル。 /
* @param player_ptr プレイヤーへの参照ポインタ
* @param y 対象の地点のy座標
MonsterSpellResult spell_RF5_BO_MANA(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
MonsterSpellResult spell_RF5_BO_PLAS(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
MonsterSpellResult spell_RF5_BO_ICEE(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
+MonsterSpellResult spell_RF5_BO_VOID(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
+MonsterSpellResult spell_RF5_BO_ABYSS(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
MonsterSpellResult spell_RF5_MISSILE(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE);
type_s = _("分解", "disintegration");
smart_learn_aux = false;
break;
+ case AttributeType::VOID_MAGIC:
+ dam = monspell_damage(player_ptr, MonsterAbilityType::BR_VOID, m_idx, DAM_ROLL);
+ type_s = _("虚空", "void");
+ smart_learn_aux = false;
+ break;
+ case AttributeType::ABYSS:
+ dam = monspell_damage(player_ptr, MonsterAbilityType::BR_ABYSS, m_idx, DAM_ROLL);
+ type_s = _("深淵", "disintegration");
+ smart_learn_aux = false;
+ break;
default:
/* Do not reach here */
dam = 0;
case MonsterAbilityType::BR_DISI:
dam = ((hp / 6) > 150 ? 150 : (hp / 6));
break;
+ case MonsterAbilityType::BR_VOID:
+ dam = ((hp / 3) > 250 ? 250 : (hp / 6));
+ break;
+ case MonsterAbilityType::BR_ABYSS:
+ dam = ((hp / 3) > 250 ? 250 : (hp / 6));
+ break;
case MonsterAbilityType::BA_ACID:
if (powerful) {
dam = (rlev * 4) + 50;
dice_num = 10;
dice_side = 10;
break;
+ case MonsterAbilityType::BA_VOID:
+ dam = (powerful ? (rlev * 3) : (rlev * 2));
+ dice_num = 10;
+ dice_side = 10;
+ break;
+ case MonsterAbilityType::BA_ABYSS:
+ dam = (powerful ? (rlev * 3) : (rlev * 2));
+ dice_num = 10;
+ dice_side = 10;
+ break;
case MonsterAbilityType::DRAIN_MANA:
dam = rlev;
div = 1;
dice_num = 6;
dice_side = 6;
break;
+ case MonsterAbilityType::BO_VOID:
+ dam = 10 + (rlev * 3 / (powerful ? 2 : 3));
+ dice_num = 13;
+ dice_side = 14;
+ break;
+ case MonsterAbilityType::BO_ABYSS:
+ dam = 10 + (rlev * 3 / (powerful ? 2 : 3));
+ dice_num = 13;
+ dice_side = 14;
+ break;
case MonsterAbilityType::MISSILE:
dam = (rlev / 3);
dice_num = 2;
/* All RF4 spells hurt (except for shriek and dispel) */
if (spell_in_between(spell, MonsterAbilityType::ROCKET, MonsterAbilityType::BR_DISI))
return true;
+ if (spell_in_between(spell, MonsterAbilityType::BR_VOID, MonsterAbilityType::BR_ABYSS))
+ return true;
/* Various "ball" spells */
if (spell_in_between(spell, MonsterAbilityType::BA_ACID, MonsterAbilityType::BA_DARK))
/* "Cause wounds" and "bolt" spells */
if (spell_in_between(spell, MonsterAbilityType::CAUSE_1, MonsterAbilityType::MISSILE))
return true;
+ if (spell_in_between(spell, MonsterAbilityType::BO_VOID, MonsterAbilityType::BO_ABYSS))
+ return true;
/* Hand of Doom */
if (spell == MonsterAbilityType::HAND_DOOM)
spell_damcalc_by_spellnum(player_ptr, MonsterAbilityType::HAND_DOOM, AttributeType::HAND_DOOM, g_ptr->m_idx, &dam_max0);
if (flags.has(MonsterAbilityType::PSY_SPEAR))
spell_damcalc_by_spellnum(player_ptr, MonsterAbilityType::PSY_SPEAR, AttributeType::PSY_SPEAR, g_ptr->m_idx, &dam_max0);
+ if (flags.has(MonsterAbilityType::BA_VOID))
+ spell_damcalc_by_spellnum(player_ptr, MonsterAbilityType::BA_VOID, AttributeType::VOID_MAGIC, g_ptr->m_idx, &dam_max0);
+ if (flags.has(MonsterAbilityType::BA_ABYSS))
+ spell_damcalc_by_spellnum(player_ptr, MonsterAbilityType::BA_ABYSS, AttributeType::ABYSS, g_ptr->m_idx, &dam_max0);
}
if (flags.has(MonsterAbilityType::ROCKET))
spell_damcalc_by_spellnum(player_ptr, MonsterAbilityType::BR_NUKE, AttributeType::NUKE, g_ptr->m_idx, &dam_max0);
if (flags.has(MonsterAbilityType::BR_DISI))
spell_damcalc_by_spellnum(player_ptr, MonsterAbilityType::BR_DISI, AttributeType::DISINTEGRATE, g_ptr->m_idx, &dam_max0);
+ if (flags.has(MonsterAbilityType::BR_VOID))
+ spell_damcalc_by_spellnum(player_ptr, MonsterAbilityType::BR_VOID, AttributeType::VOID_MAGIC, g_ptr->m_idx, &dam_max0);
+ if (flags.has(MonsterAbilityType::BR_ABYSS))
+ spell_damcalc_by_spellnum(player_ptr, MonsterAbilityType::BR_ABYSS, AttributeType::ABYSS, g_ptr->m_idx, &dam_max0);
}
/* Monster melee attacks */