S:BR_PLAS | BR_FORC | BR_MANA | BA_NUKE | BR_NUKE | BA_CHAO | BR_DISI | BA_ACID |
S:BA_ELEC | BA_FIRE | BA_COLD | BA_POIS | BA_NETH | BA_WATE | BA_MANA | BA_DARK |
S:BA_ABYSS | BA_VOID | BR_ABYSS | BR_VOID | BO_ABYSS | BO_VOID | BA_METEOR | BO_METEOR |
+S:BO_LITE |
S:DRAIN_MANA | MIND_BLAST| BRAIN_SMASH | CAUSE_1 | CAUSE_2 | CAUSE_3 | CAUSE_4 |
S:BO_ACID | BO_ELEC | BO_FIRE | BO_COLD | BO_NETH | BO_WATE | BO_MANA |
S:BO_PLAS | BO_ICEE | MISSILE | BLIND | CONF | SLOW | HOLD | HASTE | HAND_DOOM |
fire_bolt(player_ptr, AttributeType::METEOR, bmc_ptr->dir, bmc_ptr->damage);
return true;
}
+bool cast_blue_bolt_lite(PlayerType *player_ptr, bmc_type *bmc_ptr)
+{
+ if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
+ return false;
+ }
+
+ msg_print(_("スターライトアローの呪文を唱えた。", "You cast a starlight arrow."));
+ bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_LITE, bmc_ptr->plev, DAM_ROLL);
+ fire_bolt(player_ptr, AttributeType::LITE, bmc_ptr->dir, bmc_ptr->damage);
+ return true;
+}
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_meteor(PlayerType *player_ptr, bmc_type *bmc_ptr);
+bool cast_blue_bolt_lite(PlayerType *player_ptr, bmc_type *bmc_ptr);
bool cast_blue_bolt_missile(PlayerType *player_ptr, bmc_type *bmc_ptr);
return cast_blue_bolt_void(player_ptr, bmc_ptr);
case MonsterAbilityType::BO_METEOR:
return cast_blue_bolt_meteor(player_ptr, bmc_ptr);
+ case MonsterAbilityType::BO_LITE:
+ return cast_blue_bolt_lite(player_ptr, bmc_ptr);
case MonsterAbilityType::MISSILE:
return cast_blue_bolt_missile(player_ptr, bmc_ptr);
case MonsterAbilityType::SCARE:
case MonsterAbilityType::BO_VOID:
case MonsterAbilityType::BO_ICEE:
case MonsterAbilityType::BO_METEOR:
+ case MonsterAbilityType::BO_LITE:
case MonsterAbilityType::MISSILE:
return set_bluemage_damage(player_ptr, power, plev, KWD_DAM);
case MonsterAbilityType::HASTE:
fire_bolt(player_ptr, AttributeType::METEOR, dir, damage);
break;
+ case MonsterAbilityType::BO_LITE:
+ if (!get_aim_dir(player_ptr, &dir)) {
+ return false;
+ } else {
+ msg_print(_("スターライトアローの呪文を唱えた。", "You cast a starlight arrow."));
+ }
+
+ fire_bolt(player_ptr, AttributeType::LITE, dir, damage);
+ break;
case MonsterAbilityType::MISSILE:
if (!get_aim_dir(player_ptr, &dir)) {
return false;
{"BO_VOID", MonsterAbilityType::BO_VOID },
{"BO_ABYSS", MonsterAbilityType::BO_ABYSS },
{"BO_METEOR", MonsterAbilityType::BO_METEOR },
+ {"BO_LITE", MonsterAbilityType::BO_LITE },
{"MISSILE", MonsterAbilityType::MISSILE },
{"SCARE", MonsterAbilityType::SCARE },
{"BLIND", MonsterAbilityType::BLIND },
lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
}
+ if (lore_ptr->ability_flags.has(MonsterAbilityType::BO_LITE)) {
+ set_damage(player_ptr, lore_ptr, MonsterAbilityType::BO_LITE, _("スターライトアロー%s", "produce starlight arrow%s"));
+ lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+ lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
+ }
+
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];
BA_ABYSS = 102, /*!< モンスター能力: 深淵のボール / Abyss Ball */
BA_METEOR = 103, /*!< モンスター能力: 隕石のボール / Meteor Ball */
BO_METEOR = 104, /*!< モンスター能力: 隕石のボルト / Meteor Bolt */
+ BO_LITE = 105, /*!< モンスター能力: 光のボルト(スターライトアロー) / Starlight arrow */
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::BO_VOID,
- MonsterAbilityType::BO_ABYSS, MonsterAbilityType::BO_METEOR, MonsterAbilityType::MISSILE,
+ MonsterAbilityType::BO_FIRE, MonsterAbilityType::BO_COLD, MonsterAbilityType::BO_NETH, MonsterAbilityType::BO_LITE,
+ MonsterAbilityType::BO_WATE, MonsterAbilityType::BO_MANA, MonsterAbilityType::BO_PLAS, MonsterAbilityType::BO_ICEE,
+ MonsterAbilityType::BO_VOID, MonsterAbilityType::BO_ABYSS, MonsterAbilityType::BO_METEOR, MonsterAbilityType::MISSILE,
};
/*
case MonsterAbilityType::BO_VOID:
case MonsterAbilityType::BO_ABYSS:
case MonsterAbilityType::BO_METEOR:
+ case MonsterAbilityType::BO_LITE:
case MonsterAbilityType::MISSILE:
return MSpellBolt(player_ptr, m_idx, ms_type, MONSTER_TO_PLAYER).shoot(y,x);
case MonsterAbilityType::BO_VOID:
case MonsterAbilityType::BO_ABYSS:
case MonsterAbilityType::BO_METEOR:
+ case MonsterAbilityType::BO_LITE:
case MonsterAbilityType::MISSILE:
return MSpellBolt(player_ptr, m_idx, t_idx, ms_type, MONSTER_TO_MONSTER).shoot(y, x);
{ 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::BO_METEOR, { 30, 28, 90, 400, 80, A_INT, _("メテオストライク", "meteor strike") } },
+ { MonsterAbilityType::BO_LITE, { 20, 25, 75, 300, 65, A_INT, _("スターライトアロー", "starlight arrow") } },
{ 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") } },
_("%s^がメテオストライクの呪文を唱えた。", "%s^ casts a meteor strike."),
_("%s^が%sに向かってメテオストライクの呪文を唱えた。", "%s^ casts a meteor strike at %s.") },
AttributeType::METEOR, DRS_REFLECT } },
+ { MonsterAbilityType::BO_LITE, { { _("%s^が何かをつぶやいた。", "%s^ mumbles."),
+ _("%s^がスターライトアローを放った。", "%s^ fires a starlight arrow."),
+ _("%s^が%sに向かってスターライトアローを放った。", "%s^ fires a starlight arrow at %s.") },
+ AttributeType::LITE, DRS_REFLECT } },
{ MonsterAbilityType::MISSILE, { { _("%s^が何かをつぶやいた。", "%s^ mumbles."),
_("%s^がマジック・ミサイルの呪文を唱えた。", "%s^ casts a magic missile."),
_("%s^が%sに向かってマジック・ミサイルの呪文を唱えた。", "%s^ casts a magic missile at %s.") },
dice_num = 1;
dice_side = rlev;
break;
+ case MonsterAbilityType::BO_LITE:
+ dam = powerful ? 60 : 40;
+ dice_num = 1;
+ dice_side = powerful ? rlev * 4 : rlev * 2;
+ break;
case MonsterAbilityType::MISSILE:
dam = (rlev / 3);
dice_num = 2;