OSDN Git Service

モンスターの呪い系ダメージ魔法をprojectで扱うようにし, EyeEyeの効果が呪い系
authorhenkma <henkma@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 28 Jul 2002 16:21:06 +0000 (16:21 +0000)
committerhenkma <henkma@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 28 Jul 2002 16:21:06 +0000 (16:21 +0000)
に対しても発動するようにした. ソースを大きく変える変更なのでこれは開発版のみ.

src/mspells1.c
src/spells1.c

index 81df737..0482542 100644 (file)
@@ -2616,43 +2616,7 @@ msg_format("%^s
                        }
 
                        dam = damroll(7, 7);
-                       if (randint0(100 + rlev/2) < (MAX(5, p_ptr->skill_sav)))
-                       {
-#ifdef JP
-msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
-#else
-                               msg_print("You resist the effects!");
-#endif
-                               learn_spell(MS_MIND_BLAST);
-                       }
-                       else
-                       {
-#ifdef JP
-msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£");
-#else
-                               msg_print("Your mind is blasted by psyonic energy.");
-#endif
-
-                               if (!p_ptr->resist_conf)
-                               {
-                                       (void)set_confused(p_ptr->confused + randint0(4) + 4);
-                               }
-
-                               if (!p_ptr->resist_chaos && one_in_(3))
-                               {
-                                       (void)set_image(p_ptr->image + randint0(250) + 150);
-                               }
-
-                               p_ptr->csp -= 50;
-                               if (p_ptr->csp < 0)
-                               {
-                                       p_ptr->csp = 0;
-                                       p_ptr->csp_frac = 0;
-                               }
-                               p_ptr->redraw |= PR_MANA;
-
-                               take_hit(DAMAGE_ATTACK, dam, ddesc, MS_MIND_BLAST);
-                       }
+                       breath(y, x, m_idx, GF_MIND_BLAST, dam, 0, FALSE, MS_MIND_BLAST, learnable);
                        break;
                }
 
@@ -2682,56 +2646,7 @@ msg_format("%^s
                        }
 
                        dam = damroll(12, 12);
-                       if (randint0(100 + rlev/2) < (MAX(5, p_ptr->skill_sav)))
-                       {
-#ifdef JP
-msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
-#else
-                               msg_print("You resist the effects!");
-#endif
-                               learn_spell(MS_BRAIN_SMASH);
-                       }
-                       else
-                       {
-#ifdef JP
-msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£");
-#else
-                               msg_print("Your mind is blasted by psionic energy.");
-#endif
-
-                               p_ptr->csp -= 100;
-                               if (p_ptr->csp < 0)
-                               {
-                                       p_ptr->csp = 0;
-                                       p_ptr->csp_frac = 0;
-                               }
-                               p_ptr->redraw |= PR_MANA;
-
-                               take_hit(DAMAGE_ATTACK, dam, ddesc, MS_BRAIN_SMASH);
-                               if (!p_ptr->resist_blind)
-                               {
-                                       (void)set_blind(p_ptr->blind + 8 + randint0(8));
-                               }
-                               if (!p_ptr->resist_conf)
-                               {
-                                       (void)set_confused(p_ptr->confused + randint0(4) + 4);
-                               }
-                               if (!p_ptr->free_act)
-                               {
-                                       (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
-                               }
-                               (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
-
-                               while (randint0(100 + rlev/2) > (MAX(5, p_ptr->skill_sav)))
-                                       (void)do_dec_stat(A_INT);
-                               while (randint0(100 + rlev/2) > (MAX(5, p_ptr->skill_sav)))
-                                       (void)do_dec_stat(A_WIS);
-
-                               if (!p_ptr->resist_chaos)
-                               {
-                                       (void)set_image(p_ptr->image + randint0(250) + 150);
-                               }
-                       }
+                       breath(y, x, m_idx, GF_BRAIN_SMASH, dam, 0, FALSE, MS_BRAIN_SMASH, learnable);
                        break;
                }
 
@@ -2754,20 +2669,7 @@ else msg_format("%^s
 #endif
 
                        dam = damroll(3, 8);
-                       if (randint0(100 + rlev/2) < p_ptr->skill_sav)
-                       {
-#ifdef JP
-msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
-#else
-                               msg_print("You resist the effects!");
-#endif
-                               learn_spell(MS_CAUSE_1);
-                       }
-                       else
-                       {
-                               curse_equipment(15, 0);
-                               take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_1);
-                       }
+                       breath(y, x, m_idx, GF_CAUSE_1, dam, 0, FALSE, MS_CAUSE_1, learnable);
                        break;
                }
 
@@ -2790,20 +2692,7 @@ else msg_format("%^s
 #endif
 
                        dam = damroll(8, 8);
-                       if (randint0(100 + rlev/2) < p_ptr->skill_sav)
-                       {
-#ifdef JP
-msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
-#else
-                               msg_print("You resist the effects!");
-#endif
-                               learn_spell(MS_CAUSE_2);
-                       }
-                       else
-                       {
-                               curse_equipment(25, MIN(rlev/2-15, 5));
-                               take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_2);
-                       }
+                       breath(y, x, m_idx, GF_CAUSE_2, dam, 0, FALSE, MS_CAUSE_2, learnable);
                        break;
                }
 
@@ -2826,20 +2715,7 @@ else msg_format("%^s
 #endif
 
                        dam = damroll(10, 15);
-                       if (randint0(100 + rlev/2) < p_ptr->skill_sav)
-                       {
-#ifdef JP
-msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
-#else
-                               msg_print("You resist the effects!");
-#endif
-                               learn_spell(MS_CAUSE_3);
-                       }
-                       else
-                       {
-                               curse_equipment(33, MIN(rlev/2-15, 15));
-                               take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_3);
-                       }
+                       breath(y, x, m_idx, GF_CAUSE_3, dam, 0, FALSE, MS_CAUSE_3, learnable);
                        break;
                }
 
@@ -2862,20 +2738,7 @@ else msg_format("%^s
 #endif
 
                        dam = damroll(15, 15);
-                       if ((randint0(100 + rlev/2) < p_ptr->skill_sav) && !(m_ptr->r_idx == MON_KENSHIROU))
-                       {
-#ifdef JP
-msg_print("¤·¤«¤·È빦¤òÄ·¤ÍÊÖ¤·¤¿¡ª");
-#else
-                               msg_print("You resist the effects!");
-#endif
-                               learn_spell(MS_CAUSE_4);
-                       }
-                       else
-                       {
-                               take_hit(DAMAGE_ATTACK, dam, ddesc, MS_CAUSE_4);
-                               (void)set_cut(p_ptr->cut + damroll(10, 10));
-                       }
+                       breath(y, x, m_idx, GF_CAUSE_4, dam, 0, FALSE, MS_CAUSE_4, learnable);
                        break;
                }
 
@@ -3403,31 +3266,8 @@ msg_format("%^s
 #else
                        msg_format("%^s invokes the Hand of Doom!", m_name);
 #endif
-
-                       if (randint0(100 + rlev/2) < p_ptr->skill_sav)
-                       {
-#ifdef JP
-msg_format("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
-#else
-                               msg_format("You resist the effects!");
-#endif
-                               learn_spell(MS_HAND_DOOM);
-
-                       }
-                       else
-                       {
-                               int dummy = (((s32b) ((40 + randint1(20)) * (p_ptr->chp))) / 100);
-#ifdef JP
-msg_print("¤¢¤Ê¤¿¤ÏÌ¿¤¬Çö¤Þ¤Ã¤Æ¤¤¤¯¤è¤¦¤Ë´¶¤¸¤¿¡ª");
-#else
-                               msg_print("Your feel your life fade away!");
-#endif
-
-                               take_hit(DAMAGE_ATTACK, dummy, m_name, MS_HAND_DOOM);
-                               curse_equipment(40, 20);
-
-                               if (p_ptr->chp < 1) p_ptr->chp = 1;
-                       }
+                       dam = (((s32b) ((40 + randint1(20)) * (p_ptr->chp))) / 100);
+                       breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, learnable);
                        break;
                }
 
@@ -3742,6 +3582,7 @@ msg_format("%^s
                                         else
                                         {
                                                 int dam = damroll(4, 8);
+                                               int get_damage = 0;
 #ifdef JP
                                                 msg_format("%^s¤¬¤¢¤Ê¤¿¤òÄϤó¤Ç¶õÃ椫¤éÅꤲÍ¤¿¡£", m_name);
 #else
@@ -3769,7 +3610,25 @@ msg_format("%^s
                                                         dam += damroll(6, 8);
                                                 }
 
-                                                take_hit(DAMAGE_NOESCAPE, dam, m_name, -1);
+                                               /* Mega hack -- this special action deals damage to the player. Therefore the code of "eyeeye" is necessary.
+                                                  -- henkma
+                                                */
+                                                get_damage = take_hit(DAMAGE_NOESCAPE, dam, m_name, -1);
+                                               if (p_ptr->tim_eyeeye && get_damage > 0 && !p_ptr->is_dead)
+                                               {
+#ifdef JP
+                                                       msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name);
+#else
+                                                       char m_name_self[80];
+               
+                                                       /* hisself */
+                                                       monster_desc(m_name_self, m_ptr, 0x23);
+
+                                                       msg_format("The attack of %s has wounded %s!", m_name, m_name_self);
+#endif
+                                                       project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL | PROJECT_NO_REF, -1);
+                                                       set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
+                                               }
                                         }
                                         break;
                                 }
index 36107e2..249392c 100644 (file)
@@ -6394,6 +6394,7 @@ msg_print("
 static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int typ, int a_rad, int monspell)
 {
        int k = 0;
+       int rlev;
 
        /* Hack -- assume obvious */
        bool obvious = TRUE;
@@ -6483,6 +6484,8 @@ else msg_print("
 
        /* Get the source monster */
        m_ptr = &m_list[who];
+       /* Extract the monster level */
+       rlev = (((&r_info[m_ptr->r_idx])->level >= 1) ? (&r_info[m_ptr->r_idx])->level : 1);
 
        /* Get the monster name */
        monster_desc(m_name, m_ptr, 0);
@@ -7467,6 +7470,207 @@ if (fuzzy) msg_print("
                        break;
                }
 
+               /* Mind blast */
+               case GF_MIND_BLAST:
+               {
+                       if (randint0(100 + rlev/2) < (MAX(5, p_ptr->skill_sav)))
+                       {
+#ifdef JP
+msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
+#else
+                               msg_print("You resist the effects!");
+#endif
+                               learn_spell(MS_MIND_BLAST);
+                       }
+                       else
+                       {
+#ifdef JP
+msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£");
+#else
+                               msg_print("Your mind is blasted by psyonic energy.");
+#endif
+
+                               if (!p_ptr->resist_conf)
+                               {
+                                       (void)set_confused(p_ptr->confused + randint0(4) + 4);
+                               }
+
+                               if (!p_ptr->resist_chaos && one_in_(3))
+                               {
+                                       (void)set_image(p_ptr->image + randint0(250) + 150);
+                               }
+
+                               p_ptr->csp -= 50;
+                               if (p_ptr->csp < 0)
+                               {
+                                       p_ptr->csp = 0;
+                                       p_ptr->csp_frac = 0;
+                               }
+                               p_ptr->redraw |= PR_MANA;
+
+                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, MS_MIND_BLAST);
+                       }
+                       break;
+               }
+               /* Brain smash */
+               case GF_BRAIN_SMASH:
+               {
+                       if (randint0(100 + rlev/2) < (MAX(5, p_ptr->skill_sav)))
+                       {
+#ifdef JP
+msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
+#else
+                               msg_print("You resist the effects!");
+#endif
+                               learn_spell(MS_BRAIN_SMASH);
+                       }
+                       else
+                       {
+#ifdef JP
+msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£");
+#else
+                               msg_print("Your mind is blasted by psionic energy.");
+#endif
+
+                               p_ptr->csp -= 100;
+                               if (p_ptr->csp < 0)
+                               {
+                                       p_ptr->csp = 0;
+                                       p_ptr->csp_frac = 0;
+                               }
+                               p_ptr->redraw |= PR_MANA;
+
+                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, MS_BRAIN_SMASH);
+                               if (!p_ptr->resist_blind)
+                               {
+                                       (void)set_blind(p_ptr->blind + 8 + randint0(8));
+                               }
+                               if (!p_ptr->resist_conf)
+                               {
+                                       (void)set_confused(p_ptr->confused + randint0(4) + 4);
+                               }
+                               if (!p_ptr->free_act)
+                               {
+                                       (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
+                               }
+                               (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
+
+                               while (randint0(100 + rlev/2) > (MAX(5, p_ptr->skill_sav)))
+                                       (void)do_dec_stat(A_INT);
+                               while (randint0(100 + rlev/2) > (MAX(5, p_ptr->skill_sav)))
+                                       (void)do_dec_stat(A_WIS);
+
+                               if (!p_ptr->resist_chaos)
+                               {
+                                       (void)set_image(p_ptr->image + randint0(250) + 150);
+                               }
+                       }
+                       break;
+               }
+               /* cause 1 */
+               case GF_CAUSE_1:
+               {
+                       if (randint0(100 + rlev/2) < p_ptr->skill_sav)
+                       {
+#ifdef JP
+msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
+#else
+                               msg_print("You resist the effects!");
+#endif
+                               learn_spell(MS_CAUSE_1);
+                       }
+                       else
+                       {
+                               curse_equipment(15, 0);
+                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, MS_CAUSE_1);
+                       }
+                       break;
+               }
+               /* cause 2 */
+               case GF_CAUSE_2:
+               {
+                       if (randint0(100 + rlev/2) < p_ptr->skill_sav)
+                       {
+#ifdef JP
+msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
+#else
+                               msg_print("You resist the effects!");
+#endif
+                               learn_spell(MS_CAUSE_2);
+                       }
+                       else
+                       {
+                               curse_equipment(25, MIN(rlev/2-15, 5));
+                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, MS_CAUSE_2);
+                       }
+                       break;
+               }
+               /* cause 3 */
+               case GF_CAUSE_3:
+               {
+                       if (randint0(100 + rlev/2) < p_ptr->skill_sav)
+                       {
+#ifdef JP
+msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
+#else
+                               msg_print("You resist the effects!");
+#endif
+                               learn_spell(MS_CAUSE_3);
+                       }
+                       else
+                       {
+                               curse_equipment(33, MIN(rlev/2-15, 15));
+                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, MS_CAUSE_3);
+                       }
+                       break;
+               }
+               /* cause 4 */
+               case GF_CAUSE_4:
+               {
+                       if ((randint0(100 + rlev/2) < p_ptr->skill_sav) && !(m_ptr->r_idx == MON_KENSHIROU))
+                       {
+#ifdef JP
+msg_print("¤·¤«¤·È빦¤òÄ·¤ÍÊÖ¤·¤¿¡ª");
+#else
+                               msg_print("You resist the effects!");
+#endif
+                               learn_spell(MS_CAUSE_4);
+                       }
+                       else
+                       {
+                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, MS_CAUSE_4);
+                               (void)set_cut(p_ptr->cut + damroll(10, 10));
+                       }
+                       break;
+               }
+               /* Hand of Doom */
+               case GF_HAND_DOOM:
+               {
+                       if (randint0(100 + rlev/2) < p_ptr->skill_sav)
+                       {
+#ifdef JP
+msg_format("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
+#else
+                               msg_format("You resist the effects!");
+#endif
+                               learn_spell(MS_HAND_DOOM);
+
+                       }
+                       else
+                       {
+#ifdef JP
+msg_print("¤¢¤Ê¤¿¤ÏÌ¿¤¬Çö¤Þ¤Ã¤Æ¤¤¤¯¤è¤¦¤Ë´¶¤¸¤¿¡ª");
+#else
+                               msg_print("Your feel your life fade away!");
+#endif
+
+                               get_damage = take_hit(DAMAGE_ATTACK, dam, m_name, MS_HAND_DOOM);
+                               curse_equipment(40, 20);
+
+                               if (p_ptr->chp < 1) p_ptr->chp = 1;
+                       }
+                       break;
+               }
 
                /* Default */
                default: