#include "target/projection-path-calculator.h"
#include "timed-effect/player-cut.h"
#include "timed-effect/timed-effects.h"
+#include "util/enum-converter.h"
#include "view/display-messages.h"
#include "world/world.h"
* @brief 落とし穴系トラップの判定とプレイヤーの被害処理
* @param trap_feat_type トラップの種別ID
*/
-static void hit_trap_pit(PlayerType *player_ptr, enum trap_type trap_feat_type)
+static void hit_trap_pit(PlayerType *player_ptr, TrapType trap_feat_type)
{
HIT_POINT dam;
concptr trap_name = "";
concptr spike_name = "";
switch (trap_feat_type) {
- case TRAP_PIT:
+ case TrapType::PIT:
trap_name = _("落とし穴", "a pit trap");
break;
- case TRAP_SPIKED_PIT:
+ case TrapType::SPIKED_PIT:
trap_name = _("スパイクが敷かれた落とし穴", "a spiked pit");
spike_name = _("スパイク", "spikes");
break;
- case TRAP_POISON_PIT:
+ case TrapType::POISON_PIT:
trap_name = _("スパイクが敷かれた落とし穴", "a spiked pit");
spike_name = _("毒を塗られたスパイク", "poisonous spikes");
break;
msg_format(_("%sに落ちてしまった!", "You have fallen into %s!"), trap_name);
dam = damroll(2, 6);
- if (((trap_feat_type != TRAP_SPIKED_PIT) && (trap_feat_type != TRAP_POISON_PIT)) || one_in_(2)) {
+ if (((trap_feat_type != TrapType::SPIKED_PIT) && (trap_feat_type != TrapType::POISON_PIT)) || one_in_(2)) {
take_hit(player_ptr, DAMAGE_NOESCAPE, dam, trap_name);
return;
}
dam = dam * 2;
BadStatusSetter bss(player_ptr);
(void)bss.mod_cut(randint1(dam));
- if (trap_feat_type != TRAP_POISON_PIT) {
+ if (trap_feat_type != TrapType::POISON_PIT) {
take_hit(player_ptr, DAMAGE_NOESCAPE, dam, trap_name);
return;
}
POSITION x = player_ptr->x, y = player_ptr->y;
grid_type *g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
feature_type *f_ptr = &f_info[g_ptr->feat];
- enum trap_type trap_feat_type = f_ptr->flags.has(FloorFeatureType::TRAP) ? (enum trap_type)f_ptr->subtype : NOT_TRAP;
+ TrapType trap_feat_type = f_ptr->flags.has(FloorFeatureType::TRAP) ? i2enum<TrapType>(f_ptr->subtype) : TrapType::NOT_TRAP;
concptr name = _("トラップ", "a trap");
disturb(player_ptr, false, true);
/* Analyze */
switch (trap_feat_type) {
- case TRAP_TRAPDOOR: {
+ case TrapType::TRAPDOOR: {
if (player_ptr->levitation) {
msg_print(_("落とし戸を飛び越えた。", "You fly over a trap door."));
} else {
break;
}
- case TRAP_PIT:
- case TRAP_SPIKED_PIT:
- case TRAP_POISON_PIT: {
+ case TrapType::PIT:
+ case TrapType::SPIKED_PIT:
+ case TrapType::POISON_PIT: {
hit_trap_pit(player_ptr, trap_feat_type);
break;
}
- case TRAP_TY_CURSE: {
+ case TrapType::TY_CURSE: {
msg_print(_("何かがピカッと光った!", "There is a flash of shimmering light!"));
num = 2 + randint1(3);
for (i = 0; i < num; i++) {
break;
}
- case TRAP_TELEPORT: {
+ case TrapType::TELEPORT: {
msg_print(_("テレポート・トラップにひっかかった!", "You hit a teleport trap!"));
teleport_player(player_ptr, 100, TELEPORT_PASSIVE);
break;
}
- case TRAP_FIRE: {
+ case TrapType::FIRE: {
msg_print(_("炎に包まれた!", "You are enveloped in flames!"));
dam = damroll(4, 6);
(void)fire_dam(player_ptr, dam, _("炎のトラップ", "a fire trap"), false);
break;
}
- case TRAP_ACID: {
+ case TrapType::ACID: {
msg_print(_("酸が吹きかけられた!", "You are splashed with acid!"));
dam = damroll(4, 6);
(void)acid_dam(player_ptr, dam, _("酸のトラップ", "an acid trap"), false);
break;
}
- case TRAP_SLOW: {
+ case TrapType::SLOW: {
hit_trap_slow(player_ptr);
break;
}
- case TRAP_LOSE_STR: {
+ case TrapType::LOSE_STR: {
hit_trap_lose_stat(player_ptr, A_STR);
break;
}
- case TRAP_LOSE_DEX: {
+ case TrapType::LOSE_DEX: {
hit_trap_lose_stat(player_ptr, A_DEX);
break;
}
- case TRAP_LOSE_CON: {
+ case TrapType::LOSE_CON: {
hit_trap_lose_stat(player_ptr, A_CON);
break;
}
- case TRAP_BLIND:
+ case TrapType::BLIND:
msg_print(_("黒いガスに包み込まれた!", "A black gas surrounds you!"));
if (has_resist_blind(player_ptr) == 0) {
(void)BadStatusSetter(player_ptr).mod_blindness(randint0(50) + 25);
}
break;
- case TRAP_CONFUSE: {
+ case TrapType::CONFUSE: {
msg_print(_("きらめくガスに包み込まれた!", "A gas of scintillating colors surrounds you!"));
if (has_resist_conf(player_ptr) == 0) {
(void)BadStatusSetter(player_ptr).mod_confusion(randint0(20) + 10);
break;
}
- case TRAP_POISON: {
+ case TrapType::POISON: {
msg_print(_("刺激的な緑色のガスに包み込まれた!", "A pungent green gas surrounds you!"));
if (has_resist_pois(player_ptr) == 0) {
(void)BadStatusSetter(player_ptr).mod_poison(randint0(20) + 10);
break;
}
- case TRAP_SLEEP: {
+ case TrapType::SLEEP: {
msg_print(_("奇妙な白い霧に包まれた!", "A strange white mist surrounds you!"));
if (player_ptr->free_act) {
break;
break;
}
- case TRAP_TRAPS: {
+ case TrapType::TRAPS: {
msg_print(_("まばゆい閃光が走った!", "There is a bright flash of light!"));
/* Make some new traps */
project(player_ptr, 0, 1, y, x, 0, AttributeType::MAKE_TRAP, PROJECT_HIDE | PROJECT_JUMP | PROJECT_GRID);
break;
}
- case TRAP_ALARM: {
+ case TrapType::ALARM: {
msg_print(_("けたたましい音が鳴り響いた!", "An alarm sounds!"));
aggravate_monsters(player_ptr, 0);
break;
}
- case TRAP_OPEN: {
+ case TrapType::OPEN: {
msg_print(_("大音響と共にまわりの壁が崩れた!", "Suddenly, surrounding walls are opened!"));
(void)project(player_ptr, 0, 3, y, x, 0, AttributeType::DISINTEGRATE, PROJECT_GRID | PROJECT_HIDE);
(void)project(player_ptr, 0, 3, y, x - 4, 0, AttributeType::DISINTEGRATE, PROJECT_GRID | PROJECT_HIDE);
break;
}
- case TRAP_ARMAGEDDON: {
+ case TrapType::ARMAGEDDON: {
static int levs[10] = { 0, 0, 20, 10, 5, 3, 2, 1, 1, 1 };
int evil_idx = 0, good_idx = 0;
break;
}
- case TRAP_PIRANHA: {
+ case TrapType::PIRANHA: {
msg_print(_("突然壁から水が溢れ出した!ピラニアがいる!", "Suddenly, the room is filled with water with piranhas!"));
/* Water fills room */
#include "monster/monster-description-types.h"
#include "monster/monster-info.h"
#include "monster/monster-status.h"
+#include "mspell/mspell-result.h"
#include "mspell/mspell-util.h"
-#include "mspell/mspell.h"
#include "mspell/specified-summon.h"
#include "spell-kind/spells-launcher.h"
#include "effect/attribute-types.h"
constexpr int S_NUM_4 = 4;
/*!
+ * @brief モンスターが召喚呪文を使った際にプレイヤーの連続行動を止める処理 /
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param target_type プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
+ * @param known モンスターが近くにいる場合TRUE
+ * @param see_either モンスターを視認可能な場合TRUE
+ */
+static void summon_disturb(PlayerType *player_ptr, int target_type, bool known, bool see_either)
+{
+ bool mon_to_mon = target_type == MONSTER_TO_MONSTER;
+ bool mon_to_player = target_type == MONSTER_TO_PLAYER;
+ if (mon_to_player || (mon_to_mon && known && see_either)) {
+ disturb(player_ptr, true, true);
+ }
+}
+
+
+/*!
* @brief 特定条件のモンスター召喚のみPM_ALLOW_UNIQUEを許可する /
* @param floor_ptr 現在フロアへの参照ポインタ
* @param m_idx モンスターID
return;
}
- if (mon_to_player || (mon_to_mon && known && see_either))
- disturb(player_ptr, true, true);
+ summon_disturb(player_ptr, target_type, known, see_either);
if (player_ptr->blind) {
if (mon_to_player)
monster_name(player_ptr, m_idx, m_name);
monster_name(player_ptr, t_idx, t_name);
monster_desc(player_ptr, m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
-
- disturb(player_ptr, true, true);
+
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
+ summon_disturb(player_ptr, target_type, known, see_either);
+
decide_summon_kin_caster(player_ptr, m_idx, t_idx, target_type, m_name, m_poss, known);
int count = 0;
switch (m_ptr->r_idx) {
*/
MonsterSpellResult spell_RF6_S_CYBER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- int count = 0;
floor_type *floor_ptr = player_ptr->current_floor_ptr;
monster_type *m_ptr = &floor_ptr->m_list[m_idx];
DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sがサイバーデーモンを召喚した!", "%^s magically summons Cyberdemons!"),
_("%^sがサイバーデーモンを召喚した!", "%^s magically summons Cyberdemons!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
+ int count = 0;
if (is_friendly(m_ptr) && mon_to_mon) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
} else {
*/
MonsterSpellResult spell_RF6_S_MONSTER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法で仲間を召喚した!", "%^s magically summons help!"),
_("%^sが魔法で仲間を召喚した!", "%^s magically summons help!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
int count = 0;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
for (int k = 0; k < 1; k++) {
if (mon_to_player)
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
*/
MonsterSpellResult spell_RF6_S_MONSTERS(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが魔法でモンスターを召喚した!", "%^s magically summons monsters!"), _("%^sが魔法でモンスターを召喚した!", "%^s magically summons monsters!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
int count = 0;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
for (auto k = 0; k < S_NUM_6; k++) {
if (mon_to_player)
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
*/
MonsterSpellResult spell_RF6_S_ANT(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法でアリを召喚した。", "%^s magically summons ants."),
_("%^sが魔法でアリを召喚した。", "%^s magically summons ants."));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
int count = 0;
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
for (auto k = 0; k < S_NUM_6; k++) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP);
}
*/
MonsterSpellResult spell_RF6_S_SPIDER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法でクモを召喚した。", "%^s magically summons spiders."),
_("%^sが魔法でクモを召喚した。", "%^s magically summons spiders."));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
int count = 0;
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
for (auto k = 0; k < S_NUM_6; k++) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP);
}
*/
MonsterSpellResult spell_RF6_S_HOUND(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが魔法でハウンドを召喚した。", "%^s magically summons hounds."), _("%^sが魔法でハウンドを召喚した。", "%^s magically summons hounds."));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
int count = 0;
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
for (auto k = 0; k < S_NUM_4; k++) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP);
}
*/
MonsterSpellResult spell_RF6_S_HYDRA(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが魔法でヒドラを召喚した。", "%^s magically summons hydras."), _("%^sが魔法でヒドラを召喚した。", "%^s magically summons hydras."));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
int count = 0;
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
for (auto k = 0; k < S_NUM_4; k++) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP);
}
*/
MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが魔法で天使を召喚した!", "%^s magically summons an angel!"), _("%^sが魔法で天使を召喚した!", "%^s magically summons an angel!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
monster_type *m_ptr = &floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
int num = 1;
num += r_ptr->level / 40;
}
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
int count = 0;
for (int k = 0; k < num; k++) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP);
msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby."));
}
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon)
floor_ptr->monster_noise = true;
*/
MonsterSpellResult spell_RF6_S_DEMON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sは魔法で混沌の宮廷から悪魔を召喚した!", "%^s magically summons a demon from the Courts of Chaos!"),
_("%^sは魔法で混沌の宮廷から悪魔を召喚した!", "%^s magically summons a demon from the Courts of Chaos!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
int count = 0;
for (int k = 0; k < 1; k++) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP);
if (player_ptr->blind && count)
msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby."));
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon)
floor_ptr->monster_noise = true;
*/
MonsterSpellResult spell_RF6_S_UNDEAD(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが魔法でアンデッドの強敵を召喚した!", "%^s magically summons an undead adversary!"),
_("%sが魔法でアンデッドを召喚した。", "%^s magically summons undead."));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
int count = 0;
for (int k = 0; k < 1; k++) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP);
if (player_ptr->blind && count)
msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby."));
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon)
floor_ptr->monster_noise = true;
*/
MonsterSpellResult spell_RF6_S_DRAGON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが魔法でドラゴンを召喚した!", "%^s magically summons a dragon!"), _("%^sが魔法でドラゴンを召喚した!", "%^s magically summons a dragon!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
int count = 0;
if (mon_to_player)
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
*/
MonsterSpellResult spell_RF6_S_HI_UNDEAD(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- GAME_TEXT m_name[MAX_NLEN];
- monster_name(player_ptr, m_idx, m_name);
-
- disturb(player_ptr, true, true);
-
floor_type *floor_ptr = player_ptr->current_floor_ptr;
monster_type *m_ptr = &floor_ptr->m_list[m_idx];
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
+ GAME_TEXT m_name[MAX_NLEN];
+ monster_name(player_ptr, m_idx, m_name);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
+
int count = 0;
if (((m_ptr->r_idx == MON_MORGOTH) || (m_ptr->r_idx == MON_SAURON) || (m_ptr->r_idx == MON_ANGMAR)) && ((r_info[MON_NAZGUL].cur_num + 2) < r_info[MON_NAZGUL].max_num) && mon_to_player) {
count += summon_NAZGUL(player_ptr, y, x, m_idx);
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
for (auto k = 0; k < S_NUM_6; k++) {
if (mon_to_player)
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
*/
MonsterSpellResult spell_RF6_S_HI_DRAGON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが魔法で古代ドラゴンを召喚した!", "%^s magically summons ancient dragons!"),
_("%^sが魔法で古代ドラゴンを召喚した!", "%^s magically summons ancient dragons!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
int count = 0;
for (auto k = 0; k < S_NUM_4; k++) {
if (mon_to_player)
*/
MonsterSpellResult spell_RF6_S_AMBERITES(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sがアンバーの王族を召喚した!", "%^s magically summons Lords of Amber!"),
_("%^sがアンバーの王族を召喚した!", "%^s magically summons Lords of Amber!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
int count = 0;
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
for (auto k = 0; k < S_NUM_4; k++) {
count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
*/
MonsterSpellResult spell_RF6_S_UNIQUE(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ floor_type *floor_ptr = player_ptr->current_floor_ptr;
+ DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
+ bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+ bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+ bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx);
+ bool known = monster_near_player(floor_ptr, m_idx, t_idx);
+
mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが魔法で特別な強敵を召喚した!", "%^s magically summons special opponents!"),
_("%^sが魔法で特別な強敵を召喚した!", "%^s magically summons special opponents!"));
monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
- floor_type *floor_ptr = player_ptr->current_floor_ptr;
monster_type *m_ptr = &floor_ptr->m_list[m_idx];
- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
bool uniques_are_summoned = false;
int count = 0;
for (auto k = 0; k < S_NUM_4; k++) {