OSDN Git Service

[Refactor] #40466 Separated element-resistance.c/h from player-effects.c/h
[hengband/hengband.git] / src / effect / effect-player-resist-hurt.c
1 #include "effect/effect-player-resist-hurt.h"
2 #include "art-definition/art-sword-types.h"
3 #include "inventory/inventory-damage.h"
4 #include "mind/mind-mirror-master.h"
5 #include "monster-race/race-indice-types.h"
6 #include "mspell/mspells3.h"
7 #include "mutation/mutation.h"
8 #include "object/object-broken.h"
9 #include "status/bad-status-setter.h"
10 #include "player/player-damage.h"
11 #include "player/player-effects.h"
12 #include "player/player-race-types.h"
13 #include "player/player-race.h"
14 #include "spell-kind/spells-teleport.h"
15 #include "spell/spells-status.h"
16 #include "spell/spells3.h"
17 #include "status/element-resistance.h"
18 #include "system/object-type-definition.h"
19 #include "view/display-messages.h"
20 #include "world/world.h"
21
22 // 毒を除く4元素.
23 void effect_player_elements(
24     player_type *target_ptr, effect_player_type *ep_ptr, concptr attack_message, HIT_POINT (*damage_func)(player_type *, HIT_POINT, concptr, int, bool))
25 {
26     if (target_ptr->blind)
27         msg_print(attack_message);
28
29     ep_ptr->get_damage = (*damage_func)(target_ptr, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell, FALSE);
30 }
31
32 void effect_player_poison(player_type *target_ptr, effect_player_type *ep_ptr)
33 {
34     bool double_resist = is_oppose_pois(target_ptr);
35     if (target_ptr->blind)
36         msg_print(_("毒で攻撃された!", "You are hit by poison!"));
37
38     if (target_ptr->resist_pois)
39         ep_ptr->dam = (ep_ptr->dam + 2) / 3;
40     if (double_resist)
41         ep_ptr->dam = (ep_ptr->dam + 2) / 3;
42
43     if ((!(double_resist || target_ptr->resist_pois)) && one_in_(HURT_CHANCE) && !check_multishadow(target_ptr)) {
44         do_dec_stat(target_ptr, A_CON);
45     }
46
47     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
48
49     if (!(double_resist || target_ptr->resist_pois) && !check_multishadow(target_ptr))
50         set_poisoned(target_ptr, target_ptr->poisoned + randint0(ep_ptr->dam) + 10);
51 }
52
53 void effect_player_nuke(player_type *target_ptr, effect_player_type *ep_ptr)
54 {
55     bool double_resist = is_oppose_pois(target_ptr);
56     if (target_ptr->blind)
57         msg_print(_("放射能で攻撃された!", "You are hit by radiation!"));
58
59     if (target_ptr->resist_pois)
60         ep_ptr->dam = (2 * ep_ptr->dam + 2) / 5;
61     if (double_resist)
62         ep_ptr->dam = (2 * ep_ptr->dam + 2) / 5;
63
64     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
65     if ((double_resist || target_ptr->resist_pois) || check_multishadow(target_ptr))
66         return;
67
68     set_poisoned(target_ptr, target_ptr->poisoned + randint0(ep_ptr->dam) + 10);
69     if (one_in_(5)) /* 6 */
70     {
71         msg_print(_("奇形的な変身を遂げた!", "You undergo a freakish metamorphosis!"));
72         if (one_in_(4)) /* 4 */
73             do_poly_self(target_ptr);
74         else
75             status_shuffle(target_ptr);
76     }
77
78     if (one_in_(6))
79         inventory_damage(target_ptr, set_acid_destroy, 2);
80 }
81
82 void effect_player_missile(player_type *target_ptr, effect_player_type *ep_ptr)
83 {
84     if (target_ptr->blind)
85         msg_print(_("何かで攻撃された!", "You are hit by something!"));
86
87     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
88 }
89
90 void effect_player_holy_fire(player_type *target_ptr, effect_player_type *ep_ptr)
91 {
92     if (target_ptr->blind)
93         msg_print(_("何かで攻撃された!", "You are hit by something!"));
94
95     if (target_ptr->align > 10)
96         ep_ptr->dam /= 2;
97     else if (target_ptr->align < -10)
98         ep_ptr->dam *= 2;
99
100     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
101 }
102
103 void effect_player_hell_fire(player_type *target_ptr, effect_player_type *ep_ptr)
104 {
105     if (target_ptr->blind)
106         msg_print(_("何かで攻撃された!", "You are hit by something!"));
107
108     if (target_ptr->align > 10)
109         ep_ptr->dam *= 2;
110
111     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
112 }
113
114 void effect_player_arrow(player_type *target_ptr, effect_player_type *ep_ptr)
115 {
116     if (target_ptr->blind) {
117         msg_print(_("何か鋭いもので攻撃された!", "You are hit by something sharp!"));
118         ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
119         return;
120     }
121
122     if ((target_ptr->inventory_list[INVEN_RARM].name1 == ART_ZANTETSU) || (target_ptr->inventory_list[INVEN_LARM].name1 == ART_ZANTETSU)) {
123         msg_print(_("矢を斬り捨てた!", "You cut down the arrow!"));
124         return;
125     }
126
127     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
128 }
129
130 void effect_player_plasma(player_type *target_ptr, effect_player_type *ep_ptr)
131 {
132     if (target_ptr->blind)
133         msg_print(_("何かとても熱いもので攻撃された!", "You are hit by something *HOT*!"));
134
135     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
136
137     if (!target_ptr->resist_sound && !check_multishadow(target_ptr)) {
138         int plus_stun = (randint1((ep_ptr->dam > 40) ? 35 : (ep_ptr->dam * 3 / 4 + 5)));
139         (void)set_stun(target_ptr, target_ptr->stun + plus_stun);
140     }
141
142     if (!(target_ptr->resist_fire || is_oppose_fire(target_ptr) || target_ptr->immune_fire))
143         inventory_damage(target_ptr, set_acid_destroy, 3);
144 }
145
146 void effect_player_nether(player_type *target_ptr, effect_player_type *ep_ptr)
147 {
148     if (target_ptr->blind)
149         msg_print(_("地獄の力で攻撃された!", "You are hit by nether forces!"));
150
151     if (target_ptr->resist_neth) {
152         if (!is_specific_player_race(target_ptr, RACE_SPECTRE))
153             ep_ptr->dam *= 6;
154         ep_ptr->dam /= (randint1(4) + 7);
155     } else if (!check_multishadow(target_ptr))
156         drain_exp(target_ptr, 200 + (target_ptr->exp / 100), 200 + (target_ptr->exp / 1000), 75);
157
158     if (!is_specific_player_race(target_ptr, RACE_SPECTRE) || check_multishadow(target_ptr)) {
159         ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
160         return;
161     }
162
163     msg_print(_("気分がよくなった。", "You feel invigorated!"));
164     hp_player(target_ptr, ep_ptr->dam / 4);
165     learn_spell(target_ptr, ep_ptr->monspell);
166 }
167
168 void effect_player_water(player_type *target_ptr, effect_player_type *ep_ptr)
169 {
170     if (target_ptr->blind)
171         msg_print(_("何か湿ったもので攻撃された!", "You are hit by something wet!"));
172     if (check_multishadow(target_ptr)) {
173         ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
174         return;
175     }
176
177     if (!target_ptr->resist_sound && !target_ptr->resist_water) {
178         set_stun(target_ptr, target_ptr->stun + randint1(40));
179     }
180     if (!target_ptr->resist_conf && !target_ptr->resist_water) {
181         set_confused(target_ptr, target_ptr->confused + randint1(5) + 5);
182     }
183
184     if (one_in_(5) && !target_ptr->resist_water) {
185         inventory_damage(target_ptr, set_cold_destroy, 3);
186     }
187
188     if (target_ptr->resist_water)
189         ep_ptr->get_damage /= 4;
190
191     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
192 }
193
194 void effect_player_chaos(player_type *target_ptr, effect_player_type *ep_ptr)
195 {
196     if (target_ptr->blind)
197         msg_print(_("無秩序の波動で攻撃された!", "You are hit by a wave of anarchy!"));
198     if (target_ptr->resist_chaos) {
199         ep_ptr->dam *= 6;
200         ep_ptr->dam /= (randint1(4) + 7);
201     }
202
203     if (check_multishadow(target_ptr)) {
204         ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
205         return;
206     }
207
208     if (!target_ptr->resist_conf) {
209         (void)set_confused(target_ptr, target_ptr->confused + randint0(20) + 10);
210     }
211     if (!target_ptr->resist_chaos) {
212         (void)set_image(target_ptr, target_ptr->image + randint1(10));
213         if (one_in_(3)) {
214             msg_print(_("あなたの身体はカオスの力で捻じ曲げられた!", "Your body is twisted by chaos!"));
215             (void)gain_mutation(target_ptr, 0);
216         }
217     }
218     if (!target_ptr->resist_neth && !target_ptr->resist_chaos) {
219         drain_exp(target_ptr, 5000 + (target_ptr->exp / 100), 500 + (target_ptr->exp / 1000), 75);
220     }
221
222     if (!target_ptr->resist_chaos || one_in_(9)) {
223         inventory_damage(target_ptr, set_elec_destroy, 2);
224         inventory_damage(target_ptr, set_fire_destroy, 2);
225     }
226
227     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
228 }
229
230 void effect_player_shards(player_type *target_ptr, effect_player_type *ep_ptr)
231 {
232     if (target_ptr->blind)
233         msg_print(_("何か鋭いもので攻撃された!", "You are hit by something sharp!"));
234     if (target_ptr->resist_shard) {
235         ep_ptr->dam *= 6;
236         ep_ptr->dam /= (randint1(4) + 7);
237     } else if (!check_multishadow(target_ptr)) {
238         (void)set_cut(target_ptr, target_ptr->cut + ep_ptr->dam);
239     }
240
241     if (!target_ptr->resist_shard || one_in_(13))
242         inventory_damage(target_ptr, set_cold_destroy, 2);
243
244     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
245 }
246
247 void effect_player_sound(player_type *target_ptr, effect_player_type *ep_ptr)
248 {
249     if (target_ptr->blind)
250         msg_print(_("轟音で攻撃された!", "You are hit by a loud noise!"));
251     if (target_ptr->resist_sound) {
252         ep_ptr->dam *= 5;
253         ep_ptr->dam /= (randint1(4) + 7);
254     } else if (!check_multishadow(target_ptr)) {
255         int plus_stun = (randint1((ep_ptr->dam > 90) ? 35 : (ep_ptr->dam / 3 + 5)));
256         (void)set_stun(target_ptr, target_ptr->stun + plus_stun);
257     }
258
259     if (!target_ptr->resist_sound || one_in_(13))
260         inventory_damage(target_ptr, set_cold_destroy, 2);
261
262     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
263 }
264
265 void effect_player_confusion(player_type *target_ptr, effect_player_type *ep_ptr)
266 {
267     if (target_ptr->blind)
268         msg_print(_("何か混乱するもので攻撃された!", "You are hit by something puzzling!"));
269     if (target_ptr->resist_conf) {
270         ep_ptr->dam *= 5;
271         ep_ptr->dam /= (randint1(4) + 7);
272     } else if (!check_multishadow(target_ptr)) {
273         (void)set_confused(target_ptr, target_ptr->confused + randint1(20) + 10);
274     }
275
276     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
277 }
278
279 void effect_player_disenchant(player_type *target_ptr, effect_player_type *ep_ptr)
280 {
281     if (target_ptr->blind)
282         msg_print(_("何かさえないもので攻撃された!", "You are hit by something static!"));
283     if (target_ptr->resist_disen) {
284         ep_ptr->dam *= 6;
285         ep_ptr->dam /= (randint1(4) + 7);
286     } else if (!check_multishadow(target_ptr)) {
287         (void)apply_disenchant(target_ptr, 0);
288     }
289
290     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
291 }
292
293 void effect_player_nexus(player_type *target_ptr, effect_player_type *ep_ptr)
294 {
295     if (target_ptr->blind)
296         msg_print(_("何か奇妙なもので攻撃された!", "You are hit by something strange!"));
297     if (target_ptr->resist_nexus) {
298         ep_ptr->dam *= 6;
299         ep_ptr->dam /= (randint1(4) + 7);
300     } else if (!check_multishadow(target_ptr)) {
301         apply_nexus(ep_ptr->m_ptr, target_ptr);
302     }
303
304     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
305 }
306
307 void effect_player_force(player_type *target_ptr, effect_player_type *ep_ptr)
308 {
309     if (target_ptr->blind)
310         msg_print(_("運動エネルギーで攻撃された!", "You are hit by kinetic force!"));
311     if (!target_ptr->resist_sound && !check_multishadow(target_ptr)) {
312         (void)set_stun(target_ptr, target_ptr->stun + randint1(20));
313     }
314
315     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
316 }
317
318 void effect_player_rocket(player_type *target_ptr, effect_player_type *ep_ptr)
319 {
320     if (target_ptr->blind)
321         msg_print(_("爆発があった!", "There is an explosion!"));
322     if (!target_ptr->resist_sound && !check_multishadow(target_ptr)) {
323         (void)set_stun(target_ptr, target_ptr->stun + randint1(20));
324     }
325
326     if (target_ptr->resist_shard) {
327         ep_ptr->dam /= 2;
328     } else if (!check_multishadow(target_ptr)) {
329         (void)set_cut(target_ptr, target_ptr->cut + (ep_ptr->dam / 2));
330     }
331
332     if (!target_ptr->resist_shard || one_in_(12)) {
333         inventory_damage(target_ptr, set_cold_destroy, 3);
334     }
335
336     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
337 }
338
339 void effect_player_inertial(player_type *target_ptr, effect_player_type *ep_ptr)
340 {
341     if (target_ptr->blind)
342         msg_print(_("何か遅いもので攻撃された!", "You are hit by something slow!"));
343     if (!check_multishadow(target_ptr))
344         (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
345
346     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
347 }
348
349 void effect_player_lite(player_type *target_ptr, effect_player_type *ep_ptr)
350 {
351     if (target_ptr->blind)
352         msg_print(_("何かで攻撃された!", "You are hit by something!"));
353     if (target_ptr->resist_lite) {
354         ep_ptr->dam *= 4;
355         ep_ptr->dam /= (randint1(4) + 7);
356     } else if (!target_ptr->blind && !target_ptr->resist_blind && !check_multishadow(target_ptr)) {
357         (void)set_blind(target_ptr, target_ptr->blind + randint1(5) + 2);
358     }
359
360     if (is_specific_player_race(target_ptr, RACE_VAMPIRE) || (target_ptr->mimic_form == MIMIC_VAMPIRE)) {
361         if (!check_multishadow(target_ptr))
362             msg_print(_("光で肉体が焦がされた!", "The light scorches your flesh!"));
363         ep_ptr->dam *= 2;
364     } else if (is_specific_player_race(target_ptr, RACE_S_FAIRY)) {
365         ep_ptr->dam = ep_ptr->dam * 4 / 3;
366     }
367
368     if (target_ptr->wraith_form)
369         ep_ptr->dam *= 2;
370     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
371
372     if (!target_ptr->wraith_form || check_multishadow(target_ptr))
373         return;
374
375     target_ptr->wraith_form = 0;
376     msg_print(_("閃光のため非物質的な影の存在でいられなくなった。", "The light forces you out of your incorporeal shadow form."));
377
378     target_ptr->redraw |= (PR_MAP | PR_STATUS);
379     target_ptr->update |= (PU_MONSTERS);
380     target_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
381 }
382
383 void effect_player_dark(player_type *target_ptr, effect_player_type *ep_ptr)
384 {
385     if (target_ptr->blind)
386         msg_print(_("何かで攻撃された!", "You are hit by something!"));
387     if (target_ptr->resist_dark) {
388         ep_ptr->dam *= 4;
389         ep_ptr->dam /= (randint1(4) + 7);
390
391         if (is_specific_player_race(target_ptr, RACE_VAMPIRE) || (target_ptr->mimic_form == MIMIC_VAMPIRE) || target_ptr->wraith_form)
392             ep_ptr->dam = 0;
393     } else if (!target_ptr->blind && !target_ptr->resist_blind && !check_multishadow(target_ptr)) {
394         (void)set_blind(target_ptr, target_ptr->blind + randint1(5) + 2);
395     }
396
397     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
398 }
399
400 static void effect_player_time_one_disability(player_type *target_ptr)
401 {
402     int k = 0;
403     concptr act = NULL;
404     switch (randint1(6)) {
405     case 1:
406         k = A_STR;
407         act = _("強く", "strong");
408         break;
409     case 2:
410         k = A_INT;
411         act = _("聡明で", "bright");
412         break;
413     case 3:
414         k = A_WIS;
415         act = _("賢明で", "wise");
416         break;
417     case 4:
418         k = A_DEX;
419         act = _("器用で", "agile");
420         break;
421     case 5:
422         k = A_CON;
423         act = _("健康で", "hale");
424         break;
425     case 6:
426         k = A_CHR;
427         act = _("美しく", "beautiful");
428         break;
429     }
430
431     msg_format(_("あなたは以前ほど%sなくなってしまった...。", "You're not as %s as you used to be..."), act);
432     target_ptr->stat_cur[k] = (target_ptr->stat_cur[k] * 3) / 4;
433     if (target_ptr->stat_cur[k] < 3)
434         target_ptr->stat_cur[k] = 3;
435
436     target_ptr->update |= (PU_BONUS);
437 }
438
439 static void effect_player_time_all_disabilities(player_type *target_ptr)
440 {
441     msg_print(_("あなたは以前ほど力強くなくなってしまった...。", "You're not as powerful as you used to be..."));
442     for (int k = 0; k < A_MAX; k++) {
443         target_ptr->stat_cur[k] = (target_ptr->stat_cur[k] * 7) / 8;
444         if (target_ptr->stat_cur[k] < 3)
445             target_ptr->stat_cur[k] = 3;
446     }
447
448     target_ptr->update |= (PU_BONUS);
449 }
450
451 static void effect_player_time_addition(player_type *target_ptr)
452 {
453     switch (randint1(10)) {
454     case 1:
455     case 2:
456     case 3:
457     case 4:
458     case 5: {
459         if (target_ptr->prace == RACE_ANDROID)
460             break;
461
462         msg_print(_("人生が逆戻りした気がする。", "You feel like a chunk of the past has been ripped away."));
463         lose_exp(target_ptr, 100 + (target_ptr->exp / 100) * MON_DRAIN_LIFE);
464         break;
465     }
466     case 6:
467     case 7:
468     case 8:
469     case 9:
470         effect_player_time_one_disability(target_ptr);
471         break;
472     case 10:
473         effect_player_time_all_disabilities(target_ptr);
474         break;
475     }
476 }
477
478 void effect_player_time(player_type *target_ptr, effect_player_type *ep_ptr)
479 {
480     if (target_ptr->blind)
481         msg_print(_("過去からの衝撃に攻撃された!", "You are hit by a blast from the past!"));
482
483     if (target_ptr->resist_time) {
484         ep_ptr->dam *= 4;
485         ep_ptr->dam /= (randint1(4) + 7);
486         msg_print(_("時間が通り過ぎていく気がする。", "You feel as if time is passing you by."));
487         ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
488         return;
489     }
490
491     if (check_multishadow(target_ptr)) {
492         ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
493         return;
494     }
495
496     effect_player_time_addition(target_ptr);
497     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
498 }
499
500 void effect_player_gravity(player_type *target_ptr, effect_player_type *ep_ptr)
501 {
502     if (target_ptr->blind)
503         msg_print(_("何か重いもので攻撃された!", "You are hit by something heavy!"));
504     msg_print(_("周辺の重力がゆがんだ。", "Gravity warps around you."));
505
506     if (!check_multishadow(target_ptr)) {
507         teleport_player(target_ptr, 5, TELEPORT_PASSIVE);
508         if (!target_ptr->levitation)
509             (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
510         if (!(target_ptr->resist_sound || target_ptr->levitation)) {
511             int plus_stun = (randint1((ep_ptr->dam > 90) ? 35 : (ep_ptr->dam / 3 + 5)));
512             (void)set_stun(target_ptr, target_ptr->stun + plus_stun);
513         }
514     }
515
516     if (target_ptr->levitation) {
517         ep_ptr->dam = (ep_ptr->dam * 2) / 3;
518     }
519
520     if (!target_ptr->levitation || one_in_(13)) {
521         inventory_damage(target_ptr, set_cold_destroy, 2);
522     }
523
524     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
525 }
526
527 void effect_player_disintegration(player_type *target_ptr, effect_player_type *ep_ptr)
528 {
529     if (target_ptr->blind)
530         msg_print(_("純粋なエネルギーで攻撃された!", "You are hit by pure energy!"));
531
532     ep_ptr->get_damage = take_hit(target_ptr, DAMAGE_ATTACK, ep_ptr->dam, ep_ptr->killer, ep_ptr->monspell);
533 }