OSDN Git Service

[Refactor] #40634 Removed unused headers in activation-switcher.c
[hengband/hengband.git] / src / object-activation / activation-switcher.c
1 /*!
2  * @brief プレイヤーの発動コマンド実装
3  * @date 2018/09/07
4  * @author deskull
5  */
6
7 #include "object-activation/activation-switcher.h"
8 #include "art-definition/random-art-effects.h"
9 #include "monster-floor/monster-summon.h"
10 #include "monster-floor/place-monster-types.h"
11 #include "object-activation/activation-bolt-ball.h"
12 #include "object-activation/activation-breath.h"
13 #include "object-activation/activation-charm.h"
14 #include "object-activation/activation-others.h"
15 #include "object-activation/activation-resistance.h"
16 #include "object-enchant/activation-info-table.h"
17 #include "player-attack/player-attack.h"
18 #include "player/digestion-processor.h"
19 #include "player/player-damage.h"
20 #include "specific-object/blade-turner.h"
21 #include "specific-object/bloody-moon.h"
22 #include "specific-object/death-crimson.h"
23 #include "specific-object/muramasa.h"
24 #include "specific-object/ring-of-power.h"
25 #include "spell-kind/earthquake.h"
26 #include "spell-kind/magic-item-recharger.h"
27 #include "spell-kind/spells-detection.h"
28 #include "spell-kind/spells-floor.h"
29 #include "spell-kind/spells-genocide.h"
30 #include "spell-kind/spells-grid.h"
31 #include "spell-kind/spells-launcher.h"
32 #include "spell-kind/spells-lite.h"
33 #include "spell-kind/spells-neighbor.h"
34 #include "spell-kind/spells-perception.h"
35 #include "spell-kind/spells-random.h"
36 #include "spell-kind/spells-sight.h"
37 #include "spell-kind/spells-teleport.h"
38 #include "spell-kind/spells-world.h"
39 #include "spell-realm/spells-sorcery.h"
40 #include "spell/spell-types.h"
41 #include "spell/spells-object.h"
42 #include "spell/spells-status.h"
43 #include "spell/spells-summon.h"
44 #include "status/bad-status-setter.h"
45 #include "status/body-improvement.h"
46 #include "status/buff-setter.h"
47 #include "status/experience.h"
48 #include "status/shape-changer.h"
49 #include "status/sight-setter.h"
50 #include "system/floor-type-definition.h"
51 #include "view/display-messages.h"
52
53 bool switch_activation(player_type *user_ptr, object_type *o_ptr, const activation_type *const act_ptr, concptr name)
54 {
55     switch (act_ptr->index) {
56     case ACT_SUNLIGHT:
57         return activate_sunlight(user_ptr);
58     case ACT_BO_MISS_1:
59         return activate_missile_1(user_ptr);
60     case ACT_BA_POIS_1:
61         return activate_ball_pois_1(user_ptr);
62     case ACT_BO_ELEC_1:
63         return activate_bolt_elec_1(user_ptr);
64     case ACT_BO_ACID_1:
65         return activate_bolt_acid_1(user_ptr);
66     case ACT_BO_COLD_1:
67         return activate_bolt_cold_1(user_ptr);
68     case ACT_BO_FIRE_1:
69         return activate_bolt_fire_1(user_ptr);
70     case ACT_BA_COLD_1:
71         return activate_ball_cold_1(user_ptr);
72     case ACT_BA_COLD_2:
73         return activate_ball_cold_2(user_ptr);
74     case ACT_BA_COLD_3:
75         return activate_ball_cold_2(user_ptr);
76     case ACT_BA_FIRE_1:
77         return activate_ball_fire_1(user_ptr);
78     case ACT_BA_FIRE_2:
79         return activate_ball_fire_2(user_ptr, name);
80     case ACT_BA_FIRE_3:
81         return activate_ball_fire_3(user_ptr);
82     case ACT_BA_FIRE_4:
83         return activate_ball_fire_4(user_ptr);
84     case ACT_BA_ELEC_2:
85         return activate_ball_elec_2(user_ptr);
86     case ACT_BA_ELEC_3:
87         return activate_ball_elec_3(user_ptr);
88     case ACT_BA_ACID_1:
89         return activate_ball_acid_1(user_ptr);
90     case ACT_BA_NUKE_1:
91         return activate_ball_nuke_1(user_ptr);
92     case ACT_HYPODYNAMIA_1:
93         return activate_bolt_hypodynamia_1(user_ptr, name);
94     case ACT_HYPODYNAMIA_2:
95         return activate_bolt_hypodynamia_2(user_ptr);
96     case ACT_DRAIN_1:
97         return activate_bolt_drain_1(user_ptr);
98     case ACT_BO_MISS_2:
99         return activate_missile_2(user_ptr);
100     case ACT_WHIRLWIND:
101         massacre(user_ptr);
102         return TRUE;
103     case ACT_DRAIN_2:
104         return activate_bolt_drain_2(user_ptr);
105     case ACT_CALL_CHAOS:
106         msg_print(_("様々な色の火花を発している...", "It glows in scintillating colours..."));
107         call_chaos(user_ptr);
108         return TRUE;
109     case ACT_ROCKET:
110         return activate_rocket(user_ptr);
111     case ACT_DISP_EVIL:
112         msg_print(_("神聖な雰囲気が充満した...", "It floods the area with goodness..."));
113         dispel_evil(user_ptr, user_ptr->lev * 5);
114         return TRUE;
115     case ACT_BA_MISS_3:
116         return activate_missile_3(user_ptr);
117     case ACT_DISP_GOOD:
118         msg_print(_("邪悪な雰囲気が充満した...", "It floods the area with evil..."));
119         dispel_good(user_ptr, user_ptr->lev * 5);
120         return TRUE;
121     case ACT_BO_MANA:
122         return activate_bolt_mana(user_ptr, name);
123     case ACT_BA_WATER:
124         return activate_ball_water(user_ptr, name);
125     case ACT_BA_DARK:
126         return activate_ball_dark(user_ptr, name);
127     case ACT_BA_MANA:
128         return activate_ball_mana(user_ptr, name);
129     case ACT_PESTICIDE:
130         msg_print(_("あなたは害虫を一掃した。", "You exterminate small life."));
131         (void)dispel_monsters(user_ptr, 4);
132         return TRUE;
133     case ACT_BLINDING_LIGHT:
134         msg_format(_("%sが眩しい光で輝いた...", "The %s gleams with blinding light..."), name);
135         (void)fire_ball(user_ptr, GF_LITE, 0, 300, 6);
136         confuse_monsters(user_ptr, 3 * user_ptr->lev / 2);
137         return TRUE;
138     case ACT_BIZARRE:
139         return activate_ring_of_power(user_ptr, name);
140     case ACT_CAST_BA_STAR:
141         return activate_ball_lite(user_ptr, name);
142     case ACT_BLADETURNER:
143         return activate_bladeturner(user_ptr);
144     case ACT_BR_FIRE:
145         return activate_breath_fire(user_ptr, o_ptr);
146     case ACT_BR_COLD:
147         return activate_breath_cold(user_ptr, o_ptr);
148     case ACT_BR_DRAGON:
149         return activate_dragon_breath(user_ptr, o_ptr);
150     case ACT_CONFUSE:
151         return activate_confusion(user_ptr);
152     case ACT_SLEEP:
153         msg_print(_("深青色に輝いている...", "It glows deep blue..."));
154         sleep_monsters_touch(user_ptr);
155         return TRUE;
156     case ACT_QUAKE:
157         earthquake(user_ptr, user_ptr->y, user_ptr->x, 5, 0);
158         return TRUE;
159     case ACT_TERROR:
160         turn_monsters(user_ptr, 40 + user_ptr->lev);
161         return TRUE;
162     case ACT_TELE_AWAY:
163         return activate_teleport_away(user_ptr);
164     case ACT_BANISH_EVIL:
165         return activate_banish_evil(user_ptr);
166     case ACT_GENOCIDE:
167         msg_print(_("深青色に輝いている...", "It glows deep blue..."));
168         (void)symbol_genocide(user_ptr, 200, TRUE);
169         return TRUE;
170     case ACT_MASS_GENO:
171         msg_print(_("ひどく鋭い音が流れ出た...", "It lets out a long, shrill note..."));
172         (void)mass_genocide(user_ptr, 200, TRUE);
173         return TRUE;
174     case ACT_SCARE_AREA:
175         return activate_scare(user_ptr);
176     case ACT_AGGRAVATE:
177         return activate_aggravation(user_ptr, o_ptr, name);
178     case ACT_CHARM_ANIMAL:
179         return activate_charm_animal(user_ptr);
180     case ACT_CHARM_UNDEAD:
181         return activate_charm_undead(user_ptr);
182     case ACT_CHARM_OTHER:
183         return activate_charm_other(user_ptr);
184     case ACT_CHARM_ANIMALS:
185         return activate_charm_animals(user_ptr);
186     case ACT_CHARM_OTHERS:
187         return activate_charm_others(user_ptr);
188     case ACT_SUMMON_ANIMAL:
189         (void)summon_specific(user_ptr, -1, user_ptr->y, user_ptr->x, user_ptr->lev, SUMMON_ANIMAL_RANGER, PM_ALLOW_GROUP | PM_FORCE_PET);
190         return TRUE;
191     case ACT_SUMMON_PHANTOM:
192         msg_print(_("幻霊を召喚した。", "You summon a phantasmal servant."));
193         (void)summon_specific(user_ptr, -1, user_ptr->y, user_ptr->x, user_ptr->current_floor_ptr->dun_level, SUMMON_PHANTOM, PM_ALLOW_GROUP | PM_FORCE_PET);
194         return TRUE;
195     case ACT_SUMMON_ELEMENTAL:
196         return cast_summon_elemental(user_ptr, (user_ptr->lev * 3) / 2);
197     case ACT_SUMMON_DEMON:
198         cast_summon_demon(user_ptr, (user_ptr->lev * 3) / 2);
199         return TRUE;
200     case ACT_SUMMON_UNDEAD:
201         return cast_summon_undead(user_ptr, (user_ptr->lev * 3) / 2);
202     case ACT_SUMMON_HOUND:
203         return cast_summon_hound(user_ptr, (user_ptr->lev * 3) / 2);
204     case ACT_SUMMON_DAWN:
205         msg_print(_("暁の師団を召喚した。", "You summon the Legion of the Dawn."));
206         (void)summon_specific(user_ptr, -1, user_ptr->y, user_ptr->x, user_ptr->current_floor_ptr->dun_level, SUMMON_DAWN, PM_ALLOW_GROUP | PM_FORCE_PET);
207         return TRUE;
208     case ACT_SUMMON_OCTOPUS:
209         return cast_summon_octopus(user_ptr);
210     case ACT_CHOIR_SINGS:
211         msg_print(_("天国の歌が聞こえる...", "A heavenly choir sings..."));
212         (void)cure_critical_wounds(user_ptr, 777);
213         (void)set_hero(user_ptr, randint1(25) + 25, FALSE);
214         return TRUE;
215     case ACT_CURE_LW:
216         return activate_cure_lw(user_ptr);
217     case ACT_CURE_MW:
218         msg_print(_("深紫色の光を発している...", "It radiates deep purple..."));
219         (void)cure_serious_wounds(user_ptr, 4, 8);
220         return TRUE;
221     case ACT_CURE_POISON:
222         msg_print(_("深青色に輝いている...", "It glows deep blue..."));
223         (void)set_afraid(user_ptr, 0);
224         (void)set_poisoned(user_ptr, 0);
225         return TRUE;
226     case ACT_REST_EXP:
227         msg_print(_("深紅に輝いている...", "It glows a deep red..."));
228         restore_level(user_ptr);
229         return TRUE;
230     case ACT_REST_ALL:
231         msg_print(_("濃緑色に輝いている...", "It glows a deep green..."));
232         (void)restore_all_status(user_ptr);
233         (void)restore_level(user_ptr);
234         return TRUE;
235     case ACT_CURE_700:
236         msg_print(_("深青色に輝いている...", "It glows deep blue..."));
237         msg_print(_("体内に暖かい鼓動が感じられる...", "You feel a warm tingling inside..."));
238         (void)cure_critical_wounds(user_ptr, 700);
239         return TRUE;
240     case ACT_CURE_1000:
241         msg_print(_("白く明るく輝いている...", "It glows a bright white..."));
242         msg_print(_("ひじょうに気分がよい...", "You feel much better..."));
243         (void)cure_critical_wounds(user_ptr, 1000);
244         return TRUE;
245     case ACT_CURING:
246         msg_format(_("%sの優しさに癒される...", "the %s cures you affectionately ..."), name);
247         true_healing(user_ptr, 0);
248         return TRUE;
249     case ACT_CURE_MANA_FULL:
250         msg_format(_("%sが青白く光った...", "The %s glows pale..."), name);
251         restore_mana(user_ptr, TRUE);
252         return TRUE;
253     case ACT_ESP:
254         (void)set_tim_esp(user_ptr, randint1(30) + 25, FALSE);
255         return TRUE;
256     case ACT_BERSERK:
257         (void)berserk(user_ptr, randint1(25) + 25);
258         return TRUE;
259     case ACT_PROT_EVIL:
260         msg_format(_("%sから鋭い音が流れ出た...", "The %s lets out a shrill wail..."), name);
261         (void)set_protevil(user_ptr, randint1(25) + user_ptr->lev * 3, FALSE);
262         return TRUE;
263     case ACT_RESIST_ALL:
264         return activate_resistance_elements(user_ptr);
265     case ACT_SPEED:
266         msg_print(_("明るく緑色に輝いている...", "It glows bright green..."));
267         (void)set_fast(user_ptr, randint1(20) + 20, FALSE);
268         return TRUE;
269     case ACT_XTRA_SPEED:
270         msg_print(_("明るく輝いている...", "It glows brightly..."));
271         (void)set_fast(user_ptr, randint1(75) + 75, FALSE);
272         return TRUE;
273     case ACT_WRAITH:
274         set_wraith_form(user_ptr, randint1(user_ptr->lev / 2) + (user_ptr->lev / 2), FALSE);
275         return TRUE;
276     case ACT_INVULN:
277         (void)set_invuln(user_ptr, randint1(8) + 8, FALSE);
278         return TRUE;
279     case ACT_HERO:
280         (void)heroism(user_ptr, 25);
281         return TRUE;
282     case ACT_HERO_SPEED:
283         (void)set_fast(user_ptr, randint1(50) + 50, FALSE);
284         (void)heroism(user_ptr, 50);
285         return TRUE;
286     case ACT_RESIST_ACID:
287         return activate_resistance_acid(user_ptr, o_ptr, name);
288     case ACT_RESIST_FIRE:
289         return activate_resistance_fire(user_ptr, o_ptr, name);
290     case ACT_RESIST_COLD:
291         return activate_resistance_cold(user_ptr, o_ptr, name);
292     case ACT_RESIST_ELEC:
293         return activate_resistance_elec(user_ptr, o_ptr, name);
294     case ACT_RESIST_POIS:
295         return activate_resistance_pois(user_ptr, name);
296     case ACT_LIGHT:
297         msg_format(_("%sから澄んだ光があふれ出た...", "The %s wells with clear light..."), name);
298         lite_area(user_ptr, damroll(2, 15), 3);
299         return TRUE;
300     case ACT_MAP_LIGHT:
301         msg_print(_("眩しく輝いた...", "It shines brightly..."));
302         map_area(user_ptr, DETECT_RAD_MAP);
303         lite_area(user_ptr, damroll(2, 15), 3);
304         return TRUE;
305     case ACT_DETECT_ALL:
306         msg_print(_("白く明るく輝いている...", "It glows bright white..."));
307         msg_print(_("心にイメージが浮かんできた...", "An image forms in your mind..."));
308         detect_all(user_ptr, DETECT_RAD_DEFAULT);
309         return TRUE;
310     case ACT_DETECT_XTRA:
311         msg_print(_("明るく輝いている...", "It glows brightly..."));
312         detect_all(user_ptr, DETECT_RAD_DEFAULT);
313         probing(user_ptr);
314         identify_fully(user_ptr, FALSE, 0);
315         return TRUE;
316     case ACT_ID_FULL:
317         msg_print(_("黄色く輝いている...", "It glows yellow..."));
318         identify_fully(user_ptr, FALSE, 0);
319         return TRUE;
320     case ACT_ID_PLAIN:
321         return ident_spell(user_ptr, FALSE, 0);
322     case ACT_RUNE_EXPLO:
323         msg_print(_("明るい赤色に輝いている...", "It glows bright red..."));
324         explosive_rune(user_ptr, user_ptr->y, user_ptr->x);
325         return TRUE;
326     case ACT_RUNE_PROT:
327         msg_print(_("ブルーに明るく輝いている...", "It glows light blue..."));
328         warding_glyph(user_ptr);
329         return TRUE;
330     case ACT_SATIATE:
331         (void)set_food(user_ptr, PY_FOOD_MAX - 1);
332         return TRUE;
333     case ACT_DEST_DOOR:
334         msg_print(_("明るい赤色に輝いている...", "It glows bright red..."));
335         destroy_doors_touch(user_ptr);
336         return TRUE;
337     case ACT_STONE_MUD:
338         return activate_stone_mud(user_ptr);
339     case ACT_RECHARGE:
340         recharge(user_ptr, 130);
341         return TRUE;
342     case ACT_ALCHEMY:
343         msg_print(_("明るい黄色に輝いている...", "It glows bright yellow..."));
344         (void)alchemy(user_ptr);
345         return TRUE;
346     case ACT_DIM_DOOR:
347         return activate_dimension_door(user_ptr);
348     case ACT_TELEPORT:
349         return activate_teleport(user_ptr);
350     case ACT_RECALL:
351         msg_print(_("やわらかな白色に輝いている...", "It glows soft white..."));
352         return recall_player(user_ptr, randint0(21) + 15);
353     case ACT_JUDGE:
354         return activate_judgement(user_ptr, name);
355     case ACT_TELEKINESIS:
356         return activate_telekinesis(user_ptr, name);
357     case ACT_DETECT_UNIQUE:
358         return activate_unique_detection(user_ptr);
359     case ACT_ESCAPE:
360         return activate_escape(user_ptr);
361     case ACT_DISP_CURSE_XTRA:
362         return activate_dispel_curse(user_ptr, name);
363     case ACT_BRAND_FIRE_BOLTS:
364         msg_format(_("%sが深紅に輝いた...", "Your %s glows deep red..."), name);
365         brand_bolts(user_ptr);
366         return TRUE;
367     case ACT_RECHARGE_XTRA:
368         msg_format(_("%sが白く輝いた...", "The %s gleams with blinding light..."), name);
369         return recharge(user_ptr, 1000);
370     case ACT_LORE:
371         msg_print(_("石が隠された秘密を写し出した...", "The stone reveals hidden mysteries..."));
372         return perilous_secrets(user_ptr);
373     case ACT_SHIKOFUMI:
374         msg_print(_("力強く四股を踏んだ。", "You stamp. (as if you are in a ring.)"));
375         (void)set_afraid(user_ptr, 0);
376         (void)set_hero(user_ptr, randint1(20) + 20, FALSE);
377         (void)dispel_evil(user_ptr, user_ptr->lev * 3);
378         return TRUE;
379     case ACT_PHASE_DOOR:
380         teleport_player(user_ptr, 10, TELEPORT_SPONTANEOUS);
381         return TRUE;
382     case ACT_DETECT_ALL_MONS:
383         (void)detect_monsters_invis(user_ptr, 255);
384         (void)detect_monsters_normal(user_ptr, 255);
385         return TRUE;
386     case ACT_ULTIMATE_RESIST:
387         return activate_ultimate_resistance(user_ptr);
388     case ACT_CAST_OFF:
389         (void)cosmic_cast_off(user_ptr, o_ptr);
390         return TRUE;
391     case ACT_FALLING_STAR:
392         msg_print(_("あなたは妖刀に魅入られた…", "You are enchanted by cursed blade..."));
393         msg_print(_("「狂ほしく 血のごとき 月はのぼれり 秘めおきし 魔剣 いずこぞや」", "'Behold the blade arts.'"));
394         massacre(user_ptr);
395         return TRUE;
396     case ACT_GRAND_CROSS:
397         return activate_grand_cross(user_ptr);
398     case ACT_TELEPORT_LEVEL:
399         return activate_teleport_level(user_ptr);
400     case ACT_STRAIN_HASTE:
401         msg_format(_("%sはあなたの体力を奪った...", "The %s drains your vitality..."), name);
402         take_hit(user_ptr, DAMAGE_LOSELIFE, damroll(3, 8), _("加速した疲労", "the strain of haste"), -1);
403         (void)set_fast(user_ptr, user_ptr->fast + 25 + randint1(25), FALSE);
404         return TRUE;
405     case ACT_FISHING:
406         return fishing(user_ptr);
407     case ACT_INROU:
408         mitokohmon(user_ptr);
409         return TRUE;
410     case ACT_MURAMASA:
411         return activate_muramasa(user_ptr, o_ptr);
412     case ACT_BLOODY_MOON:
413         return activate_bloody_moon(user_ptr, o_ptr);
414     case ACT_CRIMSON:
415         return activate_crimson(user_ptr, o_ptr);
416     default:
417         msg_format(_("Unknown activation effect: %d.", "Unknown activation effect: %d."), act_ptr->index);
418         return FALSE;
419     }
420 }