/* File: spells2.c */
-/* Purpose: Spell code (part 2) */
-
/*
- * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
+ * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
*
- * This software may be copied and distributed for educational, research, and
- * not for profit purposes provided that this copyright and statement are
- * included in all such copies.
+ * This software may be copied and distributed for educational, research,
+ * and not for profit purposes provided that this copyright and statement
+ * are included in all such copies. Other copyrights may also apply.
*/
+/* Purpose: Spell code (part 2) */
+
#include "angband.h"
+#include "grid.h"
/*
char v_string [8] [128];
char s_string [6] [128];
- u32b f1 = 0L, f2 = 0L, f3 = 0L;
+ u32b flgs[TR_FLAG_SIZE];
object_type *o_ptr;
int percent;
+ for (j = 0; j < TR_FLAG_SIZE; j++)
+ flgs[j] = 0L;
+
p_ptr->knowledge |= (KNOW_STAT | KNOW_HPRATE);
strcpy(Dummy, "");
- percent = (int)(((long)player_hp[PY_MAX_LEVEL - 1] * 200L) /
+ percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) /
(2 * p_ptr->hitdie +
((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1))));
/* Acquire item flags from equipment */
for (k = INVEN_RARM; k < INVEN_TOTAL; k++)
{
- u32b t1, t2, t3;
+ u32b tflgs[TR_FLAG_SIZE];
o_ptr = &inventory[k];
if (!o_ptr->k_idx) continue;
/* Extract the flags */
- object_flags(o_ptr, &t1, &t2, &t3);
+ object_flags(o_ptr, tflgs);
/* Extract flags */
- f1 |= t1;
- f2 |= t2;
- f3 |= t3;
+ for (j = 0; j < TR_FLAG_SIZE; j++)
+ flgs[j] |= tflgs[j];
}
#ifdef JP
}
break;
case CLASS_PRIEST:
- if (p_ptr->realm1 == REALM_LIFE)
+ if (is_good_realm(p_ptr->realm1))
{
if (plev > 34)
{
}
break;
case CLASS_PALADIN:
- if (p_ptr->realm1 == REALM_LIFE)
+ if (is_good_realm(p_ptr->realm1))
{
if (plev > 29)
{
}
break;
case CLASS_BERSERKER:
- if (plev > 4)
- {
-#ifdef JP
-info[i++] = "¤¢¤Ê¤¿¤Ï¼«Ê¬¤Ç¶õÊ¢¤òËþ¤¿¤¹¤³¤È¤¬¤Ç¤¤ë¡£";
-#else
- info[i++] = "You can satisfy hunger.";
-#endif
- }
if (plev > 9)
{
#ifdef JP
#endif
break;
case CLASS_NINJA:
- if (plev > 7)
+ if (plev > 19)
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÏÁÇÁ᤯°ÜÆ°¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
#endif
}
- if (((p_ptr->muta3 & MUT3_VULN_ELEM) || (p_ptr->special_defense & KATA_KOUKIJIN))
- && !(p_ptr->immune_acid && p_ptr->immune_elec && p_ptr->immune_fire && p_ptr->immune_cold))
+ if (p_ptr->muta3 & MUT3_VULN_ELEM)
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¸µÁǤι¶·â¤Ë¼å¤¤¡£";
#endif
}
- if (p_ptr->aggravate)
+ if (p_ptr->cursed & TRC_TY_CURSE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤Ê±åÇ°¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You carry an ancient foul curse.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_AGGRAVATE)
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤Æ¤¤¤ë¡£";
#endif
}
- if (p_ptr->teleport)
+ if (p_ptr->cursed & TRC_DRAIN_EXP)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï·Ð¸³ÃͤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You are drained.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_SLOW_REGEN)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Î²óÉüÎϤÏÈó¾ï¤ËÃÙ¤¤¡£";
+#else
+ info[i++] = "You regenerate slowly.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_ADD_L_CURSE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Î¼å¤¤¼ö¤¤¤ÏÁý¤¨¤ë¡£"; /* »ÃÄêŪ -- henkma */
+#else
+ info[i++] = "Your weak curses multiply.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_ADD_H_CURSE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Î¶¯¤¤¼ö¤¤¤ÏÁý¤¨¤ë¡£"; /* »ÃÄêŪ -- henkma */
+#else
+ info[i++] = "Your heavy curses multiply.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_CALL_ANIMAL)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ïưʪ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You attract animals.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_CALL_DEMON)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï°Ëâ¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You attract demons.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_CALL_DRAGON)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤ËÁÀ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You attract dragons.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_COWARDICE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï»þ¡¹²²É¤ˤʤ롣";
+#else
+ info[i++] = "You are subject to cowardice.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_TELEPORT)
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î°ÌÃ֤ϤҤ¸¤ç¤¦¤ËÉÔ°ÂÄê¤À¡£";
#endif
}
- if (p_ptr->blessed)
+ if (p_ptr->cursed & TRC_LOW_MELEE)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¹¶·â¤ò³°¤·¤ä¤¹¤¤¡£";
+#else
+ info[i++] = "Your weapon causes you to miss blows.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_LOW_AC)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¹¶·â¤ò¼õ¤±¤ä¤¹¤¤¡£";
+#else
+ info[i++] = "You are subject to be hit.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_LOW_MAGIC)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏËâË¡¤ò¼ºÇÔ¤·¤ä¤¹¤¤¡£";
+#else
+ info[i++] = "You are subject to fail spellcasting.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_FAST_DIGEST)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤ªÊ¢¤¬¤Ø¤ë¡£";
+#else
+ info[i++] = "You have a good appetite.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_DRAIN_HP)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏÂÎÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You are drained.";
+#endif
+
+ }
+ if (p_ptr->cursed & TRC_DRAIN_MANA)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏËâÎϤòµÛ¤ï¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You brain is drained.";
+#endif
+
+ }
+ if (IS_BLESSED())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¸øÀµ¤µ¤ò´¶¤¸¤Æ¤¤¤ë¡£";
#endif
}
- if (p_ptr->hero)
+ if (IS_HERO())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¥Ò¡¼¥í¡¼µ¤Ê¬¤À¡£";
#endif
}
- if (p_ptr->invuln)
+ if (IS_INVULN())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¸½ºß½ý¤Ä¤«¤Ê¤¤¡£";
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤Ï²Ð±ê¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
#else
- info[i++] = "You can strike enemy with flame.";
+ info[i++] = "You can strike the enemy with flame.";
#endif
}
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÎ䵤¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
#else
- info[i++] = "You can strike enemy with cold.";
+ info[i++] = "You can strike the enemy with cold.";
#endif
}
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤Ï»À¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
#else
- info[i++] = "You can strike enemy with acid.";
+ info[i++] = "You can strike the enemy with acid.";
#endif
}
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÅÅ·â¤Ëʤ¤ï¤ì¤Æ¤¤¤ë¡£";
#else
- info[i++] = "You can strike enemy with electoric shock.";
+ info[i++] = "You can strike the enemy with electoric shock.";
#endif
}
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÆǤËʤ¤ï¤ì¤Æ¤¤¤ë¡£";
#else
- info[i++] = "You can strike enemy with poison.";
-#endif
-
- }
- if (p_ptr->special_attack & ATTACK_CONFUSE)
- {
-#ifdef JP
-info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
-#else
- info[i++] = "Your hands are glowing dull red.";
-#endif
-
- }
- if (p_ptr->special_attack & ATTACK_CONFUSE)
- {
-#ifdef JP
-info[i++] = "¤¢¤Ê¤¿¤Î¼ê¤ÏÀÖ¤¯µ±¤¤¤Æ¤¤¤ë¡£";
-#else
- info[i++] = "Your hands are glowing dull red.";
+ info[i++] = "You can strike the enemy with poison.";
#endif
}
#endif
}
+ if (p_ptr->alter_reality)
+ {
+#ifdef JP
+ info[i++] = "¤¢¤Ê¤¿¤Ï¤¹¤°¤Ë¤³¤ÎÀ¤³¦¤òÎ¥¤ì¤ë¤À¤í¤¦¡£";
+#else
+ info[i++] = "You will soon be altered.";
+#endif
+
+ }
if (p_ptr->see_infra)
{
#ifdef JP
if (p_ptr->telepathy)
{
#ifdef JP
-info[i++] = "¤¢¤Ê¤¿¤ÏĶǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+info[i++] = "¤¢¤Ê¤¿¤Ï¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
#else
info[i++] = "You have ESP.";
#endif
}
+ if (p_ptr->esp_animal)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¼«Á³³¦¤ÎÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense natural creatures.";
+#endif
+
+ }
+ if (p_ptr->esp_undead)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense undead.";
+#endif
+
+ }
+ if (p_ptr->esp_demon)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï°Ëâ¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense demons.";
+#endif
+
+ }
+ if (p_ptr->esp_orc)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥ª¡¼¥¯¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense orcs.";
+#endif
+
+ }
+ if (p_ptr->esp_troll)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥È¥í¥ë¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense trolls.";
+#endif
+
+ }
+ if (p_ptr->esp_giant)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ïµð¿Í¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense giants.";
+#endif
+
+ }
+ if (p_ptr->esp_dragon)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense dragons.";
+#endif
+
+ }
+ if (p_ptr->esp_human)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¿Í´Ö¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense humans.";
+#endif
+
+ }
+ if (p_ptr->esp_evil)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°¤ÊÀ¸¤Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense evil creatures.";
+#endif
+
+ }
+ if (p_ptr->esp_good)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏÁ±ÎɤÊÀ¸¤Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense good creatures.";
+#endif
+
+ }
+ if (p_ptr->esp_nonliving)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï³èÆ°¤¹¤ë̵À¸ÊªÂΤθºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense non-living creatures.";
+#endif
+
+ }
+ if (p_ptr->esp_unique)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏÆÃÊ̤ʶ¯Å¨¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You sense unique monsters.";
+#endif
+
+ }
if (p_ptr->hold_life)
{
#ifdef JP
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
#else
- info[i++] = "You are surrounded with a coldly aura.";
+ info[i++] = "You are surrounded with an aura of coldness.";
+#endif
+
+ }
+ if (p_ptr->tim_sh_holy)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You are surrounded with a holy aura.";
+#endif
+
+ }
+ if (p_ptr->tim_sh_touki)
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏÆ®µ¤¤Î¥ª¡¼¥é¤ËÊñ¤Þ¤ì¤Æ¤¤¤ë¡£";
+#else
+ info[i++] = "You are surrounded with a energy aura.";
#endif
}
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¹ÔÆ°¤ÎÁ°¤Ë´í¸±¤ò»¡ÃΤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
#else
- info[i++] = "You will be warn before dangerous action.";
+ info[i++] = "You will be warned before dangerous actions.";
#endif
}
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¾¯¤Ê¤¤¾ÃÈñËâÎϤÇËâË¡¤ò¾§¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
#else
- info[i++] = "You can cast spell with fewer mana.";
+ info[i++] = "You can cast spells with fewer mana points.";
#endif
}
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï¹â¤¤¼ºÇÔΨ¤ÇËâË¡¤ò¾§¤¨¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¡£";
#else
- info[i++] = "Fail rate of your magic is incresed.";
+ info[i++] = "Fail rate of your magic is increased.";
#endif
}
#endif
}
- else if ((p_ptr->resist_acid) && (p_ptr->oppose_acid))
+ else if (p_ptr->resist_acid && IS_OPPOSE_ACID())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
#endif
}
- else if ((p_ptr->resist_acid) || (p_ptr->oppose_acid))
+ else if (p_ptr->resist_acid || IS_OPPOSE_ACID())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï»À¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
#endif
}
- else if ((p_ptr->resist_elec) && (p_ptr->oppose_elec))
+ else if (p_ptr->resist_elec && IS_OPPOSE_ELEC())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
#endif
}
- else if ((p_ptr->resist_elec) || (p_ptr->oppose_elec))
+ else if (p_ptr->resist_elec || IS_OPPOSE_ELEC())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÏÅÅ·â¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
#endif
}
- else if ((p_ptr->resist_fire) && (p_ptr->oppose_fire))
+ else if (p_ptr->resist_fire && IS_OPPOSE_FIRE())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
#endif
}
- else if ((p_ptr->resist_fire) || (p_ptr->oppose_fire))
+ else if (p_ptr->resist_fire || IS_OPPOSE_FIRE())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Ï²Ð¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
#endif
}
- else if ((p_ptr->resist_cold) && (p_ptr->oppose_cold))
+ else if (p_ptr->resist_cold && IS_OPPOSE_COLD())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤Î¶¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
#endif
}
- else if ((p_ptr->resist_cold) || (p_ptr->oppose_cold))
+ else if (p_ptr->resist_cold || IS_OPPOSE_COLD())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÏÎ䵤¤Ø¤ÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
}
- if ((p_ptr->resist_pois) && (p_ptr->oppose_pois))
+ if (p_ptr->resist_pois && IS_OPPOSE_POIS())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤζ¯ÎϤÊÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
#endif
}
- else if ((p_ptr->resist_pois) || (p_ptr->oppose_pois))
+ else if (p_ptr->resist_pois || IS_OPPOSE_POIS())
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÏÆǤؤÎÂÑÀ¤ò»ý¤Ã¤Æ¤¤¤ë¡£";
}
- if (f1 & (TR1_STR))
+ if (have_flag(flgs, TR_STR))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_INT))
+ if (have_flag(flgs, TR_INT))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_WIS))
+ if (have_flag(flgs, TR_WIS))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î¸¤µ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_DEX))
+ if (have_flag(flgs, TR_DEX))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_CON))
+ if (have_flag(flgs, TR_CON))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_CHR))
+ if (have_flag(flgs, TR_CHR))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
}
- if (f1 & (TR1_STEALTH))
+ if (have_flag(flgs, TR_STEALTH))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î±£Ì©¹ÔưǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_SEARCH))
+ if (have_flag(flgs, TR_SEARCH))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Îõº÷ǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_INFRA))
+ if (have_flag(flgs, TR_INFRA))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÀÖ³°Àþ»ëÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_TUNNEL))
+ if (have_flag(flgs, TR_TUNNEL))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎºÎ·¡Ç½ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_SPEED))
+ if (have_flag(flgs, TR_SPEED))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î¥¹¥Ô¡¼¥É¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
#endif
}
- if (f1 & (TR1_BLOWS))
+ if (have_flag(flgs, TR_BLOWS))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤Î¹¶·â®ÅÙ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
if (o_ptr->k_idx)
{
/* Indicate Blessing */
- if (f3 & (TR3_BLESSED))
+ if (have_flag(flgs, TR_BLESSED))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿À¤Î½ËÊ¡¤ò¼õ¤±¤Æ¤¤¤ë¡£";
}
- if (f1 & (TR1_CHAOTIC))
+ if (have_flag(flgs, TR_CHAOTIC))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥í¥°¥ë¥¹¤Îħ¤Î°À¤ò¤â¤Ä¡£";
}
/* Hack */
- if (f1 & (TR1_IMPACT))
+ if (have_flag(flgs, TR_IMPACT))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÂÇ·â¤ÇÃϿ̤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£";
}
- if (f1 & (TR1_VORPAL))
+ if (have_flag(flgs, TR_VORPAL))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÈó¾ï¤Ë±Ô¤¤¡£";
}
- if (f1 & (TR1_VAMPIRIC))
+ if (have_flag(flgs, TR_VAMPIRIC))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¡£";
}
/* Special "Attack Bonuses" */
- if (f1 & (TR1_BRAND_ACID))
+ if (have_flag(flgs, TR_BRAND_ACID))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÍϤ«¤¹¡£";
#endif
}
- if (f1 & (TR1_BRAND_ELEC))
+ if (have_flag(flgs, TR_BRAND_ELEC))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤ò´¶ÅŤµ¤»¤ë¡£";
#endif
}
- if (f1 & (TR1_BRAND_FIRE))
+ if (have_flag(flgs, TR_BRAND_FIRE))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òdz¤ä¤¹¡£";
#endif
}
- if (f1 & (TR1_BRAND_COLD))
+ if (have_flag(flgs, TR_BRAND_COLD))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÅà¤é¤»¤ë¡£";
#endif
}
- if (f1 & (TR1_BRAND_POIS))
+ if (have_flag(flgs, TR_BRAND_POIS))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÆǤǿ¯¤¹¡£";
}
/* Special "slay" flags */
- if (f1 & (TR1_SLAY_ANIMAL))
+ if (have_flag(flgs, TR_KILL_ANIMAL))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+ info[i++] = "Your weapon is a great bane of animals.";
+#endif
+
+ }
+ else if (have_flag(flgs, TR_SLAY_ANIMAL))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
#endif
}
- if (f1 & (TR1_SLAY_EVIL))
+ if (have_flag(flgs, TR_KILL_EVIL))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°¤Ê¤ë¸ºß¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+ info[i++] = "Your weapon is a great bane of evil.";
+#endif
+
+ }
+ else if (have_flag(flgs, TR_SLAY_EVIL))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°¤Ê¤ë¸ºß¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
#endif
}
- if (f1 & (TR1_SLAY_UNDEAD))
+ if (have_flag(flgs, TR_KILL_HUMAN))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+ info[i++] = "Your weapon is a great bane of humans.";
+#endif
+
+ }
+ else if (have_flag(flgs, TR_SLAY_HUMAN))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
+#else
+ info[i++] = "Your weapon is especially deadly against humans.";
+#endif
+
+ }
+ if (have_flag(flgs, TR_KILL_UNDEAD))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+ info[i++] = "Your weapon is a great bane of undead.";
+#endif
+
+ }
+ else if (have_flag(flgs, TR_SLAY_UNDEAD))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
#endif
}
- if (f1 & (TR1_SLAY_DEMON))
+ if (have_flag(flgs, TR_KILL_DEMON))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+ info[i++] = "Your weapon is a great bane of demons.";
+#endif
+
+ }
+ else if (have_flag(flgs, TR_SLAY_DEMON))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
#endif
}
- if (f1 & (TR1_SLAY_ORC))
+ if (have_flag(flgs, TR_KILL_ORC))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+ info[i++] = "Your weapon is a great bane of orcs.";
+#endif
+
+ }
+ else if (have_flag(flgs, TR_SLAY_ORC))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
#endif
}
- if (f1 & (TR1_SLAY_TROLL))
+ if (have_flag(flgs, TR_KILL_TROLL))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+ info[i++] = "Your weapon is a great bane of trolls.";
+#endif
+
+ }
+ else if (have_flag(flgs, TR_SLAY_TROLL))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
#endif
}
- if (f1 & (TR1_SLAY_GIANT))
+ if (have_flag(flgs, TR_KILL_GIANT))
+ {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+ info[i++] = "Your weapon is a great bane of giants.";
+#endif
+
+ }
+ else if (have_flag(flgs, TR_SLAY_GIANT))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
}
/* Special "kill" flags */
- if (f1 & (TR1_KILL_DRAGON))
+ if (have_flag(flgs, TR_KILL_DRAGON))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
#endif
}
- else if (f1 & (TR1_SLAY_DRAGON))
+ else if (have_flag(flgs, TR_SLAY_DRAGON))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
}
- if (f1 & (TR1_FORCE_WEPON))
+ if (have_flag(flgs, TR_FORCE_WEAPON))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏMP¤ò»È¤Ã¤Æ¹¶·â¤¹¤ë¡£";
#endif
}
- if (f2 & (TR2_THROW))
+ if (have_flag(flgs, TR_THROW))
{
#ifdef JP
info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÅꤲ¤ä¤¹¤¤¡£";
{
info2[i] = report_magics_aux(p_ptr->word_recall);
#ifdef JP
-info[i++] = "¤Î¸åµ¢´Ô¤Î¾Û¤òȯư¤¹¤ë¡£";
+ info[i++] = "¤³¤Î¸åµ¢´Ô¤Î¾Û¤òȯư¤¹¤ë¡£";
+#else
+ info[i++] = "You are waiting to be recalled";
+#endif
+
+ }
+ if (p_ptr->alter_reality)
+ {
+ info2[i] = report_magics_aux(p_ptr->alter_reality);
+#ifdef JP
+ info[i++] = "¤³¤Î¸å¸½¼ÂÊÑÍƤ¬È¯Æ°¤¹¤ë¡£";
#else
- info[i++] = "You waiting to be recalled";
+ info[i++] = "You waiting to be altered";
#endif
}
/*
* Detect all traps on current panel
*/
-bool detect_traps(int range)
+bool detect_traps(int range, bool known)
{
int x, y;
bool detect = FALSE;
{
for (x = 1; x <= cur_wid - 1; x++)
{
- if (distance(py, px, y, x) > range) continue;
+ int dist = distance(py, px, y, x);
+ if (dist > range) continue;
/* Access the grid */
c_ptr = &cave[y][x];
- /* Detect invisible traps */
- if (c_ptr->info & CAVE_TRAP)
+ /* Mark as detected */
+ if (dist <= range && known)
{
- /* Pick a trap */
- pick_trap(y, x);
+ if (dist <= range - 1)
+ c_ptr->info |= (CAVE_IN_DETECT);
+
+ c_ptr->info &= ~(CAVE_UNSAFE);
+
+ /* Redraw */
+ lite_spot(y, x);
}
/* Detect traps */
/* Hack -- Memorize */
c_ptr->info |= (CAVE_MARK);
- /* Redraw */
- lite_spot(y, x);
+ if (c_ptr->mimic)
+ {
+ /* Disclose a hidden trap */
+ disclose_grid(y, x);
+ }
+ else
+ {
+ /* Redraw */
+ lite_spot(y, x);
+ }
/* Obvious */
detect = TRUE;
}
}
+ if (known) p_ptr->dtrap = TRUE;
+
if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] > MUSIC_DETECT)) detect = FALSE;
/* Describe */
c_ptr = &cave[y][x];
/* Detect secret doors */
- if (c_ptr->feat == FEAT_SECRET)
+ if (is_hidden_door(c_ptr))
{
/* Pick a door */
- place_closed_door(y, x);
+ disclose_grid(y, x);
}
/* Detect doors */
(c_ptr->feat == FEAT_LESS_LESS) ||
(c_ptr->feat == FEAT_MORE) ||
(c_ptr->feat == FEAT_MORE_MORE) ||
- (c_ptr->feat == FEAT_ENTRANCE))
+ (c_ptr->feat == FEAT_ENTRANCE))
{
/* Hack -- Memorize */
c_ptr->info |= (CAVE_MARK);
if (o_ptr->tval == TV_GOLD)
{
/* Hack -- memorize it */
- o_ptr->marked = TRUE;
+ o_ptr->marked |= OM_FOUND;
/* Redraw */
lite_spot(y, x);
if (o_ptr->tval != TV_GOLD)
{
/* Hack -- memorize it */
- o_ptr->marked = TRUE;
+ o_ptr->marked |= OM_FOUND;
/* Redraw */
lite_spot(y, x);
(tv == TV_ARCANE_BOOK) ||
(tv == TV_ENCHANT_BOOK) ||
(tv == TV_DAEMON_BOOK) ||
+ (tv == TV_CRUSADE_BOOK) ||
(tv == TV_MUSIC_BOOK) ||
(tv == TV_HISSATSU_BOOK) ||
((o_ptr->to_a > 0) || (o_ptr->to_h + o_ptr->to_d > 0)))
{
/* Memorize the item */
- o_ptr->marked = TRUE;
+ o_ptr->marked |= OM_FOUND;
/* Redraw */
lite_spot(y, x);
if (distance(py, px, y, x) > range) continue;
/* Detect all non-invisible monsters */
- if ((!(r_ptr->flags2 & RF2_INVISIBLE)) ||
- p_ptr->see_inv || p_ptr->tim_invis)
+ if (!(r_ptr->flags2 & RF2_INVISIBLE) || p_ptr->see_inv)
{
/* Repair visibility later */
repair_monsters = TRUE;
/* Hack -- Detect monster */
- m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
+ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
/* Update the monster */
update_mon(i, FALSE);
repair_monsters = TRUE;
/* Hack -- Detect monster */
- m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
+ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
/* Update the monster */
update_mon(i, FALSE);
repair_monsters = TRUE;
/* Hack -- Detect monster */
- m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
+ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
/* Update the monster */
update_mon(i, FALSE);
repair_monsters = TRUE;
/* Hack -- Detect monster */
- m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
+ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
/* Update the monster */
update_mon(i, FALSE);
repair_monsters = TRUE;
/* Hack -- Detect monster */
- m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
+ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
/* Update the monster */
update_mon(i, FALSE);
repair_monsters = TRUE;
/* Hack -- Detect monster */
- m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
+ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
/* Update the monster */
update_mon(i, FALSE);
repair_monsters = TRUE;
/* Hack -- Detect monster */
- m_ptr->mflag |= (MFLAG_MARK | MFLAG_SHOW);
+ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW);
/* Update the monster */
update_mon(i, FALSE);
bool detect = FALSE;
/* Detect everything */
- if (detect_traps(range)) detect = TRUE;
+ if (detect_traps(range, TRUE)) detect = TRUE;
if (detect_doors(range)) detect = TRUE;
if (detect_stairs(range)) detect = TRUE;
- if (detect_treasure(range)) detect = TRUE;
+
+ /* There are too many hidden treasure. So... */
+ /* if (detect_treasure(range)) detect = TRUE; */
+
if (detect_objects_gold(range)) detect = TRUE;
if (detect_objects_normal(range)) detect = TRUE;
if (detect_monsters_invis(range)) detect = TRUE;
bool project_hack(int typ, int dam)
{
int i, x, y;
- int flg = PROJECT_JUMP | PROJECT_KILL | PROJECT_HIDE | PROJECT_NO_REF;
+ int flg = PROJECT_JUMP | PROJECT_KILL | PROJECT_HIDE;
bool obvious = FALSE;
/*
+ * Crusade
+ */
+bool crusade(void)
+{
+ return (project_hack(GF_CRUSADE, p_ptr->lev*4));
+}
+
+
+/*
* Wake up all monsters, and speed up "los" monsters.
*/
void aggravate_monsters(int who)
m_ptr->csleep = 0;
sleep = TRUE;
}
- if (!is_pet(m_ptr)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (!is_pet(m_ptr)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
/* Speed up monsters in line of sight */
else if (i == p_ptr->riding) angry = TRUE;
- else if (player_cast && (r_ptr->level > rand_int(power))) angry = TRUE;
+ else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
- else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
+ else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
/* Delete the monster */
else delete_monster_idx(i);
}
set_hostile(m_ptr);
}
- if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
}
if (player_cast)
{
/* Take damage */
#ifdef JP
-take_hit(DAMAGE_GENO, randint(4), "Ëõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
+take_hit(DAMAGE_GENO, randint1(4), "Ëõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
#else
- take_hit(DAMAGE_GENO, randint(4), "the strain of casting Genocide", -1);
+ take_hit(DAMAGE_GENO, randint1(4), "the strain of casting Genocide", -1);
#endif
}
else if (i == p_ptr->riding) angry = TRUE;
- else if (player_cast && (r_ptr->level > rand_int(power))) angry = TRUE;
+ else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
- else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
+ else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
/* Delete the monster */
else delete_monster_idx(i);
}
set_hostile(m_ptr);
}
- if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
}
if (player_cast)
{
/* Hack -- visual feedback */
#ifdef JP
-take_hit(DAMAGE_GENO, randint(3), "¼þÊÕËõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
+take_hit(DAMAGE_GENO, randint1(3), "¼þÊÕËõ»¦¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
#else
- take_hit(DAMAGE_GENO, randint(3), "the strain of casting Mass Genocide", -1);
+ take_hit(DAMAGE_GENO, randint1(3), "the strain of casting Mass Genocide", -1);
#endif
}
else if (i == p_ptr->riding) angry = TRUE;
- else if (player_cast && (r_ptr->level > rand_int(power))) angry = TRUE;
+ else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
- else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
+ else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
/* Delete the monster */
else delete_monster_idx(i);
}
set_hostile(m_ptr);
}
- if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
}
if (player_cast)
{
/* Hack -- visual feedback */
#ifdef JP
-take_hit(DAMAGE_GENO, randint(3), "¥¢¥ó¥Ç¥Ã¥É¾ÃÌǤμöʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
+take_hit(DAMAGE_GENO, randint1(3), "¥¢¥ó¥Ç¥Ã¥É¾ÃÌǤμöʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
#else
- take_hit(DAMAGE_GENO, randint(3), "the strain of casting Mass Genocide", -1);
+ take_hit(DAMAGE_GENO, randint1(3), "the strain of casting Mass Genocide", -1);
#endif
}
int cu, cv;
bool probe = FALSE;
char buf[256];
+ cptr align;
cu = Term->scr->cu;
cv = Term->scr->cv;
char m_name[80];
/* Start the message */
+ if (!probe)
+ {
#ifdef JP
- if (!probe) {msg_print("Ä´ººÃæ...");msg_print(NULL);}
+ msg_print("Ä´ººÃæ...");
#else
- if (!probe) {msg_print("Probing...");msg_print(NULL);}
+ msg_print("Probing...");
#endif
+ }
- if (m_ptr->mflag2 & MFLAG_KAGE)
+ msg_print(NULL);
+
+ if (m_ptr->ap_r_idx != m_ptr->r_idx)
{
- m_ptr->mflag2 &= ~(MFLAG_KAGE);
+ if (m_ptr->mflag2 & MFLAG2_KAGE)
+ m_ptr->mflag2 &= ~(MFLAG2_KAGE);
+
+ m_ptr->ap_r_idx = m_ptr->r_idx;
lite_spot(m_ptr->fy, m_ptr->fx);
}
/* Get "the monster" or "something" */
- monster_desc(m_name, m_ptr, 0x204);
+ monster_desc(m_name, m_ptr, MD_IGNORE_HALLU | MD_INDEF_HIDDEN);
speed = m_ptr->mspeed - 110;
if(m_ptr->fast) speed += 10;
if(m_ptr->slow) speed -= 10;
+
+ /* Get the monster's alignment */
+#ifdef JP
+ if ((r_ptr->flags3 & RF3_EVIL) && (r_ptr->flags3 & RF3_GOOD)) align = "籡";
+ else if (r_ptr->flags3 & RF3_EVIL) align = "¼Ù°";
+ else if (r_ptr->flags3 & RF3_GOOD) align = "Á±ÎÉ";
+ else if ((m_ptr->sub_align & SUB_ALIGN_EVIL) && (m_ptr->sub_align & SUB_ALIGN_GOOD)) align = "ÃæΩ(Á±°)";
+ else if (m_ptr->sub_align & SUB_ALIGN_EVIL) align = "ÃæΩ(¼Ù°)";
+ else if (m_ptr->sub_align & SUB_ALIGN_GOOD) align = "ÃæΩ(Á±ÎÉ)";
+ else align = "ÃæΩ";
+#else
+ if ((r_ptr->flags3 & RF3_EVIL) && (r_ptr->flags3 & RF3_GOOD)) align = "good&evil";
+ else if (r_ptr->flags3 & RF3_EVIL) align = "evil";
+ else if (r_ptr->flags3 & RF3_GOOD) align = "good";
+ else if ((m_ptr->sub_align & SUB_ALIGN_EVIL) && (m_ptr->sub_align & SUB_ALIGN_GOOD)) align = "neutral(good&evil)";
+ else if (m_ptr->sub_align & SUB_ALIGN_EVIL) align = "neutral(evil)";
+ else if (m_ptr->sub_align & SUB_ALIGN_GOOD) align = "neutral(good)";
+ else align = "neutral";
+#endif
+
/* Describe the monster */
#ifdef JP
-sprintf(buf,"%s ... HP:%d/%d AC:%d ®ÅÙ:%s%d ·Ð¸³:", m_name, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
+sprintf(buf,"%s ... °À:%s HP:%d/%d AC:%d ®ÅÙ:%s%d ·Ð¸³:", m_name, align, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
#else
-sprintf(buf, "%s ... HP:%d/%d AC:%d speed:%s%d exp:", m_name, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
+sprintf(buf, "%s ... align:%s HP:%d/%d AC:%d speed:%s%d exp:", m_name, align, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
#endif
if (r_ptr->next_r_idx)
{
p_ptr->window |= (PW_MESSAGE);
window_stuff();
- /* Learn all of the non-spell, non-treasure flags */
- lore_do_probe(i);
-
if (m_ptr->ml) move_cursor_relative(m_ptr->fy, m_ptr->fx);
inkey();
Term_erase(0, 0, 255);
+ /* Learn everything about this monster */
+ if (lore_do_probe(m_ptr->r_idx))
+ {
+#ifdef JP
+ /* Note that we learnt some new flags -Mogami- */
+ msg_format("%s¤Ë¤Ä¤¤¤Æ¤µ¤é¤Ë¾Ü¤·¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£", m_name);
+#else
+ char buf[80];
+
+ /* Get base name of monster */
+ strcpy(buf, (r_name + r_ptr->name));
+
+ /* Pluralize it */
+ plural_aux(buf);
+
+ /* Note that we learnt some new flags -Mogami- */
+ msg_format("You now know more about %s.", buf);
+#endif
+ /* Clear -more- prompt */
+ msg_print(NULL);
+ }
+
/* Probe worked */
probe = TRUE;
}
* Later we may use one function for both "destruction" and
* "earthquake" by using the "full" to select "destruction".
*/
-bool destroy_area(int y1, int x1, int r, int full)
+bool destroy_area(int y1, int x1, int r, bool in_generate)
{
int y, x, k, t;
cave_type *c_ptr;
bool flag = FALSE;
-
/* Prevent destruction of quest levels and town */
- if ((p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST)) || !dun_level)
+ if ((p_ptr->inside_quest && is_fixed_quest_idx(p_ptr->inside_quest)) || !dun_level)
{
return (FALSE);
}
{
for (x = (x1 - r); x <= (x1 + r); x++)
{
- monster_type *m_ptr;
- monster_race *r_ptr;
-
/* Skip illegal grids */
if (!in_bounds(y, x)) continue;
/* Access the grid */
c_ptr = &cave[y][x];
- m_ptr = &m_list[c_ptr->m_idx];
- r_ptr = &r_info[m_ptr->r_idx];
/* Lose room and vault */
- c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_TRAP);
+ c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
/* Lose light and knowledge */
c_ptr->info &= ~(CAVE_MARK | CAVE_GLOW);
- /* Hack -- Notice player affect */
- if ((x == px) && (y == py))
+ if (!in_generate) /* Normal */
{
- /* Hurt the player later */
- flag = TRUE;
+ /* Lose unsafety and runes/mirrors */
+ c_ptr->info &= ~(CAVE_UNSAFE | CAVE_OBJECT);
- /* Do not hurt this grid */
- continue;
+ /* Hack -- Notice player affect */
+ if (player_bold(y, x))
+ {
+ /* Hurt the player later */
+ flag = TRUE;
+
+ /* Do not hurt this grid */
+ continue;
+ }
}
/* Hack -- Skip the epicenter */
if ((y == y1) && (x == x1)) continue;
- if ((r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->flags7 & RF7_GUARDIAN) || ((m_ptr->mflag2 & MFLAG_CHAMELEON) && (r_ptr->flags1 & RF1_UNIQUE)))
+ if (c_ptr->m_idx)
{
- /* Heal the monster */
- m_list[c_ptr->m_idx].hp = m_list[c_ptr->m_idx].maxhp;
+ monster_type *m_ptr = &m_list[c_ptr->m_idx];
+ monster_race *r_ptr = &r_info[m_ptr->r_idx];
- /* Try to teleport away quest monsters */
- if (!teleport_away(c_ptr->m_idx, (r * 2) + 1, TRUE)) continue;
- }
- else
- {
- if (c_ptr->m_idx)
+ if (in_generate) /* In generation */
+ {
+ /* Delete the monster (if any) */
+ delete_monster(y, x);
+ }
+ else if (r_ptr->flags1 & RF1_QUESTOR)
+ {
+ /* Heal the monster */
+ m_ptr->hp = m_ptr->maxhp;
+
+ /* Try to teleport away quest monsters */
+ if (!teleport_away(c_ptr->m_idx, (r * 2) + 1, TRUE)) continue;
+ }
+ else
{
- if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname)
+ if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname)
{
char m_name[80];
- monster_desc(m_name, &m_list[c_ptr->m_idx], 0x08);
+ monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
do_cmd_write_nikki(NIKKI_NAMED_PET, 6, m_name);
}
+
+ /* Delete the monster (if any) */
+ delete_monster(y, x);
}
- /* Delete the monster (if any) */
- delete_monster(y, x);
}
- if (preserve_mode)
+ /* During generation, destroyed artifacts are "preserved" */
+ if (preserve_mode || in_generate)
{
s16b this_o_idx, next_o_idx = 0;
next_o_idx = o_ptr->next_o_idx;
/* Hack -- Preserve unknown artifacts */
- if (artifact_p(o_ptr) && !object_known_p(o_ptr))
+ if (artifact_p(o_ptr) && (!object_known_p(o_ptr) || in_generate))
{
/* Mega-Hack -- Preserve the artifact */
a_info[o_ptr->name1].cur_num = 0;
+
+ if (in_generate && cheat_peek)
+ {
+ char o_name[MAX_NLEN];
+ object_desc_store(o_name, o_ptr, FALSE, 0);
+#ifdef JP
+ msg_format("ÅÁÀâ¤Î¥¢¥¤¥Æ¥à (%s) ¤ÏÀ¸À®Ãæ¤Ë*Ç˲õ*¤µ¤ì¤¿¡£", o_name);
+#else
+ msg_format("Artifact (%s) was *destroyed* during generation.", o_name);
+#endif
+ }
+ }
+ else if (in_generate && cheat_peek && o_ptr->art_name)
+ {
+#ifdef JP
+ msg_print("¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î1¤Ä¤ÏÀ¸À®Ãæ¤Ë*Ç˲õ*¤µ¤ì¤¿¡£");
+#else
+ msg_print("One of the random artifacts was *destroyed* during generation.");
+#endif
}
}
}
+
+ /* Delete objects */
delete_object(y, x);
- /* Destroy "valid" grids */
+ /* Destroy "non-permanent" grids */
if (!cave_perma_bold(y, x))
{
/* Wall (or floor) type */
- t = rand_int(200);
+ t = randint0(200);
- /* Granite */
- if (t < 20)
+ if (!in_generate) /* Normal */
{
- /* Create granite wall */
- c_ptr->feat = FEAT_WALL_EXTRA;
- }
-
- /* Quartz */
- else if (t < 70)
- {
- /* Create quartz vein */
- c_ptr->feat = FEAT_QUARTZ;
+ if (t < 20)
+ {
+ /* Create granite wall */
+ cave_set_feat(y, x, FEAT_WALL_EXTRA);
+ }
+ else if (t < 70)
+ {
+ /* Create quartz vein */
+ cave_set_feat(y, x, FEAT_QUARTZ);
+ }
+ else if (t < 100)
+ {
+ /* Create magma vein */
+ cave_set_feat(y, x, FEAT_MAGMA);
+ }
+ else
+ {
+ /* Create floor */
+ cave_set_feat(y, x, floor_type[randint0(100)]);
+ }
}
-
- /* Magma */
- else if (t < 100)
+ else /* In generation */
{
- /* Create magma vein */
- c_ptr->feat = FEAT_MAGMA;
- }
+ if (t < 20)
+ {
+ /* Create granite wall */
+ place_extra_grid(c_ptr);
+ }
+ else if (t < 70)
+ {
+ /* Create quartz vein */
+ c_ptr->feat = FEAT_QUARTZ;
+ }
+ else if (t < 100)
+ {
+ /* Create magma vein */
+ c_ptr->feat = FEAT_MAGMA;
+ }
+ else
+ {
+ /* Create floor */
+ place_floor_grid(c_ptr);
+ }
- /* Floor */
- else
- {
- /* Create floor */
- c_ptr->feat = floor_type[rand_int(100)];
- c_ptr->info &= ~(CAVE_MASK);
- c_ptr->info |= CAVE_FLOOR;
+ /* Clear garbage of hidden trap or door */
+ c_ptr->mimic = 0;
}
}
}
}
- /* Hack -- Affect player */
- if (flag)
+ if (!in_generate)
{
- /* Message */
+ /* Hack -- Affect player */
+ if (flag)
+ {
+ /* Message */
#ifdef JP
-msg_print("dz¤¨¤ë¤è¤¦¤ÊÁ®¸÷¤¬È¯À¸¤·¤¿¡ª");
+ msg_print("dz¤¨¤ë¤è¤¦¤ÊÁ®¸÷¤¬È¯À¸¤·¤¿¡ª");
#else
- msg_print("There is a searing blast of light!");
+ msg_print("There is a searing blast of light!");
#endif
-
- /* Blind the player */
- if (!p_ptr->resist_blind && !p_ptr->resist_lite)
- {
- /* Become blind */
- (void)set_blind(p_ptr->blind + 10 + randint(10));
+ /* Blind the player */
+ if (!p_ptr->resist_blind && !p_ptr->resist_lite)
+ {
+ /* Become blind */
+ (void)set_blind(p_ptr->blind + 10 + randint1(10));
+ }
}
- }
- forget_flow();
+ forget_flow();
- /* Mega-Hack -- Forget the view and lite */
- p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
+ /* Mega-Hack -- Forget the view and lite */
+ p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
- /* Update stuff */
- p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
+ /* Update stuff */
+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
- /* Update the monsters */
- p_ptr->update |= (PU_MONSTERS);
+ /* Update the monsters */
+ p_ptr->update |= (PU_MONSTERS);
- /* Redraw map */
- p_ptr->redraw |= (PR_MAP);
+ /* Redraw map */
+ p_ptr->redraw |= (PR_MAP);
- /* Window stuff */
- p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
+ /* Window stuff */
+ p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
+ }
/* Success */
return (TRUE);
/* Prevent destruction of quest levels and town */
- if ((p_ptr->inside_quest && (p_ptr->inside_quest < MIN_RANDOM_QUEST)) || !dun_level)
+ if ((p_ptr->inside_quest && is_fixed_quest_idx(p_ptr->inside_quest)) || !dun_level)
{
return (FALSE);
}
c_ptr = &cave[yy][xx];
/* Lose room and vault */
- c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_TRAP);
+ c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY | CAVE_UNSAFE);
/* Lose light and knowledge */
c_ptr->info &= ~(CAVE_GLOW | CAVE_MARK);
if (!dx && !dy) continue;
/* Skip most grids */
- if (rand_int(100) < 85) continue;
+ if (randint0(100) < 85) continue;
/* Damage this grid */
map[16+yy-cy][16+xx-cx] = TRUE;
/* Hack -- Take note of player damage */
- if ((yy == py) && (xx == px)) hurt = TRUE;
+ if (player_bold(yy, xx)) hurt = TRUE;
}
}
/* First, affect the player (if necessary) */
- if (hurt && !(p_ptr->prace == RACE_SPECTRE) && !(p_ptr->wraith_form) && !(p_ptr->kabenuke))
+ if (hurt && !prace_is_(RACE_SPECTRE) && !p_ptr->wraith_form && !p_ptr->kabenuke)
{
/* Check around the player */
for (i = 0; i < 8; i++)
sn++;
/* Randomize choice */
- if (rand_int(sn) > 0) continue;
+ if (randint0(sn) > 0) continue;
/* Save the safe location */
sy = y; sx = x;
}
/* Random message */
- switch (randint(3))
+ switch (randint1(3))
{
case 1:
{
else
{
/* Calculate results */
- switch (randint(3))
+ switch (randint1(3))
{
case 1:
{
#endif
damage = damroll(10, 4);
- (void)set_stun(p_ptr->stun + randint(50));
+ (void)set_stun(p_ptr->stun + randint1(50));
break;
}
case 3:
#endif
damage = damroll(10, 4);
- (void)set_stun(p_ptr->stun + randint(50));
+ (void)set_stun(p_ptr->stun + randint1(50));
break;
}
}
if (!cave_empty_bold(y, x)) continue;
/* Hack -- no safety on glyph of warding */
- if (cave[y][x].feat == FEAT_GLYPH) continue;
- if (cave[y][x].feat == FEAT_MINOR_GLYPH) continue;
+ if (is_glyph_grid(&cave[y][x])) continue;
+ if (is_explosive_rune_grid(&cave[y][x])) continue;
/* ... nor on the Pattern */
if ((cave[y][x].feat <= FEAT_PATTERN_XTRA2) &&
if (map[16+y-cy][16+x-cx]) continue;
if (cave[y][x].m_idx) continue;
- if ((y == py) && (x == px)) continue;
+ if (player_bold(y, x)) continue;
/* Count "safe" grids */
sn++;
/* Randomize choice */
- if (rand_int(sn) > 0) continue;
+ if (randint0(sn) > 0) continue;
/* Save the safe grid */
sy = y; sx = x;
{
char m2_name[80];
- monster_desc(m2_name, m_ptr, 0x08);
+ monster_desc(m2_name, m_ptr, MD_INDEF_VISIBLE);
do_cmd_write_nikki(NIKKI_NAMED_PET, 7, m2_name);
}
}
c_ptr = &cave[yy][xx];
/* Paranoia -- never affect player */
-/* if ((yy == py) && (xx == px)) continue; */
+/* if (player_bold(yy, xx)) continue; */
/* Destroy location (if valid) */
if (cave_valid_bold(yy, xx))
/* Delete objects */
delete_object(yy, xx);
+ /* Clear mirror, runes flag */
+ c_ptr->info &= ~CAVE_OBJECT;
+
/* Wall (or floor) type */
- t = (floor ? rand_int(100) : 200);
+ t = (floor ? randint0(100) : 200);
/* Granite */
if (t < 20)
{
/* Create granite wall */
- c_ptr->feat = FEAT_WALL_EXTRA;
+ cave_set_feat(yy, xx, FEAT_WALL_EXTRA);
}
/* Quartz */
else if (t < 70)
{
/* Create quartz vein */
- c_ptr->feat = FEAT_QUARTZ;
+ cave_set_feat(yy, xx, FEAT_QUARTZ);
}
/* Magma */
else if (t < 100)
{
/* Create magma vein */
- c_ptr->feat = FEAT_MAGMA;
+ cave_set_feat(yy, xx, FEAT_MAGMA);
}
/* Floor */
else
{
/* Create floor */
- c_ptr->feat = floor_type[rand_int(100)];
- c_ptr->info &= ~(CAVE_MASK);
- c_ptr->info |= CAVE_FLOOR;
+ cave_set_feat(yy, xx, floor_type[randint0(100)]);
}
}
}
delete_monster_idx(i);
continue;
}
- dam = m_ptr->hp / 2;
+ dam = m_ptr->maxhp / 2;
if (dam > 100) dam = (dam-100)/2 + 100;
if (dam > 400) dam = (dam-400)/2 + 400;
if (dam > 800) dam = 800;
if (r_ptr->flags2 & (RF2_SMART)) chance = 100;
/* Sometimes monsters wake up */
- if (m_ptr->csleep && (rand_int(100) < chance))
+ if (m_ptr->csleep && (randint0(100) < chance))
{
/* Wake up! */
m_ptr->csleep = 0;
#else
msg_format("%^s wakes up.", m_name);
#endif
- /* Redraw the health bar */
- if (p_ptr->health_who == c_ptr->m_idx)
+ /* Redraw the health bar */
+ if (p_ptr->health_who == c_ptr->m_idx)
p_ptr->redraw |= (PR_HEALTH);
}
c_ptr->info &= ~(CAVE_TEMP);
/* Darken the grid */
- c_ptr->info &= ~(CAVE_GLOW);
+ if (!is_mirror_grid(c_ptr)) c_ptr->info &= ~(CAVE_GLOW);
/* Hack -- Forget "boring" grids */
if ((c_ptr->feat <= FEAT_INVIS) || (c_ptr->feat == FEAT_DIRT) || (c_ptr->feat == FEAT_GRASS))
{
/* Forget the grid */
- c_ptr->info &= ~(CAVE_MARK);
+ if (!view_torch_grids) c_ptr->info &= ~(CAVE_MARK);
/* Notice */
note_spot(y, x);
/*
+ * Determine how much contiguous open space this grid is next to
+ */
+static int next_to_open(int cy, int cx)
+{
+ int i;
+
+ int y, x;
+
+ int len = 0;
+ int blen = 0;
+
+ for (i = 0; i < 16; i++)
+ {
+ y = cy + ddy_cdd[i % 8];
+ x = cx + ddx_cdd[i % 8];
+
+ /* Found a wall, break the length */
+ if (!cave_floor_bold(y, x))
+ {
+ /* Track best length */
+ if (len > blen)
+ {
+ blen = len;
+ }
+
+ len = 0;
+ }
+ else
+ {
+ len++;
+ }
+ }
+
+ return (MAX(len, blen));
+}
+
+
+static int next_to_walls_adj(int cy, int cx)
+{
+ int i;
+
+ int y, x;
+
+ int c = 0;
+
+ for (i = 0; i < 8; i++)
+ {
+ y = cy + ddy_ddd[i];
+ x = cx + ddx_ddd[i];
+
+ if (!cave_floor_bold(y, x)) c++;
+ }
+
+ return c;
+}
+
+
+/*
* Aux function -- see below
*/
-static void cave_temp_room_aux(int y, int x)
+static void cave_temp_room_aux(int y, int x, bool only_room)
{
cave_type *c_ptr;
- /* Verify */
-/* if (!in_bounds(y, x)) return; */
-
/* Get the grid */
c_ptr = &cave[y][x];
if (c_ptr->info & (CAVE_TEMP)) return;
/* Do not "leave" the current room */
- if (!(c_ptr->info & (CAVE_ROOM))) return;
+ if (!(c_ptr->info & (CAVE_ROOM)))
+ {
+ if (only_room) return;
+
+ /* Verify */
+ if (!in_bounds2(y, x)) return;
+
+ /* Do not exceed the maximum spell range */
+ if (distance(py, px, y, x) > MAX_RANGE) return;
+
+ /* Verify this grid */
+ /*
+ * The reason why it is ==6 instead of >5 is that 8 is impossible
+ * due to the check for cave_bold above.
+ * 7 lights dead-end corridors (you need to do this for the
+ * checkboard interesting rooms, so that the boundary is lit
+ * properly.
+ * This leaves only a check for 6 bounding walls!
+ */
+ if (in_bounds(y, x) && cave_floor_bold(y, x) &&
+ (next_to_walls_adj(y, x) == 6) && (next_to_open(y, x) <= 1)) return;
+ }
/* Paranoia -- verify space */
if (temp_n == TEMP_MAX) return;
temp_n++;
}
+/*
+ * Aux function -- see below
+ */
+static void cave_temp_lite_room_aux(int y, int x)
+{
+ cave_temp_room_aux(y, x, FALSE);
+}
+
+/*
+ * Aux function -- see below
+ */
+static void cave_temp_unlite_room_aux(int y, int x)
+{
+ cave_temp_room_aux(y, x, TRUE);
+}
+
int i, x, y;
/* Add the initial grid */
- cave_temp_room_aux(y1, x1);
+ cave_temp_lite_room_aux(y1, x1);
/* While grids are in the queue, add their neighbors */
for (i = 0; i < temp_n; i++)
if (!cave_floor_bold(y, x)) continue;
/* Spread adjacent */
- cave_temp_room_aux(y + 1, x);
- cave_temp_room_aux(y - 1, x);
- cave_temp_room_aux(y, x + 1);
- cave_temp_room_aux(y, x - 1);
+ cave_temp_lite_room_aux(y + 1, x);
+ cave_temp_lite_room_aux(y - 1, x);
+ cave_temp_lite_room_aux(y, x + 1);
+ cave_temp_lite_room_aux(y, x - 1);
/* Spread diagonal */
- cave_temp_room_aux(y + 1, x + 1);
- cave_temp_room_aux(y - 1, x - 1);
- cave_temp_room_aux(y - 1, x + 1);
- cave_temp_room_aux(y + 1, x - 1);
+ cave_temp_lite_room_aux(y + 1, x + 1);
+ cave_temp_lite_room_aux(y - 1, x - 1);
+ cave_temp_lite_room_aux(y - 1, x + 1);
+ cave_temp_lite_room_aux(y + 1, x - 1);
}
/* Now, lite them all up at once */
int i, x, y;
/* Add the initial grid */
- cave_temp_room_aux(y1, x1);
+ cave_temp_unlite_room_aux(y1, x1);
/* Spread, breadth first */
for (i = 0; i < temp_n; i++)
if (!cave_floor_bold(y, x)) continue;
/* Spread adjacent */
- cave_temp_room_aux(y + 1, x);
- cave_temp_room_aux(y - 1, x);
- cave_temp_room_aux(y, x + 1);
- cave_temp_room_aux(y, x - 1);
+ cave_temp_unlite_room_aux(y + 1, x);
+ cave_temp_unlite_room_aux(y - 1, x);
+ cave_temp_unlite_room_aux(y, x + 1);
+ cave_temp_unlite_room_aux(y, x - 1);
/* Spread diagonal */
- cave_temp_room_aux(y + 1, x + 1);
- cave_temp_room_aux(y - 1, x - 1);
- cave_temp_room_aux(y - 1, x + 1);
- cave_temp_room_aux(y + 1, x - 1);
+ cave_temp_unlite_room_aux(y + 1, x + 1);
+ cave_temp_unlite_room_aux(y - 1, x - 1);
+ cave_temp_unlite_room_aux(y - 1, x + 1);
+ cave_temp_unlite_room_aux(y + 1, x - 1);
}
/* Now, darken them all at once */
{
int tx, ty;
- int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
+ int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
if (typ == GF_CONTROL_LIVING) flg|= PROJECT_HIDE;
/* Use the given direction */
{
int tx, ty;
- int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
+ int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
/* Use the given direction */
tx = px + 99 * ddx[dir];
{
int tx, ty;
- int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF | PROJECT_HIDE;
+ int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_HIDE;
/* Use the given direction */
tx = px + 99 * ddx[dir];
*/
bool fire_meteor(int who, int typ, int y, int x, int dam, int rad)
{
- int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_NO_REF;
+ int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
/* Analyze the "target" and the caster. */
return (project(who, rad, y, x, dam, typ, flg, -1));
}
+bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev)
+{
+ int ly, lx, ld;
+ int ty, tx, y, x;
+ int i;
+
+ int flg = PROJECT_FAST | PROJECT_THRU | PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID;
+
+ /* Assume okay */
+ bool result = TRUE;
+
+ /* Use the given direction */
+ if (dir != 5)
+ {
+ ly = ty = py + 20 * ddy[dir];
+ lx = tx = px + 20 * ddx[dir];
+ }
+
+ /* Use an actual "target" */
+ else if (dir == 5)
+ {
+ tx = target_col;
+ ty = target_row;
+
+ lx = 20 * (tx - px) + px;
+ ly = 20 * (ty - py) + py;
+ }
+
+ ld = distance(py, px, ly, lx);
+
+ /* Blast */
+ for (i = 0; i < num; i++)
+ {
+ while (1)
+ {
+ /* Get targets for some bolts */
+ y = rand_spread(ly, ld * dev / 20);
+ x = rand_spread(lx, ld * dev / 20);
+
+ if (distance(ly, lx, y, x) <= ld * dev / 20) break;
+ }
+
+ /* Analyze the "dir" and the "target". */
+ if (!project(0, 0, y, x, damroll(dd, ds), typ, flg, -1))
+ {
+ result = FALSE;
+ }
+ }
+
+ return (result);
+}
+
+
/*
* Switch position with a monster.
*/
verify_panel();
/* Update stuff */
- p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
-
- /* Notice changes in view */
- if (r_ptr->flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2 | RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
- {
- /* Update some things */
- p_ptr->update |= (PU_MON_LITE);
- }
+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
/* Update the monsters */
p_ptr->update |= (PU_DISTANCE);
*/
bool fire_bolt(int typ, int dir, int dam)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_GRID;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID;
return (project_hook(typ, dir, dam, flg));
}
*/
bool fire_bolt_or_beam(int prob, int typ, int dir, int dam)
{
- if (rand_int(100) < prob)
+ if (randint0(100) < prob)
{
return (fire_beam(typ, dir, dam));
}
bool drain_life(int dir, int dam)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_DRAIN, dir, dam, flg));
}
bool wall_to_mud(int dir)
{
int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
- return (project_hook(GF_KILL_WALL, dir, 20 + randint(30), flg));
+ return (project_hook(GF_KILL_WALL, dir, 20 + randint1(30), flg));
}
bool wizard_lock(int dir)
{
int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
- return (project_hook(GF_JAM_DOOR, dir, 20 + randint(30), flg));
+ return (project_hook(GF_JAM_DOOR, dir, 20 + randint1(30), flg));
}
bool heal_monster(int dir, int dam)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_HEAL, dir, dam, flg));
}
bool speed_monster(int dir)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_SPEED, dir, p_ptr->lev, flg));
}
bool slow_monster(int dir)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_SLOW, dir, p_ptr->lev, flg));
}
bool sleep_monster(int dir)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_SLEEP, dir, p_ptr->lev, flg));
}
}
+bool stasis_evil(int dir)
+{
+ return (fire_ball_hide(GF_STASIS_EVIL, dir, p_ptr->lev*2, 0));
+}
+
+
bool confuse_monster(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_CONF, dir, plev, flg));
}
bool stun_monster(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_STUN, dir, plev, flg));
}
bool poly_monster(int dir)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
bool tester = (project_hook(GF_OLD_POLY, dir, p_ptr->lev, flg));
if (tester)
chg_virtue(V_CHANCE, 1);
bool clone_monster(int dir)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_CLONE, dir, 0, flg));
}
bool fear_monster(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_TURN_ALL, dir, plev, flg));
}
bool death_ray(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_DEATH_RAY, dir, plev * 200, flg));
}
bool dummy = (project(0, 1, py, px, 0, GF_STONE_WALL, flg, -1));
/* Update stuff */
- p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
/* Update the monsters */
p_ptr->update |= (PU_MONSTERS);
GF_HELL_FIRE, GF_DISINTEGRATE, GF_PSY_SPEAR
};
- Chaos_type = hurt_types[rand_int(31)];
- if (randint(4) == 1) line_chaos = TRUE;
+ Chaos_type = hurt_types[randint0(31)];
+ if (one_in_(4)) line_chaos = TRUE;
- if (randint(6) == 1)
+ if (one_in_(6))
{
for (dummy = 1; dummy < 10; dummy++)
{
}
}
}
- else if (randint(3) == 1)
+ else if (one_in_(3))
{
fire_ball(Chaos_type, 0, 500, 8);
}
do
{
- switch (randint(34))
+ switch (randint1(34))
{
case 28: case 29:
if (!(*count))
msg_print("The ground trembles...");
#endif
- earthquake(py, px, 5 + rand_int(10));
- if (randint(6) != 1) break;
+ earthquake(py, px, 5 + randint0(10));
+ if (!one_in_(6)) break;
}
case 30: case 31:
if (!(*count))
#else
take_hit(DAMAGE_NOESCAPE, dam, "released pure mana", -1);
#endif
- if (randint(6) != 1) break;
+ if (!one_in_(6)) break;
}
case 32: case 33:
if (!(*count))
#endif
teleport_player(damroll(10, 10));
- if (rand_int(13)) (*count) += activate_hi_summon(py, px, FALSE);
- if (randint(6) != 1) break;
+ if (randint0(13)) (*count) += activate_hi_summon(py, px, FALSE);
+ if (!one_in_(6)) break;
}
case 34:
#ifdef JP
#endif
wall_breaker();
- if (!rand_int(7))
+ if (!randint0(7))
{
project(0, 7, py, px, 50, GF_KILL_WALL, flg, -1);
#ifdef JP
take_hit(DAMAGE_NOESCAPE, 50, "surge of energy", -1);
#endif
}
- if (randint(6) != 1) break;
+ if (!one_in_(6)) break;
case 1: case 2: case 3: case 16: case 17:
aggravate_monsters(0);
- if (randint(6) != 1) break;
+ if (!one_in_(6)) break;
case 4: case 5: case 6:
(*count) += activate_hi_summon(py, px, FALSE);
- if (randint(6) != 1) break;
+ if (!one_in_(6)) break;
case 7: case 8: case 9: case 18:
- (*count) += summon_specific(0, py, px, dun_level, 0, TRUE, FALSE, FALSE, TRUE, TRUE);
- if (randint(6) != 1) break;
+ (*count) += summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+ if (!one_in_(6)) break;
case 10: case 11: case 12:
#ifdef JP
msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª");
#endif
lose_exp(p_ptr->exp / 16);
- if (randint(6) != 1) break;
+ if (!one_in_(6)) break;
case 13: case 14: case 15: case 19: case 20:
- if (stop_ty || (p_ptr->free_act && (randint(125) < p_ptr->skill_sav)) || (p_ptr->pclass == CLASS_BERSERKER))
+ if (stop_ty || (p_ptr->free_act && (randint1(125) < p_ptr->skill_sav)) || (p_ptr->pclass == CLASS_BERSERKER))
{
/* Do nothing */ ;
}
#endif
if (p_ptr->free_act)
- set_paralyzed(p_ptr->paralyzed + randint(3));
+ set_paralyzed(p_ptr->paralyzed + randint1(3));
else
- set_paralyzed(p_ptr->paralyzed + randint(13));
+ set_paralyzed(p_ptr->paralyzed + randint1(13));
stop_ty = TRUE;
}
- if (randint(6) != 1) break;
+ if (!one_in_(6)) break;
case 21: case 22: case 23:
- (void)do_dec_stat(rand_int(6));
- if (randint(6) != 1) break;
+ (void)do_dec_stat(randint0(6));
+ if (!one_in_(6)) break;
case 24:
#ifdef JP
msg_print("¤Û¤¨¡©»ä¤Ïï¡©¤³¤³¤Ç²¿¤·¤Æ¤ë¡©");
#endif
lose_all_info();
- if (randint(6) != 1) break;
+ if (!one_in_(6)) break;
case 25:
/*
* Only summon Cyberdemons deep in the dungeon.
stop_ty = TRUE;
break;
}
- if (randint(6) != 1) break;
+ if (!one_in_(6)) break;
default:
while (i < 6)
{
{
(void)do_dec_stat(i);
}
- while (randint(2) == 1);
+ while (one_in_(2));
i++;
}
}
}
- while ((randint(3) == 1) && !stop_ty);
+ while (one_in_(3) && !stop_ty);
return stop_ty;
}
{
int i;
int count = 0;
- bool pet = FALSE, friendly = FALSE, not_pet;
int summon_lev;
+ u32b mode = PM_ALLOW_GROUP;
+ bool pet = FALSE;
if (can_pet)
{
if (one_in_(4))
{
- friendly = TRUE;
+ mode |= PM_FORCE_FRIENDLY;
}
else
{
+ mode |= PM_FORCE_PET;
pet = TRUE;
}
}
- not_pet = (bool)(!pet);
- summon_lev = (pet ? p_ptr->lev * 2 / 3 + randint(p_ptr->lev / 2) : dun_level);
+ if (!pet) mode |= PM_NO_PET;
+
+ summon_lev = (pet ? p_ptr->lev * 2 / 3 + randint1(p_ptr->lev / 2) : dun_level);
- for (i = 0; i < (randint(7) + (dun_level / 40)); i++)
+ for (i = 0; i < (randint1(7) + (dun_level / 40)); i++)
{
- switch (randint(25) + (dun_level / 20))
+ switch (randint1(25) + (dun_level / 20))
{
case 1: case 2:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, mode);
break;
case 3: case 4:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, mode);
break;
case 5: case 6:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, mode);
break;
case 7: case 8:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, mode);
break;
case 9: case 10:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, mode);
break;
case 11: case 12:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, mode);
break;
case 13: case 14:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, mode);
break;
case 15: case 16:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, mode);
break;
case 17:
- if (pet || friendly) break;
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, TRUE, friendly, pet, TRUE, not_pet);
+ if (can_pet) break;
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE));
break;
case 18: case 19:
- if (pet || friendly) break;
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, TRUE, friendly, pet, TRUE, not_pet);
+ if (can_pet) break;
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE));
break;
case 20: case 21:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, TRUE, friendly, pet, (bool)(!friendly && !pet), not_pet);
+ if (!can_pet) mode |= PM_ALLOW_UNIQUE;
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, mode);
break;
case 22: case 23:
- count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, TRUE, friendly, pet, (bool)(!friendly && !pet), not_pet);
+ if (!can_pet) mode |= PM_ALLOW_UNIQUE;
+ count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, mode);
break;
case 24:
- count += summon_specific((pet ? -1 : 0), y, x, 100, SUMMON_CYBER, TRUE, friendly, pet, FALSE, not_pet);
+ count += summon_specific((pet ? -1 : 0), y, x, 100, SUMMON_CYBER, mode);
break;
default:
- count += summon_specific((pet ? -1 : 0), y, x,pet ? summon_lev : (((summon_lev * 3) / 2) + 5), 0, TRUE, friendly, pet, (bool)(!friendly && !pet), not_pet);
+ if (!can_pet) mode |= PM_ALLOW_UNIQUE;
+ count += summon_specific((pet ? -1 : 0), y, x,pet ? summon_lev : (((summon_lev * 3) / 2) + 5), 0, mode);
}
}
int summon_cyber(int who, int y, int x)
{
int i;
- int max_cyber = (easy_band ? 1 : (dun_level / 50) + randint(2));
+ int max_cyber = (easy_band ? 1 : (dun_level / 50) + randint1(2));
int count = 0;
-
- bool friendly = FALSE;
- bool pet = FALSE;
+ u32b mode = PM_ALLOW_GROUP;
/* Summoned by a monster */
if (who > 0)
{
monster_type *m_ptr = &m_list[who];
- friendly = is_friendly(m_ptr);
- pet = is_pet(m_ptr);
+ if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
}
if (max_cyber > 4) max_cyber = 4;
for (i = 0; i < max_cyber; i++)
{
- count += summon_specific(who, y, x, 100, SUMMON_CYBER, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(who, y, x, 100, SUMMON_CYBER, mode);
}
return count;
int y, x;
int attempts = 1000;
- if (randint(80 + p_ptr->lev) < 70)
+ if (randint1(80 + p_ptr->lev) < 70)
{
- while(attempts--)
+ while (attempts--)
{
scatter(&y, &x, py, px, 4, 0);
if (!cave_floor_bold(y, x)) continue;
- if ((y != py) || (x != px)) break;
+ if (!player_bold(y, x)) break;
}
- project(0, 0, y, x, 20 + randint(30), GF_KILL_WALL,
+ project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
(PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
}
- else if (randint(100) > 30)
+ else if (randint1(100) > 30)
{
earthquake(py, px, 1);
}
for (i = 0; i < num; i++)
{
- while(1)
+ while (1)
{
scatter(&y, &x, py, px, 10, 0);
- if ((y != py) && (x != px)) break;
+ if (!player_bold(y, x)) break;
}
- project(0, 0, y, x, 20 + randint(30), GF_KILL_WALL,
+ project(0, 0, y, x, 20 + randint1(30), GF_KILL_WALL,
(PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
}
}
int y, x;
if (p_ptr->confused || p_ptr->blind || p_ptr->paralyzed || p_ptr->image) return;
- if (rand_int(200) < p_ptr->stun) return;
+ if (randint0(200) < p_ptr->stun) return;
if (!success && one_in_(3))
{
y = py;
x = px;
- teleport_player(10+randint(90));
+ teleport_player(10+randint1(90));
object_wipe(q_ptr);
object_prep(q_ptr, lookup_kind(TV_STATUE, SV_WOODEN_STATUE));
-#ifdef USE_SCRIPT
- q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
q_ptr->pval = MON_NINJA;
/* Drop it in the dungeon */