2 * @brief プレイヤーの発動コマンド実装
7 #include "object-activation/activation-switcher.h"
8 #include "artifact/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-genocide.h"
15 #include "object-activation/activation-others.h"
16 #include "object-activation/activation-resistance.h"
17 #include "object-activation/activation-teleport.h"
18 #include "object-enchant/activation-info-table.h"
19 #include "player/digestion-processor.h"
20 #include "player/player-damage.h"
21 #include "specific-object/blade-turner.h"
22 #include "specific-object/bloody-moon.h"
23 #include "specific-object/death-crimson.h"
24 #include "specific-object/muramasa.h"
25 #include "specific-object/ring-of-power.h"
26 #include "specific-object/stone-of-lore.h"
27 #include "specific-object/toragoroshi.h"
28 #include "spell-realm/spells-sorcery.h"
29 #include "spell/spells-object.h"
30 #include "spell/spells-status.h"
31 #include "spell/spells-summon.h"
32 #include "spell/summon-types.h"
33 #include "status/bad-status-setter.h"
34 #include "status/body-improvement.h"
35 #include "status/buff-setter.h"
36 #include "status/experience.h"
37 #include "status/shape-changer.h"
38 #include "status/sight-setter.h"
39 #include "system/floor-type-definition.h"
40 #include "system/player-type-definition.h"
41 #include "timed-effect/player-acceleration.h"
42 #include "view/display-messages.h"
44 bool switch_activation(PlayerType *player_ptr, ObjectType **o_ptr_ptr, const activation_type *const act_ptr, concptr name)
46 auto *o_ptr = (*o_ptr_ptr);
48 switch (act_ptr->index) {
49 case RandomArtActType::SUNLIGHT:
50 return activate_sunlight(player_ptr);
51 case RandomArtActType::BO_MISS_1:
52 return activate_missile_1(player_ptr);
53 case RandomArtActType::BA_POIS_1:
54 return activate_ball_pois_1(player_ptr);
55 case RandomArtActType::BO_ELEC_1:
56 return activate_bolt_elec_1(player_ptr);
57 case RandomArtActType::BO_ACID_1:
58 return activate_bolt_acid_1(player_ptr);
59 case RandomArtActType::BO_COLD_1:
60 return activate_bolt_cold_1(player_ptr);
61 case RandomArtActType::BO_FIRE_1:
62 return activate_bolt_fire_1(player_ptr);
63 case RandomArtActType::BA_COLD_1:
64 return activate_ball_cold_1(player_ptr);
65 case RandomArtActType::BA_COLD_2:
66 return activate_ball_cold_2(player_ptr);
67 case RandomArtActType::BA_COLD_3:
68 return activate_ball_cold_2(player_ptr);
69 case RandomArtActType::BA_FIRE_1:
70 return activate_ball_fire_1(player_ptr);
71 case RandomArtActType::BA_FIRE_2:
72 return activate_ball_fire_2(player_ptr, name);
73 case RandomArtActType::BA_FIRE_3:
74 return activate_ball_fire_3(player_ptr);
75 case RandomArtActType::BA_FIRE_4:
76 return activate_ball_fire_4(player_ptr);
77 case RandomArtActType::BA_ELEC_2:
78 return activate_ball_elec_2(player_ptr);
79 case RandomArtActType::BA_ELEC_3:
80 return activate_ball_elec_3(player_ptr);
81 case RandomArtActType::BA_ACID_1:
82 return activate_ball_acid_1(player_ptr);
83 case RandomArtActType::BA_NUKE_1:
84 return activate_ball_nuke_1(player_ptr);
85 case RandomArtActType::HYPODYNAMIA_1:
86 return activate_bolt_hypodynamia_1(player_ptr, name);
87 case RandomArtActType::HYPODYNAMIA_2:
88 return activate_bolt_hypodynamia_2(player_ptr);
89 case RandomArtActType::DRAIN_1:
90 return activate_bolt_drain_1(player_ptr);
91 case RandomArtActType::BO_MISS_2:
92 return activate_missile_2(player_ptr);
93 case RandomArtActType::WHIRLWIND:
94 return activate_whirlwind(player_ptr);
95 case RandomArtActType::DRAIN_2:
96 return activate_bolt_drain_2(player_ptr);
97 case RandomArtActType::CALL_CHAOS:
98 return activate_call_chaos(player_ptr);
99 case RandomArtActType::ROCKET:
100 return activate_rocket(player_ptr);
101 case RandomArtActType::DISP_EVIL:
102 return activate_dispel_evil(player_ptr);
103 case RandomArtActType::BA_MISS_3:
104 return activate_missile_3(player_ptr);
105 case RandomArtActType::DISP_GOOD:
106 return activate_dispel_good(player_ptr);
107 case RandomArtActType::BO_MANA:
108 return activate_bolt_mana(player_ptr, name);
109 case RandomArtActType::BA_WATER:
110 return activate_ball_water(player_ptr, name);
111 case RandomArtActType::BA_DARK:
112 return activate_ball_dark(player_ptr, name);
113 case RandomArtActType::BA_MANA:
114 return activate_ball_mana(player_ptr, name);
115 case RandomArtActType::PESTICIDE:
116 return activate_pesticide(player_ptr);
117 case RandomArtActType::BLINDING_LIGHT:
118 return activate_blinding_light(player_ptr, name);
119 case RandomArtActType::BIZARRE:
120 return activate_ring_of_power(player_ptr, name);
121 case RandomArtActType::CAST_BA_STAR:
122 return activate_ball_lite(player_ptr, name);
123 case RandomArtActType::BLADETURNER:
124 return activate_bladeturner(player_ptr);
125 case RandomArtActType::BR_FIRE:
126 return activate_breath_fire(player_ptr, o_ptr);
127 case RandomArtActType::BR_COLD:
128 return activate_breath_cold(player_ptr, o_ptr);
129 case RandomArtActType::BR_DRAGON:
130 return activate_dragon_breath(player_ptr, o_ptr);
131 case RandomArtActType::TREE_CREATION:
132 return activate_tree_creation(player_ptr, o_ptr, name);
133 case RandomArtActType::ANIM_DEAD:
134 return activate_animate_dead(player_ptr, o_ptr);
135 case RandomArtActType::CONFUSE:
136 return activate_confusion(player_ptr);
137 case RandomArtActType::SLEEP:
138 return activate_sleep(player_ptr);
139 case RandomArtActType::QUAKE:
140 return activate_earthquake(player_ptr);
141 case RandomArtActType::TERROR:
142 return activate_terror(player_ptr);
143 case RandomArtActType::TELE_AWAY:
144 return activate_teleport_away(player_ptr);
145 case RandomArtActType::BANISH_EVIL:
146 return activate_banish_evil(player_ptr);
147 case RandomArtActType::GENOCIDE:
148 return activate_genocide(player_ptr);
149 case RandomArtActType::MASS_GENO:
150 return activate_mass_genocide(player_ptr);
151 case RandomArtActType::SCARE_AREA:
152 return activate_scare(player_ptr);
153 case RandomArtActType::AGGRAVATE:
154 return activate_aggravation(player_ptr, o_ptr, name);
155 case RandomArtActType::CHARM_ANIMAL:
156 return activate_charm_animal(player_ptr);
157 case RandomArtActType::CHARM_UNDEAD:
158 return activate_charm_undead(player_ptr);
159 case RandomArtActType::CHARM_OTHER:
160 return activate_charm_other(player_ptr);
161 case RandomArtActType::CHARM_ANIMALS:
162 return activate_charm_animals(player_ptr);
163 case RandomArtActType::CHARM_OTHERS:
164 return activate_charm_others(player_ptr);
165 case RandomArtActType::SUMMON_ANIMAL:
166 (void)summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, player_ptr->lev, SUMMON_ANIMAL_RANGER, PM_ALLOW_GROUP | PM_FORCE_PET);
168 case RandomArtActType::SUMMON_PHANTOM:
169 msg_print(_("幻霊を召喚した。", "You summon a phantasmal servant."));
170 (void)summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_PHANTOM, PM_ALLOW_GROUP | PM_FORCE_PET);
172 case RandomArtActType::SUMMON_ELEMENTAL:
173 return cast_summon_elemental(player_ptr, (player_ptr->lev * 3) / 2);
174 case RandomArtActType::SUMMON_DEMON:
175 cast_summon_demon(player_ptr, (player_ptr->lev * 3) / 2);
177 case RandomArtActType::SUMMON_UNDEAD:
178 return cast_summon_undead(player_ptr, (player_ptr->lev * 3) / 2);
179 case RandomArtActType::SUMMON_HOUND:
180 return cast_summon_hound(player_ptr, (player_ptr->lev * 3) / 2);
181 case RandomArtActType::SUMMON_DAWN:
182 msg_print(_("暁の師団を召喚した。", "You summon the Legion of the Dawn."));
183 (void)summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_DAWN, PM_ALLOW_GROUP | PM_FORCE_PET);
185 case RandomArtActType::SUMMON_OCTOPUS:
186 return cast_summon_octopus(player_ptr);
187 case RandomArtActType::CHOIR_SINGS:
188 msg_print(_("天国の歌が聞こえる...", "A heavenly choir sings..."));
189 (void)cure_critical_wounds(player_ptr, 777);
190 (void)set_hero(player_ptr, randint1(25) + 25, false);
192 case RandomArtActType::CURE_LW:
193 return activate_cure_lw(player_ptr);
194 case RandomArtActType::CURE_MW:
195 msg_print(_("深紫色の光を発している...", "It radiates deep purple..."));
196 (void)cure_serious_wounds(player_ptr, 4, 8);
198 case RandomArtActType::CURE_POISON: {
199 msg_print(_("深青色に輝いている...", "It glows deep blue..."));
200 BadStatusSetter bss(player_ptr);
205 case RandomArtActType::REST_EXP:
206 msg_print(_("深紅に輝いている...", "It glows a deep red..."));
207 restore_level(player_ptr);
209 case RandomArtActType::REST_ALL:
210 msg_print(_("濃緑色に輝いている...", "It glows a deep green..."));
211 (void)restore_all_status(player_ptr);
212 (void)restore_level(player_ptr);
214 case RandomArtActType::CURE_700:
215 msg_print(_("深青色に輝いている...", "It glows deep blue..."));
216 msg_print(_("体内に暖かい鼓動が感じられる...", "You feel a warm tingling inside..."));
217 (void)cure_critical_wounds(player_ptr, 700);
219 case RandomArtActType::CURE_1000:
220 msg_print(_("白く明るく輝いている...", "It glows a bright white..."));
221 msg_print(_("ひじょうに気分がよい...", "You feel much better..."));
222 (void)cure_critical_wounds(player_ptr, 1000);
224 case RandomArtActType::CURING:
225 msg_format(_("%sの優しさに癒される...", "the %s cures you affectionately ..."), name);
226 true_healing(player_ptr, 0);
228 case RandomArtActType::CURE_MANA_FULL:
229 msg_format(_("%sが青白く光った...", "The %s glows palely..."), name);
230 restore_mana(player_ptr, true);
232 case RandomArtActType::ESP:
233 (void)set_tim_esp(player_ptr, randint1(30) + 25, false);
235 case RandomArtActType::BERSERK:
236 (void)berserk(player_ptr, randint1(25) + 25);
238 case RandomArtActType::PROT_EVIL:
239 msg_format(_("%sから鋭い音が流れ出た...", "The %s lets out a shrill wail..."), name);
240 (void)set_protevil(player_ptr, randint1(25) + player_ptr->lev * 3, false);
242 case RandomArtActType::RESIST_ALL:
243 return activate_resistance_elements(player_ptr);
244 case RandomArtActType::SPEED:
245 msg_print(_("明るく緑色に輝いている...", "It glows bright green..."));
246 (void)set_acceleration(player_ptr, randint1(20) + 20, false);
248 case RandomArtActType::MID_SPEED:
249 msg_print(_("明るく緑色に輝いている...", "It glows bright green..."));
250 (void)set_acceleration(player_ptr, randint1(50) + 50, false);
252 case RandomArtActType::XTRA_SPEED:
253 msg_print(_("明るく輝いている...", "It glows brightly..."));
254 (void)set_acceleration(player_ptr, randint1(75) + 75, false);
256 case RandomArtActType::WRAITH:
257 set_wraith_form(player_ptr, randint1(player_ptr->lev / 2) + (player_ptr->lev / 2), false);
259 case RandomArtActType::INVULN:
260 (void)set_invuln(player_ptr, randint1(8) + 8, false);
262 case RandomArtActType::HERO:
263 (void)heroism(player_ptr, 25);
265 case RandomArtActType::HERO_SPEED:
266 (void)set_acceleration(player_ptr, randint1(50) + 50, false);
267 (void)heroism(player_ptr, 50);
269 case RandomArtActType::ACID_BALL_AND_RESISTANCE:
270 return activate_acid_ball_and_resistance(player_ptr, name);
271 case RandomArtActType::FIRE_BALL_AND_RESISTANCE:
272 return activate_fire_ball_and_resistance(player_ptr, name);
273 case RandomArtActType::COLD_BALL_AND_RESISTANCE:
274 return activate_cold_ball_and_resistance(player_ptr, name);
275 case RandomArtActType::ELEC_BALL_AND_RESISTANCE:
276 return activate_elec_ball_and_resistance(player_ptr, name);
277 case RandomArtActType::POIS_BALL_AND_RESISTANCE:
278 return activate_pois_ball_and_resistance(player_ptr, name);
279 case RandomArtActType::RESIST_ACID:
280 return activate_resistance_acid(player_ptr, name);
281 case RandomArtActType::RESIST_FIRE:
282 return activate_resistance_fire(player_ptr, name);
283 case RandomArtActType::RESIST_COLD:
284 return activate_resistance_cold(player_ptr, name);
285 case RandomArtActType::RESIST_ELEC:
286 return activate_resistance_elec(player_ptr, name);
287 case RandomArtActType::RESIST_POIS:
288 return activate_resistance_pois(player_ptr, name);
289 case RandomArtActType::LIGHT:
290 return activate_light(player_ptr, name);
291 case RandomArtActType::MAP_LIGHT:
292 return activate_map_light(player_ptr);
293 case RandomArtActType::DETECT_ALL:
294 return activate_all_detection(player_ptr);
295 case RandomArtActType::DETECT_XTRA:
296 return activate_extra_detection(player_ptr);
297 case RandomArtActType::ID_FULL:
298 return activate_fully_identification(player_ptr);
299 case RandomArtActType::ID_PLAIN:
300 return activate_identification(player_ptr);
301 case RandomArtActType::RUNE_EXPLO:
302 return activate_exploding_rune(player_ptr);
303 case RandomArtActType::RUNE_PROT:
304 return activate_protection_rune(player_ptr);
305 case RandomArtActType::SATIATE:
306 (void)set_food(player_ptr, PY_FOOD_MAX - 1);
308 case RandomArtActType::DEST_DOOR:
309 return activate_door_destroy(player_ptr);
310 case RandomArtActType::STONE_MUD:
311 return activate_stone_mud(player_ptr);
312 case RandomArtActType::RECHARGE:
313 return activate_recharge(player_ptr);
314 case RandomArtActType::ALCHEMY:
315 msg_print(_("明るい黄色に輝いている...", "It glows bright yellow..."));
316 (void)alchemy(player_ptr);
318 case RandomArtActType::DIM_DOOR:
319 return activate_dimension_door(player_ptr);
320 case RandomArtActType::TELEPORT:
321 return activate_teleport(player_ptr);
322 case RandomArtActType::RECALL:
323 return activate_recall(player_ptr);
324 case RandomArtActType::JUDGE:
325 return activate_judgement(player_ptr, name);
326 case RandomArtActType::TELEKINESIS:
327 return activate_telekinesis(player_ptr, name);
328 case RandomArtActType::DETECT_UNIQUE:
329 return activate_unique_detection(player_ptr);
330 case RandomArtActType::ESCAPE:
331 return activate_escape(player_ptr);
332 case RandomArtActType::DISP_CURSE_XTRA:
333 return activate_dispel_curse(player_ptr, name);
334 case RandomArtActType::BRAND_FIRE_BOLTS:
335 msg_format(_("%sが深紅に輝いた...", "Your %s glows deep red..."), name);
336 brand_bolts(player_ptr);
338 case RandomArtActType::RECHARGE_XTRA:
339 return activate_recharge_extra(player_ptr, name);
340 case RandomArtActType::LORE:
341 return StoneOfLore(player_ptr).perilous_secrets();
342 case RandomArtActType::SHIKOFUMI:
343 return activate_shikofumi(player_ptr);
344 case RandomArtActType::PHASE_DOOR:
345 return activate_phase_door(player_ptr);
346 case RandomArtActType::DETECT_ALL_MONS:
347 return activate_all_monsters_detection(player_ptr);
348 case RandomArtActType::ULTIMATE_RESIST:
349 return activate_ultimate_resistance(player_ptr);
350 case RandomArtActType::ELBERETH:
351 return activate_protection_elbereth(player_ptr);
352 case RandomArtActType::DETECT_TREASURE:
353 return activate_detect_treasure(player_ptr);
354 case RandomArtActType::CAST_OFF:
355 (void)cosmic_cast_off(player_ptr, o_ptr_ptr);
357 case RandomArtActType::FALLING_STAR:
358 return activate_toragoroshi(player_ptr);
359 case RandomArtActType::GRAND_CROSS:
360 return activate_grand_cross(player_ptr);
361 case RandomArtActType::TELEPORT_LEVEL:
362 return activate_teleport_level(player_ptr);
363 case RandomArtActType::STRAIN_HASTE:
364 msg_format(_("%sはあなたの体力を奪った...", "The %s drains your vitality..."), name);
365 take_hit(player_ptr, DAMAGE_LOSELIFE, damroll(3, 8), _("加速した疲労", "the strain of haste"));
366 (void)mod_acceleration(player_ptr, 25 + randint1(25), false);
368 case RandomArtActType::FISHING:
369 return fishing(player_ptr);
370 case RandomArtActType::INROU:
371 mitokohmon(player_ptr);
373 case RandomArtActType::MURAMASA:
374 return activate_muramasa(player_ptr, o_ptr);
375 case RandomArtActType::BLOODY_MOON:
376 return activate_bloody_moon(player_ptr, o_ptr);
377 case RandomArtActType::CRIMSON:
378 return activate_crimson(player_ptr, o_ptr);
379 case RandomArtActType::HERO_BLESS:
380 (void)set_hero(player_ptr, randint1(25) + 25, false);
381 (void)set_blessed(player_ptr, randint1(25) + 25, true);
383 case RandomArtActType::CREATE_AMMO:
384 return activate_create_ammo(player_ptr);
385 case RandomArtActType::DISPEL_MAGIC:
386 return activate_dispel_magic(player_ptr);
388 msg_format(_("Unknown activation effect: %d.", "Unknown activation effect: %d."), act_ptr->index);