1 #include "angband.h"
\r
2 #include "spells-summon.h"
\r
5 * @brief トランプ魔法独自の召喚処理を行う / Handle summoning and failure of trump spells
\r
6 * @param num summon_specific()関数を呼び出す回数
\r
7 * @param pet ペット化として召喚されるか否か
\r
11 * @param type 召喚条件ID
\r
12 * @param mode モンスター生成条件フラグ
\r
13 * @return モンスターが(敵対も含めて)召還されたならばTRUEを返す。
\r
15 bool trump_summoning(int num, bool pet, POSITION y, POSITION x, DEPTH lev, int type, BIT_FLAGS mode)
\r
17 PLAYER_LEVEL plev = p_ptr->lev;
\r
21 bool success = FALSE;
\r
24 if (!lev) lev = plev * 2 / 3 + randint1(plev / 2);
\r
29 mode |= PM_FORCE_PET;
\r
31 /* Only sometimes allow unique monster */
\r
32 if (mode & PM_ALLOW_UNIQUE)
\r
35 if (randint1(50 + plev) >= plev / 10)
\r
36 mode &= ~PM_ALLOW_UNIQUE;
\r
39 /* Player is who summons */
\r
44 /* Prevent taming, allow unique monster */
\r
47 /* Behave as if they appear by themselfs */
\r
51 for (i = 0; i < num; i++)
\r
53 if (summon_specific(who, y, x, lev, type, mode, '\0'))
\r
59 msg_print(_("誰もあなたのカードの呼び声に答えない。", "Nobody answers to your Trump call."));
\r
66 bool cast_summon_demon(int power)
\r
69 bool pet = !one_in_(3);
\r
71 if (pet) flg |= PM_FORCE_PET;
\r
72 else flg |= PM_NO_PET;
\r
73 if (!(pet && (p_ptr->lev < 50))) flg |= PM_ALLOW_GROUP;
\r
75 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, power, SUMMON_DEMON, flg, '\0'))
\r
77 msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
\r
80 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
\r
84 msg_print(_("「卑しき者よ、我は汝の下僕にあらず! お前の魂を頂くぞ!」",
\r
85 "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
\r
93 * @brief 悪魔領域のグレーターデーモン召喚に利用可能な死体かどうかを返す。 / An "item_tester_hook" for offer
\r
94 * @param o_ptr オブジェクト構造体の参照ポインタ
\r
95 * @return 生贄に使用可能な死体ならばTRUEを返す。
\r
97 bool item_tester_offer(object_type *o_ptr)
\r
99 /* Flasks of oil are okay */
\r
100 if (o_ptr->tval != TV_CORPSE) return (FALSE);
\r
101 if (o_ptr->sval != SV_CORPSE) return (FALSE);
\r
103 if (my_strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
\r
105 /* Assume not okay */
\r
110 * @brief 悪魔領域のグレーターデーモン召喚を処理する / Daemon spell Summon Greater Demon
\r
111 * @return 処理を実行したならばTRUEを返す。
\r
113 bool cast_summon_greater_demon(void)
\r
115 PLAYER_LEVEL plev = p_ptr->lev;
\r
119 object_type *o_ptr;
\r
121 item_tester_hook = item_tester_offer;
\r
122 q = _("どの死体を捧げますか? ", "Sacrifice which corpse? ");
\r
123 s = _("捧げられる死体を持っていない。", "You have nothing to scrifice.");
\r
124 o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
\r
125 if (!o_ptr) return FALSE;
\r
127 summon_lev = plev * 2 / 3 + r_info[o_ptr->pval].level;
\r
129 if (summon_specific(-1, p_ptr->y, p_ptr->x, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET), '\0'))
\r
131 msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
\r
132 msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
\r
134 /* Decrease the item (from the pack) */
\r
137 inven_item_increase(item, -1);
\r
138 inven_item_describe(item);
\r
139 inven_item_optimize(item);
\r
142 /* Decrease the item (from the floor) */
\r
145 floor_item_increase(0 - item, -1);
\r
146 floor_item_describe(0 - item);
\r
147 floor_item_optimize(0 - item);
\r
152 msg_print(_("悪魔は現れなかった。", "No Greater Demon arrive."));
\r
159 * @brief 同族召喚(援軍)処理
\r
160 * @param level 召喚基準レベル
\r
163 * @param mode 召喚オプション
\r
164 * @return ターンを消費した場合TRUEを返す
\r
166 bool summon_kin_player(DEPTH level, POSITION y, POSITION x, BIT_FLAGS mode)
\r
168 bool pet = (bool)(mode & PM_FORCE_PET);
\r
169 SYMBOL_CODE symbol = '\0';
\r
170 if (!pet) mode |= PM_NO_PET;
\r
172 switch (p_ptr->mimic_form)
\r
175 switch (p_ptr->prace)
\r
178 case RACE_AMBERITE:
\r
179 case RACE_BARBARIAN:
\r
180 case RACE_BEASTMAN:
\r
184 case RACE_HALF_ELF:
\r
189 case RACE_HIGH_ELF:
\r
190 case RACE_NIBELUNG:
\r
191 case RACE_DARK_ELF:
\r
192 case RACE_MIND_FLAYER:
\r
197 case RACE_HALF_ORC:
\r
200 case RACE_HALF_TROLL:
\r
203 case RACE_HALF_OGRE:
\r
206 case RACE_HALF_GIANT:
\r
207 case RACE_HALF_TITAN:
\r
221 if (one_in_(13)) symbol = 'U';
\r
224 case RACE_DRACONIAN:
\r
231 case RACE_SKELETON:
\r
232 if (one_in_(13)) symbol = 'L';
\r
262 if (one_in_(13)) symbol = 'U';
\r
265 case MIMIC_DEMON_LORD:
\r
268 case MIMIC_VAMPIRE:
\r
272 return summon_specific((pet ? -1 : 0), y, x, level, SUMMON_KIN, mode, symbol);
\r