1 #include "angband.h"
\r
4 * @brief トランプ魔法独自の召喚処理を行う / Handle summoning and failure of trump spells
\r
5 * @param num summon_specific()関数を呼び出す回数
\r
6 * @param pet ペット化として召喚されるか否か
\r
10 * @param type 召喚条件ID
\r
11 * @param mode モンスター生成条件フラグ
\r
12 * @return モンスターが(敵対も含めて)召還されたならばTRUEを返す。
\r
14 bool trump_summoning(int num, bool pet, POSITION y, POSITION x, DEPTH lev, int type, BIT_FLAGS mode)
\r
16 PLAYER_LEVEL plev = p_ptr->lev;
\r
20 bool success = FALSE;
\r
23 if (!lev) lev = plev * 2 / 3 + randint1(plev / 2);
\r
28 mode |= PM_FORCE_PET;
\r
30 /* Only sometimes allow unique monster */
\r
31 if (mode & PM_ALLOW_UNIQUE)
\r
34 if (randint1(50 + plev) >= plev / 10)
\r
35 mode &= ~PM_ALLOW_UNIQUE;
\r
38 /* Player is who summons */
\r
43 /* Prevent taming, allow unique monster */
\r
46 /* Behave as if they appear by themselfs */
\r
50 for (i = 0; i < num; i++)
\r
52 if (summon_specific(who, y, x, lev, type, mode, '\0'))
\r
58 msg_print(_("誰もあなたのカードの呼び声に答えない。", "Nobody answers to your Trump call."));
\r
65 bool cast_summon_demon(int power)
\r
68 bool pet = !one_in_(3);
\r
70 if (pet) flg |= PM_FORCE_PET;
\r
71 else flg |= PM_NO_PET;
\r
72 if (!(pet && (p_ptr->lev < 50))) flg |= PM_ALLOW_GROUP;
\r
74 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, power, SUMMON_DEMON, flg, '\0'))
\r
76 msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
\r
79 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
\r
83 msg_print(_("「卑しき者よ、我は汝の下僕にあらず! お前の魂を頂くぞ!」",
\r
84 "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
\r
92 * @brief 悪魔領域のグレーターデーモン召喚に利用可能な死体かどうかを返す。 / An "item_tester_hook" for offer
\r
93 * @param o_ptr オブジェクト構造体の参照ポインタ
\r
94 * @return 生贄に使用可能な死体ならばTRUEを返す。
\r
96 bool item_tester_offer(object_type *o_ptr)
\r
98 /* Flasks of oil are okay */
\r
99 if (o_ptr->tval != TV_CORPSE) return (FALSE);
\r
100 if (o_ptr->sval != SV_CORPSE) return (FALSE);
\r
102 if (my_strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
\r
104 /* Assume not okay */
\r
109 * @brief 悪魔領域のグレーターデーモン召喚を処理する / Daemon spell Summon Greater Demon
\r
110 * @return 処理を実行したならばTRUEを返す。
\r
112 bool cast_summon_greater_demon(void)
\r
114 PLAYER_LEVEL plev = p_ptr->lev;
\r
118 object_type *o_ptr;
\r
120 item_tester_hook = item_tester_offer;
\r
121 q = _("どの死体を捧げますか? ", "Sacrifice which corpse? ");
\r
122 s = _("捧げられる死体を持っていない。", "You have nothing to scrifice.");
\r
123 o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
\r
124 if (!o_ptr) return FALSE;
\r
126 summon_lev = plev * 2 / 3 + r_info[o_ptr->pval].level;
\r
128 if (summon_specific(-1, p_ptr->y, p_ptr->x, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET), '\0'))
\r
130 msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
\r
131 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
\r
133 /* Decrease the item (from the pack) */
\r
136 inven_item_increase(item, -1);
\r
137 inven_item_describe(item);
\r
138 inven_item_optimize(item);
\r
141 /* Decrease the item (from the floor) */
\r
144 floor_item_increase(0 - item, -1);
\r
145 floor_item_describe(0 - item);
\r
146 floor_item_optimize(0 - item);
\r
151 msg_print(_("悪魔は現れなかった。", "No Greater Demon arrive."));
\r
158 * @brief 同族召喚(援軍)処理
\r
159 * @param level 召喚基準レベル
\r
162 * @param mode 召喚オプション
\r
163 * @return ターンを消費した場合TRUEを返す
\r
165 bool summon_kin_player(DEPTH level, POSITION y, POSITION x, BIT_FLAGS mode)
\r
167 bool pet = (bool)(mode & PM_FORCE_PET);
\r
168 SYMBOL_CODE symbol = '\0';
\r
169 if (!pet) mode |= PM_NO_PET;
\r
171 switch (p_ptr->mimic_form)
\r
174 switch (p_ptr->prace)
\r
177 case RACE_AMBERITE:
\r
178 case RACE_BARBARIAN:
\r
179 case RACE_BEASTMAN:
\r
183 case RACE_HALF_ELF:
\r
188 case RACE_HIGH_ELF:
\r
189 case RACE_NIBELUNG:
\r
190 case RACE_DARK_ELF:
\r
191 case RACE_MIND_FLAYER:
\r
196 case RACE_HALF_ORC:
\r
199 case RACE_HALF_TROLL:
\r
202 case RACE_HALF_OGRE:
\r
205 case RACE_HALF_GIANT:
\r
206 case RACE_HALF_TITAN:
\r
220 if (one_in_(13)) symbol = 'U';
\r
223 case RACE_DRACONIAN:
\r
230 case RACE_SKELETON:
\r
231 if (one_in_(13)) symbol = 'L';
\r
261 if (one_in_(13)) symbol = 'U';
\r
264 case MIMIC_DEMON_LORD:
\r
267 case MIMIC_VAMPIRE:
\r
271 return summon_specific((pet ? -1 : 0), y, x, level, SUMMON_KIN, mode, symbol);
\r