OSDN Git Service

[fix] #41503 超能力者でゲームを開始しようとするとクラッシュ
[hengband/hengband.git] / src / blue-magic / blue-magic-summon.c
1 #include "blue-magic/blue-magic-summon.h"
2 #include "blue-magic/blue-magic-util.h"
3 #include "monster-floor/monster-summon.h"
4 #include "monster-floor/place-monster-types.h"
5 #include "spell/spells-summon.h"
6 #include "spell/summon-types.h"
7 #include "view/display-messages.h"
8
9 bool cast_blue_summon_kin(player_type *caster_ptr, bmc_type *bmc_ptr)
10 {
11     msg_print(_("援軍を召喚した。", "You summon one of your kin."));
12     for (int k = 0; k < 1; k++) {
13         if (summon_kin_player(caster_ptr, bmc_ptr->summon_lev, caster_ptr->y, caster_ptr->x, (bmc_ptr->pet ? PM_FORCE_PET : 0L))) {
14             if (!bmc_ptr->pet)
15                 msg_print(_("召喚された仲間は怒っている!", "The summoned companion is angry!"));
16         } else {
17             bmc_ptr->no_trump = TRUE;
18         }
19     }
20
21     return TRUE;
22 }
23
24 bool cast_blue_summon_cyber(player_type *caster_ptr, bmc_type *bmc_ptr)
25 {
26     msg_print(_("サイバーデーモンを召喚した!", "You summon a Cyberdemon!"));
27     for (int k = 0; k < 1; k++) {
28         if (summon_specific(caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_CYBER, bmc_ptr->p_mode)) {
29             if (!bmc_ptr->pet)
30                 msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon is angry!"));
31         } else {
32             bmc_ptr->no_trump = TRUE;
33         }
34     }
35
36     return TRUE;
37 }
38
39 bool cast_blue_summon_monster(player_type *caster_ptr, bmc_type *bmc_ptr)
40 {
41     msg_print(_("仲間を召喚した。", "You summon help."));
42     for (int k = 0; k < 1; k++) {
43         if (summon_specific(caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, 0, bmc_ptr->p_mode)) {
44             if (!bmc_ptr->pet)
45                 msg_print(_("召喚されたモンスターは怒っている!", "The summoned monster is angry!"));
46         } else {
47             bmc_ptr->no_trump = TRUE;
48         }
49     }
50
51     return TRUE;
52 }
53
54 bool cast_blue_summon_monsters(player_type *caster_ptr, bmc_type *bmc_ptr)
55 {
56     msg_print(_("モンスターを召喚した!", "You summon monsters!"));
57     for (int k = 0; k < bmc_ptr->plev / 15 + 2; k++) {
58         if (summon_specific(caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, 0, (bmc_ptr->p_mode | bmc_ptr->u_mode))) {
59             if (!bmc_ptr->pet)
60                 msg_print(_("召喚されたモンスターは怒っている!", "The summoned monsters are angry!"));
61         } else {
62             bmc_ptr->no_trump = TRUE;
63         }
64     }
65
66     return TRUE;
67 }
68
69 bool cast_blue_summon_ant(player_type *caster_ptr, bmc_type *bmc_ptr)
70 {
71     msg_print(_("アリを召喚した。", "You summon ants."));
72     if (summon_specific(
73             caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_ANT, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) {
74         if (!bmc_ptr->pet)
75             msg_print(_("召喚されたアリは怒っている!", "The summoned ants are angry!"));
76     } else {
77         bmc_ptr->no_trump = TRUE;
78     }
79
80     return TRUE;
81 }
82
83 bool cast_blue_summon_spider(player_type *caster_ptr, bmc_type *bmc_ptr)
84 {
85     msg_print(_("蜘蛛を召喚した。", "You summon spiders."));
86     if (summon_specific(
87             caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_SPIDER, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) {
88         if (!bmc_ptr->pet)
89             msg_print(_("召喚された蜘蛛は怒っている!", "The summoned spiders are angry!"));
90     } else {
91         bmc_ptr->no_trump = TRUE;
92     }
93
94     return TRUE;
95 }
96
97 bool cast_blue_summon_hound(player_type *caster_ptr, bmc_type *bmc_ptr)
98 {
99     msg_print(_("ハウンドを召喚した。", "You summon hounds."));
100     if (summon_specific(
101             caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_HOUND, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) {
102         if (!bmc_ptr->pet)
103             msg_print(_("召喚されたハウンドは怒っている!", "The summoned hounds are angry!"));
104     } else {
105         bmc_ptr->no_trump = TRUE;
106     }
107
108     return TRUE;
109 }
110
111 bool cast_blue_summon_hydra(player_type *caster_ptr, bmc_type *bmc_ptr)
112 {
113     msg_print(_("ヒドラを召喚した。", "You summon a hydras."));
114     if (summon_specific(
115             caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_HYDRA, (bmc_ptr->g_mode | bmc_ptr->p_mode))) {
116         if (!bmc_ptr->pet)
117             msg_print(_("召喚されたヒドラは怒っている!", "The summoned hydras are angry!"));
118     } else {
119         bmc_ptr->no_trump = TRUE;
120     }
121
122     return TRUE;
123 }
124
125 bool cast_blue_summon_angel(player_type *caster_ptr, bmc_type *bmc_ptr)
126 {
127     msg_print(_("天使を召喚した!", "You summon an angel!"));
128     if (summon_specific(
129             caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_ANGEL, (bmc_ptr->g_mode | bmc_ptr->p_mode))) {
130         if (!bmc_ptr->pet)
131             msg_print(_("召喚された天使は怒っている!", "The summoned angel is angry!"));
132     } else {
133         bmc_ptr->no_trump = TRUE;
134     }
135
136     return TRUE;
137 }
138
139 bool cast_blue_summon_demon(player_type *caster_ptr, bmc_type *bmc_ptr)
140 {
141     msg_print(_("混沌の宮廷から悪魔を召喚した!", "You summon a demon from the Courts of Chaos!"));
142     if (summon_specific(
143             caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_DEMON, (bmc_ptr->g_mode | bmc_ptr->p_mode))) {
144         if (!bmc_ptr->pet)
145             msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon is angry!"));
146     } else {
147         bmc_ptr->no_trump = TRUE;
148     }
149
150     return TRUE;
151 }
152
153 bool cast_blue_summon_undead(player_type *caster_ptr, bmc_type *bmc_ptr)
154 {
155     msg_print(_("アンデッドの強敵を召喚した!", "You summon an undead adversary!"));
156     if (summon_specific(
157             caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_UNDEAD, (bmc_ptr->g_mode | bmc_ptr->p_mode))) {
158         if (!bmc_ptr->pet)
159             msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead is angry!"));
160     } else {
161         bmc_ptr->no_trump = TRUE;
162     }
163
164     return TRUE;
165 }
166
167 bool cast_blue_summon_dragon(player_type *caster_ptr, bmc_type *bmc_ptr)
168 {
169     msg_print(_("ドラゴンを召喚した!", "You summon a dragon!"));
170     if (summon_specific(
171             caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_DRAGON, (bmc_ptr->g_mode | bmc_ptr->p_mode))) {
172         if (!bmc_ptr->pet)
173             msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon is angry!"));
174     } else {
175         bmc_ptr->no_trump = TRUE;
176     }
177
178     return TRUE;
179 }
180
181 bool cast_blue_summon_high_undead(player_type *caster_ptr, bmc_type *bmc_ptr)
182 {
183     msg_print(_("強力なアンデッドを召喚した!", "You summon a greater undead!"));
184     if (summon_specific(caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_UNDEAD,
185             (bmc_ptr->g_mode | bmc_ptr->p_mode | bmc_ptr->u_mode))) {
186         if (!bmc_ptr->pet)
187             msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!"));
188     } else {
189         bmc_ptr->no_trump = TRUE;
190     }
191
192     return TRUE;
193 }
194
195 bool cast_blue_summon_high_dragon(player_type *caster_ptr, bmc_type *bmc_ptr)
196 {
197     msg_print(_("古代ドラゴンを召喚した!", "You summon an ancient dragon!"));
198     if (summon_specific(caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_DRAGON,
199             (bmc_ptr->g_mode | bmc_ptr->p_mode | bmc_ptr->u_mode))) {
200         if (!bmc_ptr->pet)
201             msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon is angry!"));
202     } else {
203         bmc_ptr->no_trump = TRUE;
204     }
205
206     return TRUE;
207 }
208
209 bool cast_blue_summon_amberite(player_type *caster_ptr, bmc_type *bmc_ptr)
210 {
211     msg_print(_("アンバーの王族を召喚した!", "You summon a Lord of Amber!"));
212     if (summon_specific(caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_AMBERITES,
213             (bmc_ptr->g_mode | bmc_ptr->p_mode | bmc_ptr->u_mode))) {
214         if (!bmc_ptr->pet)
215             msg_print(_("召喚されたアンバーの王族は怒っている!", "The summoned Lord of Amber is angry!"));
216     } else {
217         bmc_ptr->no_trump = TRUE;
218     }
219
220     return TRUE;
221 }
222
223 bool cast_blue_summon_unique(player_type *caster_ptr, bmc_type *bmc_ptr)
224 {
225     int count = 0;
226     msg_print(_("特別な強敵を召喚した!", "You summon a special opponent!"));
227     for (int k = 0; k < 1; k++) {
228         if (summon_specific(caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_UNIQUE,
229                 (bmc_ptr->g_mode | bmc_ptr->p_mode | PM_ALLOW_UNIQUE))) {
230             count++;
231             if (!bmc_ptr->pet)
232                 msg_print(_("召喚されたユニーク・モンスターは怒っている!", "The summoned special opponent is angry!"));
233         }
234     }
235
236     for (int k = count; k < 1; k++) {
237         if (summon_specific(caster_ptr, (bmc_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_UNDEAD,
238                 (bmc_ptr->g_mode | bmc_ptr->p_mode | PM_ALLOW_UNIQUE))) {
239             count++;
240             if (!bmc_ptr->pet)
241                 msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!"));
242         }
243     }
244
245     if (!count)
246         bmc_ptr->no_trump = TRUE;
247
248     return TRUE;
249 }