2 #include "effect-player-util.h"
3 #include "effect/effect-player-curse.h"
4 #include "effect/effect-player-switcher.h"
5 #include "effect/effect-player-oldies.h"
6 #include "effect/effect-player-resist-hurt.h"
7 #include "monster-spell.h"
8 #include "object-broken.h"
9 #include "object-curse.h"
10 #include "player-damage.h"
11 #include "player-effects.h"
12 #include "player/mimic-info-table.h"
13 #include "spell/spells-type.h"
16 void effect_player_mana(player_type *target_ptr, effect_player_type *ep_ptr) {
17 if (target_ptr->blind)
19 _("
\96\82\96@
\82Ì
\83I
\81[
\83\89\82Å
\8dU
\8c\82\82³
\82ê
\82½
\81I", "You are hit by an aura of magic!"));
21 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
22 ep_ptr->killer, ep_ptr->monspell);
25 void effect_player_psy_spear(player_type *target_ptr,
26 effect_player_type *ep_ptr) {
27 if (target_ptr->blind)
28 msg_print(_("
\83G
\83l
\83\8b\83M
\81[
\82Ì
\89ò
\82Å
\8dU
\8c\82\82³
\82ê
\82½
\81I", "You are hit by an energy!"));
30 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_FORCE, ep_ptr->dam,
31 ep_ptr->killer, ep_ptr->monspell);
34 void effect_player_meteor(player_type *target_ptr, effect_player_type *ep_ptr) {
35 if (target_ptr->blind)
36 msg_print(_("
\89½
\82©
\82ª
\8bó
\82©
\82ç
\82 \82È
\82½
\82Ì
\93ª
\8fã
\82É
\97\8e\82¿
\82Ä
\82«
\82½
\81I",
37 "Something falls from the sky on you!"));
39 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
40 ep_ptr->killer, ep_ptr->monspell);
41 if (!target_ptr->resist_shard || one_in_(13)) {
42 if (!target_ptr->immune_fire)
43 inventory_damage(target_ptr, set_fire_destroy, 2);
44 inventory_damage(target_ptr, set_cold_destroy, 2);
48 void effect_player_icee(player_type *target_ptr, effect_player_type *ep_ptr) {
49 if (target_ptr->blind)
50 msg_print(_("
\89½
\82©
\89s
\82
\97â
\82½
\82¢
\82à
\82Ì
\82Å
\8dU
\8c\82\82³
\82ê
\82½
\81I",
51 "You are hit by something sharp and cold!"));
53 ep_ptr->get_damage = cold_dam(target_ptr, ep_ptr->dam, ep_ptr->killer,
54 ep_ptr->monspell, FALSE);
55 if (CHECK_MULTISHADOW(target_ptr))
58 if (!target_ptr->resist_shard) {
59 (void)set_cut(target_ptr, target_ptr->cut + damroll(5, 8));
62 if (!target_ptr->resist_sound) {
63 (void)set_stun(target_ptr, target_ptr->stun + randint1(15));
66 if ((!(target_ptr->resist_cold || is_oppose_cold(target_ptr))) ||
68 if (!target_ptr->immune_cold)
69 inventory_damage(target_ptr, set_cold_destroy, 3);
73 void effect_player_death_ray(player_type *target_ptr,
74 effect_player_type *ep_ptr) {
75 if (target_ptr->blind)
76 msg_print(_("
\89½
\82©
\94ñ
\8fí
\82É
\97â
\82½
\82¢
\82à
\82Ì
\82Å
\8dU
\8c\82\82³
\82ê
\82½
\81I",
77 "You are hit by something extremely cold!"));
79 if (target_ptr->mimic_form) {
80 if (!(mimic_info[target_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING))
81 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
82 ep_ptr->killer, ep_ptr->monspell);
87 switch (target_ptr->prace) {
98 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
99 ep_ptr->killer, ep_ptr->monspell);
105 void effect_player_drain_mana(player_type *target_ptr,
106 effect_player_type *ep_ptr) {
107 if (CHECK_MULTISHADOW(target_ptr)) {
108 msg_print(_("
\8dU
\8c\82\82Í
\8c¶
\89e
\82É
\96½
\92\86\82µ
\81A
\82 \82È
\82½
\82É
\82Í
\93Í
\82©
\82È
\82©
\82Á
\82½
\81B",
109 "The attack hits Shadow, but you are unharmed!"));
114 if (target_ptr->csp == 0) {
120 msg_format(_("%^s
\82É
\90¸
\90_
\83G
\83l
\83\8b\83M
\81[
\82ð
\8bz
\82¢
\8eæ
\82ç
\82ê
\82Ä
\82µ
\82Ü
\82Á
\82½
\81I",
121 "%^s draws psychic energy from you!"),
124 msg_print(_("
\90¸
\90_
\83G
\83l
\83\8b\83M
\81[
\82ð
\8bz
\82¢
\8eæ
\82ç
\82ê
\82Ä
\82µ
\82Ü
\82Á
\82½
\81I",
125 "Your psychic energy is drawn!"));
127 if (ep_ptr->dam >= target_ptr->csp) {
128 ep_ptr->dam = target_ptr->csp;
130 target_ptr->csp_frac = 0;
132 target_ptr->csp -= ep_ptr->dam;
135 learn_spell(target_ptr, ep_ptr->monspell);
136 target_ptr->redraw |= (PR_MANA);
137 target_ptr->window |= (PW_PLAYER | PW_SPELL);
139 if ((ep_ptr->who <= 0) || (ep_ptr->m_ptr->hp >= ep_ptr->m_ptr->maxhp)) {
144 ep_ptr->m_ptr->hp += ep_ptr->dam;
145 if (ep_ptr->m_ptr->hp > ep_ptr->m_ptr->maxhp)
146 ep_ptr->m_ptr->hp = ep_ptr->m_ptr->maxhp;
148 if (target_ptr->health_who == ep_ptr->who)
149 target_ptr->redraw |= (PR_HEALTH);
150 if (target_ptr->riding == ep_ptr->who)
151 target_ptr->redraw |= (PR_UHEALTH);
153 if (ep_ptr->m_ptr->ml) {
154 msg_format(_("%^s
\82Í
\8bC
\95ª
\82ª
\97Ç
\82³
\82»
\82¤
\82¾
\81B", "%^s appears healthier."),
161 void effect_player_mind_blast(player_type *target_ptr,
162 effect_player_type *ep_ptr) {
163 if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) &&
164 !CHECK_MULTISHADOW(target_ptr)) {
165 msg_print(_("
\82µ
\82©
\82µ
\8cø
\97Í
\82ð
\92µ
\82Ë
\95Ô
\82µ
\82½
\81I", "You resist the effects!"));
166 learn_spell(target_ptr, ep_ptr->monspell);
170 if (CHECK_MULTISHADOW(target_ptr)) {
171 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
172 ep_ptr->killer, ep_ptr->monspell);
176 msg_print(_("
\97ì
\93I
\83G
\83l
\83\8b\83M
\81[
\82Å
\90¸
\90_
\82ª
\8dU
\8c\82\82³
\82ê
\82½
\81B",
177 "Your mind is blasted by psionic energy."));
178 if (!target_ptr->resist_conf) {
179 (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4);
182 if (!target_ptr->resist_chaos && one_in_(3)) {
183 (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150);
186 target_ptr->csp -= 50;
187 if (target_ptr->csp < 0) {
189 target_ptr->csp_frac = 0;
192 target_ptr->redraw |= PR_MANA;
193 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
194 ep_ptr->killer, ep_ptr->monspell);
197 void effect_player_brain_smash(player_type *target_ptr,
198 effect_player_type *ep_ptr) {
199 if ((randint0(100 + ep_ptr->rlev / 2) < MAX(5, target_ptr->skill_sav)) &&
200 !CHECK_MULTISHADOW(target_ptr)) {
201 msg_print(_("
\82µ
\82©
\82µ
\8cø
\97Í
\82ð
\92µ
\82Ë
\95Ô
\82µ
\82½
\81I", "You resist the effects!"));
202 learn_spell(target_ptr, ep_ptr->monspell);
206 if (!CHECK_MULTISHADOW(target_ptr)) {
207 msg_print(_("
\97ì
\93I
\83G
\83l
\83\8b\83M
\81[
\82Å
\90¸
\90_
\82ª
\8dU
\8c\82\82³
\82ê
\82½
\81B",
208 "Your mind is blasted by psionic energy."));
210 target_ptr->csp -= 100;
211 if (target_ptr->csp < 0) {
213 target_ptr->csp_frac = 0;
215 target_ptr->redraw |= PR_MANA;
218 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
219 ep_ptr->killer, ep_ptr->monspell);
220 if (CHECK_MULTISHADOW(target_ptr))
223 if (!target_ptr->resist_blind) {
224 (void)set_blind(target_ptr, target_ptr->blind + 8 + randint0(8));
227 if (!target_ptr->resist_conf) {
228 (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4);
231 if (!target_ptr->free_act) {
232 (void)set_paralyzed(target_ptr, target_ptr->paralyzed + randint0(4) + 4);
235 (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
237 while (randint0(100 + ep_ptr->rlev / 2) > (MAX(5, target_ptr->skill_sav)))
238 (void)do_dec_stat(target_ptr, A_INT);
239 while (randint0(100 + ep_ptr->rlev / 2) > (MAX(5, target_ptr->skill_sav)))
240 (void)do_dec_stat(target_ptr, A_WIS);
242 if (!target_ptr->resist_chaos) {
243 (void)set_image(target_ptr, target_ptr->image + randint0(250) + 150);
247 void effect_player_hand_doom(player_type *target_ptr,
248 effect_player_type *ep_ptr) {
249 if ((randint0(100 + ep_ptr->rlev / 2) < target_ptr->skill_sav) &&
250 !CHECK_MULTISHADOW(target_ptr)) {
251 msg_print(_("
\82µ
\82©
\82µ
\8cø
\97Í
\82ð
\92µ
\82Ë
\95Ô
\82µ
\82½
\81I", "You resist the effects!"));
252 learn_spell(target_ptr, ep_ptr->monspell);
254 if (!CHECK_MULTISHADOW(target_ptr)) {
255 msg_print(_("
\82 \82È
\82½
\82Í
\96½
\82ª
\94\96\82Ü
\82Á
\82Ä
\82¢
\82
\82æ
\82¤
\82É
\8a´
\82¶
\82½
\81I",
256 "You feel your life fade away!"));
257 curse_equipment(target_ptr, 40, 20);
260 ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam,
261 ep_ptr->m_name, ep_ptr->monspell);
263 if (target_ptr->chp < 1)
270 *
\96\82\96@
\82Ì
\8cø
\89Ê
\82É
\82æ
\82Á
\82Ä
\97l
\81X
\82È
\83\81\83b
\83Z
\81[
\82ð
\8fo
\97Í
\82µ
\82½
\82è
\97^
\82¦
\82é
\83_
\83\81\81[
\83W
\82Ì
\91\9d\8c¸
\82ð
\8ds
\82Á
\82½
\82è
\82·
\82é
271 * @param target_ptr
\83v
\83\8c\81[
\83\84\81[
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
272 * @param em_ptr
\83v
\83\8c\81[
\83\84\81[
\8cø
\89Ê
\8d\
\91¢
\91Ì
\82Ö
\82Ì
\8eQ
\8fÆ
\83|
\83C
\83\93\83^
275 void switch_effects_player(player_type *target_ptr,
276 effect_player_type *ep_ptr) {
277 switch (ep_ptr->effect_type) {
279 effect_player_elements(target_ptr, ep_ptr,
280 _("
\8e_
\82Å
\8dU
\8c\82\82³
\82ê
\82½
\81I", "You are hit by acid!"),
284 effect_player_elements(target_ptr, ep_ptr,
285 _("
\89Î
\89\8a\82Å
\8dU
\8c\82\82³
\82ê
\82½
\81I", "You are hit by fire!"),
289 effect_player_elements(target_ptr, ep_ptr,
290 _("
\97â
\8bC
\82Å
\8dU
\8c\82\82³
\82ê
\82½
\81I", "You are hit by cold!"),
294 effect_player_elements(target_ptr, ep_ptr,
295 _("
\93d
\8c\82\82Å
\8dU
\8c\82\82³
\82ê
\82½
\81I", "You are hit by lightning!"),
299 effect_player_poison(target_ptr, ep_ptr);
302 effect_player_nuke(target_ptr, ep_ptr);
305 effect_player_missile(target_ptr, ep_ptr);
308 effect_player_holy_fire(target_ptr, ep_ptr);
311 effect_player_hell_fire(target_ptr, ep_ptr);
314 effect_player_arrow(target_ptr, ep_ptr);
317 effect_player_plasma(target_ptr, ep_ptr);
320 effect_player_nether(target_ptr, ep_ptr);
323 effect_player_water(target_ptr, ep_ptr);
326 effect_player_chaos(target_ptr, ep_ptr);
329 effect_player_shards(target_ptr, ep_ptr);
332 effect_player_sound(target_ptr, ep_ptr);
335 effect_player_confusion(target_ptr, ep_ptr);
338 effect_player_disenchant(target_ptr, ep_ptr);
341 effect_player_nexus(target_ptr, ep_ptr);
344 effect_player_force(target_ptr, ep_ptr);
347 effect_player_rocket(target_ptr, ep_ptr);
350 effect_player_inertial(target_ptr, ep_ptr);
353 effect_player_lite(target_ptr, ep_ptr);
356 effect_player_dark(target_ptr, ep_ptr);
359 effect_player_time(target_ptr, ep_ptr);
362 effect_player_gravity(target_ptr, ep_ptr);
364 case GF_DISINTEGRATE:
365 effect_player_disintegration(target_ptr, ep_ptr);
368 effect_player_old_heal(target_ptr, ep_ptr);
371 effect_player_old_speed(target_ptr, ep_ptr);
374 effect_player_old_slow(target_ptr);
377 effect_player_old_sleep(target_ptr, ep_ptr);
382 effect_player_mana(target_ptr, ep_ptr);
385 effect_player_psy_spear(target_ptr, ep_ptr);
388 effect_player_meteor(target_ptr, ep_ptr);
391 effect_player_icee(target_ptr, ep_ptr);
394 effect_player_death_ray(target_ptr, ep_ptr);
397 effect_player_drain_mana(target_ptr, ep_ptr);
400 effect_player_mind_blast(target_ptr, ep_ptr);
403 effect_player_brain_smash(target_ptr, ep_ptr);
406 effect_player_curse_1(target_ptr, ep_ptr);
409 effect_player_curse_2(target_ptr, ep_ptr);
412 effect_player_curse_3(target_ptr, ep_ptr);
415 effect_player_curse_4(target_ptr, ep_ptr);
418 effect_player_hand_doom(target_ptr, ep_ptr);