1 #include "mspell/mspell-curse.h"
2 #include "core/disturbance.h"
3 #include "effect/effect-processor.h"
4 #include "monster-race/race-ability-flags.h"
5 #include "monster/monster-info.h"
6 #include "monster/monster-list.h"
7 #include "mspell/mspell-checker.h"
8 #include "mspell/mspell-damage-calculator.h"
9 #include "mspell/mspell-result.h"
10 #include "mspell/mspell-util.h"
11 #include "mspell/mspell-result.h"
12 #include "effect/attribute-types.h"
13 #include "system/floor-type-definition.h"
14 #include "system/player-type-definition.h"
15 #include "view/display-messages.h"
18 * @brief RF5_CAUSE_* の処理関数
19 * @param player_ptr プレイヤーへの参照ポインタ
20 * @param GF_TYPE 攻撃に使用する属性
21 * @param dam 攻撃に使用するダメージ量
24 * @param m_idx 呪文を唱えるモンスターID
25 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
26 * @param msg1 対プレイヤー、盲目時メッセージ
27 * @param msg2 対プレイヤー、非盲目時メッセージ
28 * @param msg3 対モンスターのメッセージ
29 * @param MS_TYPE 呪文の番号
30 * @param target_type プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
32 static MonsterSpellResult spell_RF5_CAUSE(PlayerType *player_ptr, AttributeType GF_TYPE, int dam, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx,
33 concptr msg1, concptr msg2, concptr msg3, int target_type)
35 auto res = MonsterSpellResult::make_valid(dam);
36 res.learnable = target_type == MONSTER_TO_PLAYER;
38 GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
39 monster_name(player_ptr, m_idx, m_name);
40 monster_name(player_ptr, t_idx, t_name);
42 if (target_type == MONSTER_TO_PLAYER) {
43 disturb(player_ptr, true, true);
44 if (player_ptr->blind)
45 msg_format(msg1, m_name);
47 msg_format(msg2, m_name);
48 breath(player_ptr, y, x, m_idx, GF_TYPE, dam, 0, false, target_type);
52 if (target_type == MONSTER_TO_MONSTER) {
53 if (see_monster(player_ptr, m_idx)) {
54 msg_format(msg3, m_name, t_name);
56 player_ptr->current_floor_ptr->monster_noise = true;
60 breath(player_ptr, y, x, m_idx, GF_TYPE, dam, 0, false, target_type);
66 * @brief RF5_CAUSE_1の処理。軽傷の呪い。 /
67 * @param player_ptr プレイヤーへの参照ポインタ
70 * @param m_idx 呪文を唱えるモンスターID
71 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
72 * @param target_type プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
76 MonsterSpellResult spell_RF5_CAUSE_1(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int target_type)
78 concptr msg1 = _("%^sが何かをつぶやいた。", "%^s mumbles.");
79 concptr msg2 = _("%^sがあなたを指さして呪った。", "%^s points at you and curses.");
80 concptr msg3 = _("%^sは%sを指さして呪いをかけた。", "%^s points at %s and curses.");
82 const auto dam = monspell_damage(player_ptr, MonsterAbilityType::CAUSE_1, m_idx, DAM_ROLL);
84 return spell_RF5_CAUSE(player_ptr, AttributeType::CAUSE_1, dam, y, x, m_idx, t_idx, msg1, msg2, msg3, target_type);
88 * @brief RF5_CAUSE_2の処理。重傷の呪い。 /
89 * @param player_ptr プレイヤーへの参照ポインタ
92 * @param m_idx 呪文を唱えるモンスターID
93 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
94 * @param target_type プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
98 MonsterSpellResult spell_RF5_CAUSE_2(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int target_type)
100 concptr msg1 = _("%^sが何かをつぶやいた。", "%^s mumbles.");
101 concptr msg2 = _("%^sがあなたを指さして恐ろしげに呪った。", "%^s points at you and curses horribly.");
102 concptr msg3 = _("%^sは%sを指さして恐ろしげに呪いをかけた。", "%^s points at %s and curses horribly.");
104 const auto dam = monspell_damage(player_ptr, MonsterAbilityType::CAUSE_2, m_idx, DAM_ROLL);
106 return spell_RF5_CAUSE(player_ptr, AttributeType::CAUSE_2, dam, y, x, m_idx, t_idx, msg1, msg2, msg3, target_type);
110 * @brief RF5_CAUSE_3の処理。致命傷の呪い。 /
111 * @param player_ptr プレイヤーへの参照ポインタ
114 * @param m_idx 呪文を唱えるモンスターID
115 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
116 * @param target_type プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
120 MonsterSpellResult spell_RF5_CAUSE_3(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int target_type)
122 concptr msg1 = _("%^sが何かを大声で叫んだ。", "%^s mumbles loudly.");
123 concptr msg2 = _("%^sがあなたを指さして恐ろしげに呪文を唱えた!", "%^s points at you, incanting terribly!");
124 concptr msg3 = _("%^sは%sを指さし、恐ろしげに呪文を唱えた!", "%^s points at %s, incanting terribly!");
126 const auto dam = monspell_damage(player_ptr, MonsterAbilityType::CAUSE_3, m_idx, DAM_ROLL);
128 return spell_RF5_CAUSE(player_ptr, AttributeType::CAUSE_3, dam, y, x, m_idx, t_idx, msg1, msg2, msg3, target_type);
132 * @brief RF5_CAUSE_4の処理。秘孔を突く。 /
133 * @param player_ptr プレイヤーへの参照ポインタ
136 * @param m_idx 呪文を唱えるモンスターID
137 * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
138 * @param target_type プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
142 MonsterSpellResult spell_RF5_CAUSE_4(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int target_type)
144 concptr msg1 = _("%^sが「お前は既に死んでいる」と叫んだ。", "%^s screams the word 'DIE!'");
145 concptr msg2 = _("%^sがあなたの秘孔を突いて「お前は既に死んでいる」と叫んだ。", "%^s points at you, screaming the word DIE!");
146 concptr msg3 = _("%^sが%sの秘孔を突いて、「お前は既に死んでいる」と叫んだ。", "%^s points at %s, screaming the word, 'DIE!'");
148 const auto dam = monspell_damage(player_ptr, MonsterAbilityType::CAUSE_4, m_idx, DAM_ROLL);
150 return spell_RF5_CAUSE(player_ptr, AttributeType::CAUSE_4, dam, y, x, m_idx, t_idx, msg1, msg2, msg3, target_type);