case ACT_SUMMON_ANIMAL:
{
- (void)summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, TRUE, TRUE, TRUE, FALSE, FALSE);
+ (void)summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET));
o_ptr->timeout = 200 + randint1(300);
break;
}
msg_print("You summon a phantasmal servant.");
#endif
- (void)summon_specific(-1, py, px, dun_level, SUMMON_PHANTOM, TRUE, TRUE, TRUE, FALSE, FALSE);
+ (void)summon_specific(-1, py, px, dun_level, SUMMON_PHANTOM, (PM_ALLOW_GROUP | PM_FORCE_PET));
o_ptr->timeout = 200 + randint1(200);
break;
}
case ACT_SUMMON_ELEMENTAL:
{
bool pet = one_in_(3);
- bool group = !(pet && (plev < 50));
+ u32b mode = 0L;
- if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_ELEMENTAL, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
+
+ if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_ELEMENTAL, mode))
{
#ifdef JP
msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤¬¸½¤ì¤¿...");
case ACT_SUMMON_DEMON:
{
bool pet = one_in_(3);
- bool group = !(pet && (plev < 50));
+ u32b mode = 0L;
+
+ if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
- if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), SUMMON_DEMON, mode))
{
#ifdef JP
msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
case ACT_SUMMON_UNDEAD:
{
bool pet = one_in_(3);
- bool group;
- bool unique_okay;
int type;
+ u32b mode = 0L;
type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
- if (pet)
- {
- group = (((plev > 24) && one_in_(3)) ? TRUE : FALSE);
- unique_okay = FALSE;
- }
- else
- {
- group = TRUE;
- unique_okay = TRUE;
- }
- if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), type,
- group, FALSE, pet, unique_okay, (bool)(!pet)))
+ if (!pet || ((plev > 24) && one_in_(3))) mode |= PM_ALLOW_GROUP;
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
+
+ if (summon_specific((pet ? -1 : 0), py, px, ((plev * 3) / 2), type, mode))
{
#ifdef JP
msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
num = 2 + randint1(3);
for (i = 0; i < num; i++)
{
- (void)summon_specific(0, y, x, dun_level, 0, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, y, x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
if (dun_level > randint1(100)) /* No nasty effect for low levels */
if (randint1(100)<dun_level)
activate_hi_summon(py, px, FALSE);
else
- (void)summon_specific(0, y, x, mon_level, 0, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, y, x, mon_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
}
#endif
for (i = 0; i < randint1(3) + 5; i++)
{
- (void)summon_specific(0, y, x, mon_level, SUMMON_ELEMENTAL, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, y, x, mon_level, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
}
for (i = 0; i < randint1(5) + o_ptr->pval / 5; i++)
{
- (void)summon_specific(0, y, x, mon_level, SUMMON_BIRD, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, y, x, mon_level, SUMMON_BIRD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
}
for (i = 0; i < randint1(3) + 2; i++)
{
(void)fire_meteor(-1, GF_FIRE, y, x, 10, 5);
- (void)summon_specific(0, y, x, mon_level, SUMMON_DEMON, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, y, x, mon_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
}
for (i = 0; i < randint1(3) + 2; i++)
{
- (void)summon_specific(0, y, x, mon_level, SUMMON_DRAGON, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, y, x, mon_level, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
}
for (i = 0; i < randint1(5) + 3; i++)
{
- (void)summon_specific(0, y, x, mon_level, SUMMON_HYBRID, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, y, x, mon_level, SUMMON_HYBRID, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
}
for (i = 0; i < randint1(3) + 2; i++)
{
- (void)summon_specific(0, y, x, mon_level, SUMMON_VORTEX, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, y, x, mon_level, SUMMON_VORTEX, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
}
}
{
j = 100;
- if (!(summon_named_creature(0, y, x, q_ptr->pval, FALSE, FALSE, FALSE,
- (bool)!(cursed_p(q_ptr)))))
+ if (!(summon_named_creature(0, y, x, q_ptr->pval,
+ !(cursed_p(q_ptr)) ? PM_FORCE_PET : 0L)))
#ifdef JP
msg_print("¿Í·Á¤ÏDZ¤¸¶Ê¤¬¤êºÕ¤±»¶¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª");
#else
case 35:
while (counter++ < 8)
{
- (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, TRUE, FALSE, FALSE, FALSE, TRUE);
+ (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET));
}
break;
case 36:
confuse_monsters(plev * 4);
turn_monsters(plev * 4);
stasis_monsters(plev * 4);
- summon_specific(-1, py, px, plev, SUMMON_ANGEL, TRUE, TRUE, TRUE, FALSE, FALSE);
+ summon_specific(-1, py, px, plev, SUMMON_ANGEL, (PM_ALLOW_GROUP | PM_FORCE_PET));
(void)set_hero(randint1(25) + 25, FALSE);
(void)hp_player(300);
(void)set_fast(randint1(20 + plev) + plev, FALSE);
slow_monsters();
break;
case 14: /* Summon Animals */
- if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, TRUE, TRUE, TRUE, FALSE, FALSE)))
+ if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
no_trump = TRUE;
break;
case 15: /* Herbal Healing */
break;
case 23: /* Summon monster, demon */
{
+ u32b mode = 0L;
bool pet = !one_in_(3);
- bool group = !(pet && (plev < 50));
- if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
+ if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
+
+ if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, mode))
{
#ifdef JP
msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
msg_print("Oh no! Mouldering forms rise from the earth around you!");
#endif
- (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
chg_virtue(V_UNLIFE, 1);
}
else if (die < 14)
break;
case 25: /* Raise the Dead */
{
- bool pet = one_in_(3);
- bool group;
int type;
+ bool pet = one_in_(3);
+ u32b mode = 0L;
type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
- if (pet)
- {
- group = (((plev > 24) && one_in_(3)) ? TRUE : FALSE);
- }
- else
- {
- group = TRUE;
- }
- if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, group, FALSE, pet, (bool)(!pet), (bool)(!pet)))
+ if (!pet || (pet && (plev > 24) && one_in_(3)))
+ mode |= PM_ALLOW_GROUP;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
+
+ if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, mode))
{
#ifdef JP
msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½¤ò±¿¤ó¤Ç¤¤¤ë...");
case 1: /* Trump Spiders */
{
bool pet = success; /* (randint1(5) > 2) */
+ u32b mode = PM_ALLOW_GROUP;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
#ifdef JP
msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
msg_print("You concentrate on the trump of an spider...");
#endif
-
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, TRUE, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, mode))
{
if (!pet)
#ifdef JP
#else
msg_print("The summoned spiders get angry!");
#endif
-
}
else
{
msg_print("Oh no! It's the Devil!");
#endif
- (void)summon_specific(0, py, px, dun_level, SUMMON_DEMON, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
else if (die < 18)
{
msg_print("It's the picture of a strange monster.");
#endif
- if (!(summon_specific(0, py, px, (dun_level * 3) / 2, 32 + randint1(6), TRUE, FALSE, FALSE, TRUE, TRUE)))
+ if (!(summon_specific(0, py, px, (dun_level * 3) / 2, 32 + randint1(6), (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET))))
no_trump = TRUE;
}
else if (die < 33)
msg_print("It's the picture of a friendly monster.");
#endif
- if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE1, FALSE, TRUE, TRUE, FALSE, FALSE)))
+ if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE1, PM_FORCE_PET)))
no_trump = TRUE;
}
else if (die < 84)
msg_print("It's the picture of a friendly monster.");
#endif
- if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE2, FALSE, TRUE, TRUE, FALSE, FALSE)))
+ if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE2, PM_FORCE_PET)))
no_trump = TRUE;
}
else if (die < 86)
msg_print("It's the picture of a friendly monster.");
#endif
- if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE4, FALSE, TRUE, TRUE, FALSE, FALSE)))
+ if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE4, PM_FORCE_PET)))
no_trump = TRUE;
}
else if (die < 88)
msg_print("It's the picture of a friendly monster.");
#endif
- if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE5, FALSE, TRUE, TRUE, FALSE, FALSE)))
+ if (!(summon_specific(-1, py, px, (dun_level * 3) / 2, SUMMON_BIZARRE5, PM_FORCE_PET)))
no_trump = TRUE;
}
else if (die < 96)
{
bool pet = success; /* was (randint1(5) > 2) */
int type = (pet ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
- bool group = (pet ? FALSE : TRUE);
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
{
if (!pet)
#ifdef JP
for (dummy = 2 + randint0(plev / 7); dummy > 0; dummy--)
{
bool pet = success; /* was (randint1(10) > 3) */
- bool group = (pet ? FALSE : TRUE);
+ u32b mode = 0L;
int type;
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
+
if (p_ptr->pclass == CLASS_BEASTMASTER)
{
type = SUMMON_KAMIKAZE_LIVING;
type = SUMMON_KAMIKAZE;
}
- if (summon_specific((pet ? -1 : 0), y, x, summon_lev, type, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), y, x, summon_lev, type, mode))
{
if (!pet)
#ifdef JP
case 10: /* Phantasmal Servant */
if (success)
{
- if (summon_specific(-1, py, px, (summon_lev * 3) / 2, SUMMON_PHANTOM, FALSE, TRUE, TRUE, FALSE, FALSE))
+ if (summon_specific(-1, py, px, (summon_lev * 3) / 2, SUMMON_PHANTOM, PM_FORCE_PET))
{
#ifdef JP
msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
case 17: /* Trump Undead */
{
bool pet = success; /* (randint1(10) > 3) */
- bool group = (pet ? FALSE : TRUE);
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, mode))
{
if (!pet)
#ifdef JP
case 18: /* Trump Reptiles */
{
bool pet = success; /* was (randint1(5) > 2) */
- bool group = !pet;
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, mode))
{
if (!pet)
#ifdef JP
for (dummy = 0; dummy < 1 + ((plev - 15)/ 10); dummy++)
{
bool pet = success; /* was (randint1(10) > 3) */
- bool group = (pet ? FALSE : TRUE);
int type;
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
+
+ if (unique_okay) mode |= PM_ALLOW_UNIQUE;
if (p_ptr->pclass == CLASS_BEASTMASTER)
{
type = 0;
}
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, unique_okay, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
{
if (!pet)
#ifdef JP
case 20: /* Trump Hounds */
{
bool pet = success; /* was (randint1(5) > 2) */
+ u32b mode = PM_ALLOW_GROUP;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, TRUE, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, mode))
{
if (!pet)
#ifdef JP
case 23: /* Trump Cyberdemon */
{
bool pet = success; /* was (randint1(10) > 3) */
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, FALSE, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, mode))
{
if (!pet)
#ifdef JP
case 27: /* Trump Dragon */
{
bool pet = success; /* was (randint1(10) > 3) */
- bool group = (pet ? FALSE : TRUE);
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, mode))
{
if (!pet)
#ifdef JP
case 29: /* Trump Demon */
{
bool pet = success; /* was (randint1(10) > 3) */
- bool group = (pet ? FALSE : TRUE);
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, mode))
{
if (!pet)
#ifdef JP
case 30: /* Trump Greater Undead */
{
bool pet = success; /* was (randint1(10) > 3) */
- bool group = (pet ? FALSE : TRUE);
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
+
+ if (unique_okay) mode |= PM_ALLOW_UNIQUE;
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, group, FALSE, pet, unique_okay, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, mode))
{
if (!pet)
#ifdef JP
case 31: /* Trump Ancient Dragon */
{
bool pet = success; /* was (randint1(10) > 3) */
- bool group = (pet ? FALSE : TRUE);
int type;
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_GROUP | PM_NO_PET);
+
+ if (unique_okay) mode |= PM_ALLOW_UNIQUE;
+
if (p_ptr->pclass == CLASS_BEASTMASTER)
{
type = SUMMON_HI_DRAGON_LIVING;
#endif
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, group, FALSE, pet, unique_okay, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, type, mode))
{
if (!pet)
#ifdef JP
(void)set_tim_invis(randint1(24) + 24, FALSE);
break;
case 25: /* Conjure Elemental */
- if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, TRUE, TRUE, TRUE, FALSE, FALSE))
+ if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
no_trump = TRUE;
break;
case 26: /* Teleport Level */
(void)pulish_shield();
break;
case 22: /* Create Golem */
- if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, FALSE, TRUE, TRUE, FALSE, FALSE))
+ if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, PM_FORCE_PET))
{
#ifdef JP
msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
damroll(6 + ((plev - 5) / 4), 8));
break;
case 6: /* Summon monster, demon */
- if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, TRUE, FALSE, TRUE, FALSE, FALSE))
+ if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
{
#ifdef JP
msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
case 15: /* Summon monster, demon */
{
bool pet = !one_in_(3);
- bool group = !(pet && (plev < 50));
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
+ if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
- if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, mode))
{
#ifdef JP
msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
}
summon_lev = p_ptr->lev * 2 / 3 + r_info[o_ptr->pval].level;
- if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, TRUE, FALSE, TRUE, FALSE, FALSE))
+ if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET)))
{
#ifdef JP
msg_print("ⲫ¤Î°½¤¬½¼Ëþ¤·¤¿¡£");
case 23: /* Summon monster, angel */
{
bool pet = !one_in_(3);
- bool group = !(pet && (plev < 50));
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
+ if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
- if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, group, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, mode))
{
if (pet)
#ifdef JP
if (cave_empty_bold2(my, mx)) break;
}
if (attempt < 0) continue;
- summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, TRUE, FALSE, TRUE, FALSE, FALSE);
+ summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET));
}
(void)set_hero(randint1(25) + 25, FALSE);
(void)set_blessed(randint1(25) + 25, FALSE);
{
for (k = 0; k < randint1(3); k++)
{
- if (summon_specific(0, py, px, dun_level, 0, TRUE, FALSE, FALSE, TRUE, TRUE))
+ if (summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
{
ident = TRUE;
}
{
for (k = 0; k < randint1(3); k++)
{
- if (summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, TRUE, FALSE, FALSE, TRUE, TRUE))
+ if (summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
{
ident = TRUE;
}
case SV_SCROLL_SUMMON_PET:
{
- if (summon_specific(-1, py, px, dun_level, 0, TRUE, TRUE, TRUE, FALSE, FALSE))
+ if (summon_specific(-1, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_FORCE_PET)))
{
ident = TRUE;
}
case SV_SCROLL_SUMMON_KIN:
{
- if (summon_kin_player(TRUE, p_ptr->lev, py, px, TRUE))
+ if (summon_kin_player(p_ptr->lev, py, px, (PM_FORCE_PET | PM_ALLOW_GROUP)))
{
ident = TRUE;
}
{
for (k = 0; k < randint1(4); k++)
{
- if (summon_specific(0, py, px, dun_level, 0, TRUE, FALSE, FALSE, TRUE, TRUE))
+ if (summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
{
ident = TRUE;
}
msg_print("You summon the Legion of the Dawn.");
#endif
- (void)summon_specific(-1, py, px, dun_level, SUMMON_DAWN, TRUE, TRUE, TRUE, FALSE, FALSE);
+ (void)summon_specific(-1, py, px, dun_level, SUMMON_DAWN, (PM_ALLOW_GROUP | PM_FORCE_PET));
o_ptr->timeout = 500 + randint1(500);
break;
}
}
case ART_ARRYU:
{
+ u32b mode = PM_ALLOW_GROUP;
bool pet = !one_in_(5);
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= PM_NO_PET;
- if (summon_specific((pet ? -1 : 0), py, px, ((p_ptr->lev * 3) / 2), SUMMON_HOUND, TRUE, FALSE, pet, FALSE, (bool)(!pet)))
+ if (summon_specific((pet ? -1 : 0), py, px, ((p_ptr->lev * 3) / 2), SUMMON_HOUND, mode))
{
if (pet)
cptr kakusan = "";
#endif
- if (summon_named_creature(0, py, px, MON_SUKE, FALSE, FALSE, TRUE, TRUE))
+ if (summon_named_creature(0, py, px, MON_SUKE, PM_FORCE_PET))
{
#ifdef JP
msg_print("¡Ø½õ¤µ¤ó¡Ù¤¬¸½¤ì¤¿¡£");
#endif
count++;
}
- if (summon_named_creature(0, py, px, MON_KAKU, FALSE, FALSE, TRUE, TRUE))
+ if (summon_named_creature(0, py, px, MON_KAKU, PM_FORCE_PET))
{
#ifdef JP
msg_print("¡Ø³Ê¤µ¤ó¡Ù¤¬¸½¤ì¤¿¡£");
}
case ART_JIZO:
{
+ u32b mode = PM_ALLOW_GROUP;
bool pet = !one_in_(5);
+ if (pet) mode |= PM_FORCE_PET;
- if (summon_named_creature(0, py, px, MON_JIZOTAKO, FALSE, TRUE, FALSE, pet))
+ if (summon_named_creature(0, py, px, MON_JIZOTAKO, mode))
{
if (pet)
#ifdef JP
if (!get_rep_dir2(&dir)) return;
if (cave_floor_bold(py+ddy[dir],px+ddx[dir]))
{
- if (place_monster_aux(0, py + ddy[dir], px + ddx[dir], o_ptr->pval, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE))
+ if (place_monster_aux(0, py + ddy[dir], px + ddx[dir], o_ptr->pval, (PM_FORCE_PET | PM_NO_KAGE)))
{
if (o_ptr->xtra3) m_list[hack_m_idx_ii].mspeed = o_ptr->xtra3;
if (o_ptr->xtra5) m_list[hack_m_idx_ii].max_maxhp = o_ptr->xtra5;
#define PW_BORG_1 0x00004000L /* Display borg messages */
#define PW_BORG_2 0x00008000L /* Display borg status */
+/*
+ * Bit flags for the place_monster_???() (etc)
+ */
+#define PM_ALLOW_SLEEP 0x00000001
+#define PM_ALLOW_GROUP 0x00000002
+#define PM_FORCE_FRIENDLY 0x00000004
+#define PM_FORCE_PET 0x00000008
+#define PM_NO_KAGE 0x00000010
+#define PM_NO_PET 0x00000020
+#define PM_ALLOW_UNIQUE 0x00000040
/*
#define is_friendly(A) \
(bool)(((A)->smart & SM_FRIENDLY) ? TRUE : FALSE)
+#define is_friendly_idx(IDX) \
+ (bool)((IDX) > 0 && is_friendly(&m_list[(IDX)]))
+
#define is_pet(A) \
(bool)(((A)->smart & SM_PET) ? TRUE : FALSE)
!p_ptr->anti_magic && (randint1(6666) == 666))
{
bool pet = one_in_(6);
- bool not_pet = (bool)(!pet);
+ u32b mode = PM_ALLOW_GROUP;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
if (summon_specific((pet ? -1 : 0), py, px,
- dun_level, SUMMON_DEMON, TRUE, FALSE, pet, not_pet, not_pet))
+ dun_level, SUMMON_DEMON, mode))
{
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤ò°ú¤´ó¤»¤¿¡ª");
!p_ptr->anti_magic && one_in_(7000))
{
bool pet = one_in_(3);
- bool not_pet = (bool)(!pet);
+ u32b mode = PM_ALLOW_GROUP;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
- if (summon_specific((pet ? -1 : 0), py, px, dun_level, SUMMON_ANIMAL,
- TRUE, FALSE, pet, not_pet, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, dun_level, SUMMON_ANIMAL, mode))
{
#ifdef JP
msg_print("ưʪ¤ò°ú¤´ó¤»¤¿¡ª");
!p_ptr->anti_magic && one_in_(3000))
{
bool pet = one_in_(5);
- bool not_pet = (bool)(!pet);
+ u32b mode = PM_ALLOW_GROUP;
+
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
- if (summon_specific((pet ? -1 : 0), py, px, dun_level, SUMMON_DRAGON,
- TRUE, FALSE, pet, not_pet, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, dun_level, SUMMON_DRAGON, mode))
{
#ifdef JP
msg_print("¥É¥é¥´¥ó¤ò°ú¤´ó¤»¤¿¡ª");
if ((p_ptr->cursed & TRC_CALL_ANIMAL) && one_in_(2500))
{
if (summon_specific(0, py, px, dun_level, SUMMON_ANIMAL,
- TRUE, FALSE, FALSE, TRUE, TRUE))
+ (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
{
char o_name[MAX_NLEN];
/* Call demon */
if ((p_ptr->cursed & TRC_CALL_DEMON) && one_in_(1111))
{
- if (summon_specific(0, py, px, dun_level, SUMMON_DEMON,
- TRUE, FALSE, FALSE, TRUE, TRUE))
+ if (summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
{
char o_name[MAX_NLEN];
if ((p_ptr->cursed & TRC_CALL_DRAGON) && one_in_(800))
{
if (summon_specific(0, py, px, dun_level, SUMMON_DRAGON,
- TRUE, FALSE, FALSE, TRUE, TRUE))
+ (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
{
char o_name[MAX_NLEN];
int y, x;
y = py+ddy[tsuri_dir];
x = px+ddx[tsuri_dir];
- if (place_monster_aux(0, y, x, r_idx, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE))
+ if (place_monster_aux(0, y, x, r_idx, PM_NO_KAGE))
{
char m_name[80];
monster_desc(m_name, &m_list[cave[y][x].m_idx], 0);
int pet_r_idx = ((p_ptr->pclass == CLASS_CAVALRY) ? MON_HORSE : MON_YASE_HORSE);
monster_race *r_ptr = &r_info[pet_r_idx];
place_monster_aux(0, py, px - 1, pet_r_idx,
- FALSE, FALSE, TRUE, TRUE, TRUE, FALSE);
+ (PM_FORCE_PET | PM_NO_KAGE));
m_ptr = &m_list[hack_m_idx_ii];
m_ptr->mspeed = r_ptr->speed;
m_ptr->maxhp = r_ptr->hdice*(r_ptr->hside+1)/2;
extern void lore_treasure(int m_idx, int num_item, int num_gold);
extern void update_mon(int m_idx, bool full);
extern void update_monsters(bool full);
-extern bool place_monster_aux(int who, int y, int x, int r_idx, bool slp, bool grp, bool friendly, bool pet, bool no_kage, bool no_pet);
-extern bool place_monster(int y, int x, bool slp, bool grp);
+extern bool place_monster_aux(int who, int y, int x, int r_idx, u32b mode);
+extern bool place_monster(int y, int x, u32b mode);
extern bool alloc_horde(int y, int x);
-extern bool alloc_monster(int dis, bool slp);
-extern bool summon_specific(int who, int y1, int x1, int lev, int type, bool group, bool friendly, bool pet, bool unique_okay, bool no_pet);
-extern bool summon_named_creature(int who, int oy, int ox, int r_idx, bool slp, bool group_ok, bool friendly, bool pet);
-extern bool multiply_monster(int m_idx, bool clone, bool friendly, bool pet);
+extern bool alloc_monster(int dis, u32b mode);
+extern bool summon_specific(int who, int y1, int x1, int lev, int type, u32b mode);
+extern bool summon_named_creature (int who, int oy, int ox, int r_idx, u32b mode);
+extern bool multiply_monster(int m_idx, bool clone, u32b mode);
extern void update_smart_learn(int m_idx, int what);
extern void choose_new_monster(int m_idx, bool born, int r_idx);
-extern bool place_monster_one(int who, int y, int x, int r_idx, bool slp, bool friendly, bool pet, bool no_pet);
+extern bool place_monster_one(int who, int y, int x, int r_idx, u32b mode);
extern bool player_place(int y, int x);
extern void monster_drop_carried_objects(monster_type *m_ptr);
extern bool brand_bolts(void);
extern bool polymorph_monster(int y, int x);
extern bool dimension_door(void);
-extern bool summon_kin_player(bool pet, int level, int y, int x, bool group);
+extern bool summon_kin_player(int level, int y, int x, u32b mode);
/* store.c */
extern void do_cmd_store(void);
}
else
{
- bool group;
+ u32b mode = (PM_NO_KAGE | PM_NO_PET);
for (j = 0; j < (quest[i].max_num - quest[i].cur_num); j++)
{
else break;
}
- if (r_ptr->flags1 & RF1_FRIENDS)
- group = FALSE;
- else
- group = TRUE;
+ if (!(r_ptr->flags1 & RF1_FRIENDS))
+ mode |= PM_ALLOW_GROUP;
/* Try to place the monster */
- if (place_monster_aux(0, y, x, quest[i].r_idx, FALSE, group, FALSE, FALSE, TRUE, TRUE))
+ if (place_monster_aux(0, y, x, quest[i].r_idx, mode))
{
/* Success */
break;
if (cave_empty_bold2(oy, ox) && monster_can_cross_terrain(cave[oy][ox].feat, &r_info[d_info[dungeon_type].final_guardian]))
{
/* Place the guardian */
- if (place_monster_aux(0, oy, ox, d_info[dungeon_type].final_guardian, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE)) break;
+ if (place_monster_aux(0, oy, ox, d_info[dungeon_type].final_guardian, (PM_ALLOW_GROUP | PM_NO_KAGE | PM_NO_PET))) break;
}
/* One less try */
try--;
build_arena();
place_monster_aux(0, py + 5, px, arena_monsters[p_ptr->arena_number],
- FALSE, FALSE, FALSE, FALSE, TRUE, TRUE);
+ (PM_NO_KAGE | PM_NO_PET));
}
for(i=0;i<4;i++)
{
place_monster_aux(0, py + 5 + (i/2)*4, px - 2 + (i%2)*4, battle_mon[i],
- FALSE, FALSE, FALSE, FALSE, TRUE, TRUE);
+ (PM_NO_KAGE | PM_NO_PET));
set_friendly(&m_list[cave[py+5+(i/2)*4][px-2+(i%2)*4].m_idx]);
}
for(i = 1; i < m_max; i++)
/* Place the monster (allow groups) */
monster_level = base_level + 2;
- (void)place_monster(y, x, TRUE, TRUE);
+ (void)place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
}
}
{
monster_level = base_level + monster_index;
- place_monster(*y, *x, TRUE, TRUE);
+ place_monster(*y, *x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
}
}
/* Place it */
- place_monster_aux(0, *y, *x, monster_index, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, *y, *x, monster_index, (PM_ALLOW_SLEEP | PM_NO_KAGE));
if (clone)
{
/* clone */
{
int dir;
int plev = p_ptr->lev;
- bool unique_okay = FALSE;
- if (randint1(50+plev) < plev/10) unique_okay = TRUE;
+ u32b mode = (PM_ALLOW_GROUP | PM_FORCE_PET);
+ u32b u_mode = 0L;
+
+ if (randint1(50+plev) < plev/10) u_mode = PM_ALLOW_UNIQUE;
/* spell code */
#endif
for (k = 0;k < 4; k++)
{
- (void)summon_kin_player(TRUE, plev, target_row, target_col, TRUE);
+ (void)summon_kin_player(plev, target_row, target_col, (PM_FORCE_PET | PM_ALLOW_GROUP));
}
break;
}
#endif
if (max_cyber > 4) max_cyber = 4;
for (k = 0;k < max_cyber; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_CYBER, TRUE, TRUE, TRUE, FALSE, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_CYBER, mode);
break;
}
case MS_S_MONSTER:
msg_print("You summons help.");
#endif
for (k = 0;k < 1; k++)
- summon_specific(-1, target_row, target_col, plev, 0, TRUE, TRUE, TRUE, unique_okay, FALSE);
+ summon_specific(-1, target_row, target_col, plev, 0, (mode | u_mode));
break;
}
case MS_S_MONSTERS:
msg_print("You summons monsters!");
#endif
for (k = 0;k < 6; k++)
- summon_specific(-1, target_row, target_col, plev, 0, TRUE, TRUE, TRUE, unique_okay, FALSE);
+ summon_specific(-1, target_row, target_col, plev, 0, (mode | u_mode));
break;
}
case MS_S_ANT:
msg_print("You summons ants.");
#endif
for (k = 0;k < 6; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_ANT, TRUE, TRUE, TRUE, FALSE, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_ANT, mode);
break;
}
case MS_S_SPIDER:
msg_print("You summons spiders.");
#endif
for (k = 0;k < 6; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_SPIDER, TRUE, TRUE, TRUE, FALSE, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_SPIDER, mode);
break;
}
case MS_S_HOUND:
msg_print("You summons hounds.");
#endif
for (k = 0;k < 4; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_HOUND, TRUE, TRUE, TRUE, FALSE, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_HOUND, mode);
break;
}
case MS_S_HYDRA:
msg_print("You summons hydras.");
#endif
for (k = 0;k < 4; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_HYDRA, TRUE, TRUE, TRUE, FALSE, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_HYDRA, mode);
break;
}
case MS_S_ANGEL:
msg_print("You summons angel!");
#endif
for (k = 0;k < 1; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_ANGEL, TRUE, TRUE, TRUE, FALSE, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_ANGEL, mode);
break;
}
case MS_S_DEMON:
msg_print("You summons a demon from the Courts of Chaos!");
#endif
for (k = 0;k < 1; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_DEMON, TRUE, TRUE, TRUE, unique_okay, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_DEMON, (mode | u_mode));
break;
}
case MS_S_UNDEAD:
msg_print("You summons an undead adversary!");
#endif
for (k = 0;k < 1; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_UNDEAD, TRUE, TRUE, TRUE, unique_okay, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_UNDEAD, (mode | u_mode));
break;
}
case MS_S_DRAGON:
msg_print("You summons dragon!");
#endif
for (k = 0;k < 1; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_DRAGON, TRUE, TRUE, TRUE, unique_okay, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_DRAGON, (mode | u_mode));
break;
}
case MS_S_HI_UNDEAD:
msg_print("You summons greater undead!");
#endif
for (k = 0;k < 6; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, TRUE, TRUE, TRUE, unique_okay, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode));
break;
}
case MS_S_HI_DRAGON:
msg_print("You summons ancient dragons!");
#endif
for (k = 0;k < 4; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_HI_DRAGON, TRUE, TRUE, TRUE, unique_okay, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_HI_DRAGON, (mode | u_mode));
break;
}
case MS_S_AMBERITE:
msg_print("You summons Lords of Amber!");
#endif
for (k = 0;k < 4; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_AMBERITES, TRUE, TRUE, TRUE, TRUE, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE));
break;
}
case MS_S_UNIQUE:
msg_print("You summons special opponents!");
#endif
for (k = 0;k < 4; k++)
- if (summon_specific(-1, target_row, target_col, plev, SUMMON_UNIQUE, TRUE, TRUE, TRUE, TRUE, FALSE)) count++;
+ if (summon_specific(-1, target_row, target_col, plev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE))) count++;
for (k = count;k < 4; k++)
- summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, TRUE, TRUE, TRUE, unique_okay, FALSE);
+ summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode));
break;
}
default:
if ((k < 4) && (!k || !randint0(k * MON_MULT_ADJ)))
{
/* Try to multiply */
- if (multiply_monster(m_idx, FALSE, is_friendly(m_ptr), is_pet(m_ptr)))
+ if (multiply_monster(m_idx, FALSE, (is_pet(m_ptr) ? PM_FORCE_PET : 0)))
{
/* Take note if visible */
if (m_ptr->ml)
bool success = FALSE;
for (i = 0; i < 1 + boost/100; i++)
- if (summon_specific(-1, py, px, plev, SUMMON_PHANTOM, FALSE, TRUE, TRUE, FALSE, FALSE))
+ if (summon_specific(-1, py, px, plev, SUMMON_PHANTOM, PM_FORCE_PET))
success = TRUE;
if (success)
{
/*
* Hack -- the hostility of the summoned monster
*/
-static int summon_specific_hostile = TRUE;
+static bool summon_specific_hostile = TRUE;
static bool summon_unique_okay = FALSE;
* This is the only function which may place a monster in the dungeon,
* except for the savefile loading code.
*/
-bool place_monster_one(int who, int y, int x, int r_idx, bool slp, bool friendly, bool pet, bool no_pet)
+//bool place_monster_one(int who, int y, int x, int r_idx, bool slp, bool friendly, bool pet, bool no_pet)
+bool place_monster_one(int who, int y, int x, int r_idx, u32b mode)
{
int i;
int rune_dam = 0;
m_ptr->mflag2 |= MFLAG_KAGE;
}
- if (no_pet) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (mode & PM_NO_PET) m_ptr->mflag2 |= MFLAG_NOPET;
/* Not visible */
m_ptr->ml = FALSE;
/* Pet? */
- if (pet)
+ if (mode & PM_FORCE_PET)
{
set_pet(m_ptr);
}
/* Friendly? */
- else if ((friendly || (r_ptr->flags7 & RF7_FRIENDLY)) &&
- !(p_ptr->align >= 0 && (r_ptr->flags3 & RF3_EVIL)) &&
- !(p_ptr->align < 0 && (r_ptr->flags3 & RF3_GOOD)))
+ else if ((r_ptr->flags7 & RF7_FRIENDLY) ||
+ (mode & PM_FORCE_FRIENDLY) || is_friendly_idx(who))
{
- set_friendly(m_ptr);
+ if (!(p_ptr->align >= 0 && (r_ptr->flags3 & RF3_EVIL)) &&
+ !(p_ptr->align < 0 && (r_ptr->flags3 & RF3_GOOD)))
+ {
+ set_friendly(m_ptr);
+ }
}
/* Assume no sleeping */
m_ptr->csleep = 0;
/* Enforce sleeping if needed */
- if (slp && r_ptr->sleep && !ironman_nightmare)
+ if ((mode & PM_ALLOW_SLEEP) && r_ptr->sleep && !ironman_nightmare)
{
int val = r_ptr->sleep;
m_ptr->csleep = ((val * 2) + randint1(val * 10));
/*
* Attempt to place a "group" of monsters around the given location
*/
-static bool place_monster_group(int who, int y, int x, int r_idx, bool slp, bool friendly, bool pet, bool no_pet)
+//static bool place_monster_group(int who, int y, int x, int r_idx, bool slp, bool friendly, bool pet, bool no_pet)
+static bool place_monster_group(int who, int y, int x, int r_idx, u32b mode)
{
monster_race *r_ptr = &r_info[r_idx];
if (!cave_empty_bold2(my, mx)) continue;
/* Attempt to place another monster */
- if (place_monster_one(who, my, mx, r_idx, slp, friendly, pet, no_pet))
+ if (place_monster_one(who, my, mx, r_idx, mode))
{
/* Add it to the "hack" set */
hack_y[hack_n] = my;
* Note the use of the new "monster allocation table" code to restrict
* the "get_mon_num()" function to "legal" escort types.
*/
-bool place_monster_aux(int who, int y, int x, int r_idx, bool slp, bool grp, bool friendly, bool pet, bool no_kage, bool no_pet)
+//bool place_monster_aux(int who, int y, int x, int r_idx, bool slp, bool grp, bool friendly, bool pet, bool no_kage, bool no_pet)
+bool place_monster_aux(int who, int y, int x, int r_idx, u32b mode)
{
int i;
monster_race *r_ptr = &r_info[r_idx];
- if (one_in_(333) && !no_kage && !pet) is_kage = TRUE;
- else is_kage = FALSE;
+ if (one_in_(333) && !(mode & PM_NO_KAGE) && !(mode & PM_FORCE_PET))
+ is_kage = TRUE;
+ else
+ is_kage = FALSE;
/* Place one monster, or fail */
- if (!place_monster_one(who, y, x, r_idx, slp, friendly, pet, no_pet)) return (FALSE);
+ if (!place_monster_one(who, y, x, r_idx, mode)) return (FALSE);
/* Require the "group" flag */
- if (!grp) return (TRUE);
- place_monster_m_idx = hack_m_idx_ii;
+ if (!(mode & PM_ALLOW_GROUP)) return (TRUE);
+ place_monster_m_idx = hack_m_idx_ii;
/* Friends for certain monsters */
if (r_ptr->flags1 & (RF1_FRIENDS))
{
/* Attempt to place a group */
- (void)place_monster_group(who, y, x, r_idx, slp, friendly, pet, no_pet);
+ (void)place_monster_group(who, y, x, r_idx, mode);
}
if (!z) break;
/* Place a single escort */
- (void)place_monster_one(place_monster_m_idx, ny, nx, z, slp, friendly, pet, no_pet);
+ (void)place_monster_one(place_monster_m_idx, ny, nx, z, mode);
/* Place a "group" of escorts if needed */
if ((r_info[z].flags1 & RF1_FRIENDS) ||
(r_ptr->flags1 & RF1_ESCORTS))
{
/* Place a group of monsters */
- (void)place_monster_group(place_monster_m_idx, ny, nx, z, slp, friendly, pet, no_pet);
+ (void)place_monster_group(place_monster_m_idx, ny, nx, z, mode);
}
}
}
*
* Attempt to find a monster appropriate to the "monster_level"
*/
-bool place_monster(int y, int x, bool slp, bool grp)
+//bool place_monster(int y, int x, bool slp, bool grp)
+bool place_monster(int y, int x, u32b mode)
{
int r_idx;
if (!r_idx) return (FALSE);
/* Attempt to place the monster */
- if (place_monster_aux(0, y, x, r_idx, slp, grp, FALSE, FALSE, FALSE, FALSE)) return (TRUE);
+ if (place_monster_aux(0, y, x, r_idx, mode)) return (TRUE);
/* Oops */
return (FALSE);
while (--attempts)
{
/* Attempt to place the monster */
- if (place_monster_aux(0, y, x, r_idx, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE)) break;
+ if (place_monster_aux(0, y, x, r_idx, 0L)) break;
}
if (attempts < 1) {horde_align = 0;return FALSE;}
{
scatter(&cy, &cx, y, x, 5, 0);
- (void)summon_specific(m_idx, cy, cx, dun_level + 5, SUMMON_KIN, TRUE, FALSE, FALSE, FALSE, FALSE);
+ (void)summon_specific(m_idx, cy, cx, dun_level + 5, SUMMON_KIN, PM_ALLOW_GROUP);
y = cy;
x = cx;
*
* Use "monster_level" for the monster level
*/
-bool alloc_monster(int dis, bool slp)
+//bool alloc_monster(int dis, bool slp)
+bool alloc_monster(int dis, u32b mode)
{
int y = 0, x = 0;
int attempts_left = 10000;
if (cave_empty_bold2(oy, ox) && monster_can_cross_terrain(cave[oy][ox].feat, &r_info[guardian]))
{
/* Place the guardian */
- if (place_monster_aux(0, oy, ox, guardian, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE)) break;
+ if (place_monster_aux(0, oy, ox, guardian, (PM_ALLOW_GROUP | PM_NO_KAGE | PM_NO_PET))) break;
}
/* One less try */
try--;
#endif /* MONSTER_HORDES */
/* Attempt to place the monster, allow groups */
- if (place_monster(y, x, slp, TRUE)) return (TRUE);
+ if (place_monster(y, x, (mode | PM_ALLOW_GROUP))) return (TRUE);
#ifdef MONSTER_HORDES
}
*
* Note that this function may not succeed, though this is very rare.
*/
-bool summon_specific(int who, int y1, int x1, int lev, int type, bool group, bool friendly, bool pet, bool unique_okay, bool no_pet)
+//bool summon_specific(int who, int y1, int x1, int lev, int type, bool group, bool friendly, bool pet, bool unique_okay, bool no_pet)
+bool summon_specific(int who, int y1, int x1, int lev, int type, u32b mode)
{
int x, y, r_idx;
- bool no_kage = FALSE;
-
if (p_ptr->inside_arena) return (FALSE);
if (!mon_scatter(&y, &x, y1, x1, 2)) return FALSE;
/* Save the "summon" type */
summon_specific_type = type;
- summon_unique_okay = unique_okay;
+ summon_unique_okay = (mode & PM_ALLOW_UNIQUE) ? TRUE : FALSE;
/* Save the hostility */
- summon_specific_hostile = (!friendly && !pet);
+ summon_specific_hostile = (!(mode & PM_FORCE_FRIENDLY) && !(is_friendly_idx(who)) && !(mode & PM_FORCE_PET));
/* Prepare allocation table */
get_mon_num_prep(summon_specific_okay, get_monster_hook2(y, x));
return (FALSE);
}
- if ((type == SUMMON_BLUE_HORROR) || (type == SUMMON_DAWN)) no_kage = TRUE;
+ if ((type == SUMMON_BLUE_HORROR) || (type == SUMMON_DAWN)) mode |= PM_NO_KAGE;
/* Attempt to place the monster (awake, allow groups) */
- if (!place_monster_aux(who, y, x, r_idx, FALSE, group, friendly, pet, no_kage, no_pet))
+ if (!place_monster_aux(who, y, x, r_idx, mode))
{
summon_specific_type = 0;
return (FALSE);
}
/* A "dangerous" function, creates a pet of the specified type */
-bool summon_named_creature (int who, int oy, int ox, int r_idx, bool slp, bool group_ok, bool friendly, bool pet)
+//bool summon_named_creature (int who, int oy, int ox, int r_idx, bool slp, bool group_ok, bool friendly, bool pet)
+bool summon_named_creature (int who, int oy, int ox, int r_idx, u32b mode)
{
int x, y;
if (!mon_scatter(&y, &x, oy, ox, 2)) return FALSE;
/* Place it (allow groups) */
- return place_monster_aux(who, y, x, r_idx, slp, group_ok, friendly, pet, TRUE, FALSE);
+ return place_monster_aux(who, y, x, r_idx, (mode | PM_NO_KAGE));
}
*
* Note that "reproduction" REQUIRES empty space.
*/
-bool multiply_monster(int m_idx, bool clone, bool friendly, bool pet)
+//bool multiply_monster(int m_idx, bool clone, bool friendly, bool pet)
+bool multiply_monster(int m_idx, bool clone, u32b mode)
{
monster_type *m_ptr = &m_list[m_idx];
if (!mon_scatter(&y, &x, m_ptr->fy, m_ptr->fx, 1))
return FALSE;
+ if (m_ptr->mflag2 & MFLAG_NOPET) mode |= PM_NO_PET;
+
/* Create a new monster (awake, no groups) */
- if (!place_monster_aux(m_idx, y, x, m_ptr->r_idx, FALSE, FALSE, friendly, pet, TRUE, (bool)(m_ptr->mflag2 & MFLAG_NOPET)))
+ if (!place_monster_aux(m_idx, y, x, m_ptr->r_idx, (mode | PM_NO_KAGE)))
return FALSE;
if (clone)
bool no_inate = FALSE;
bool do_disi = FALSE;
int dam = 0;
+ u32b mode = 0L;
int s_num_6 = (easy_band ? 2 : 6);
int s_num_4 = (easy_band ? 1 : 4);
}
}
+
/* Cast the spell. */
switch (thrown_spell)
{
if (p_ptr->inside_arena || p_ptr->inside_battle) return FALSE;
for (k = 0; k < 6; k++)
{
- count += summon_specific(m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_BIZARRE1, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_BIZARRE1, PM_ALLOW_GROUP);
}
return FALSE;
if (p_ptr->inside_arena || p_ptr->inside_battle || !summon_possible(m_ptr->fy, m_ptr->fx)) return FALSE;
delete_monster_idx(cave[m_ptr->fy][m_ptr->fx].m_idx);
- summon_named_creature(0, dummy_y, dummy_x, MON_BANOR, FALSE, FALSE, is_friendly(m_ptr), FALSE);
+ summon_named_creature(0, dummy_y, dummy_x, MON_BANOR, mode);
m_list[hack_m_idx_ii].hp = dummy_hp;
m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
- summon_named_creature(0, dummy_y, dummy_x, MON_LUPART, FALSE, FALSE, is_friendly(m_ptr), FALSE);
+ summon_named_creature(0, dummy_y, dummy_x, MON_LUPART, mode);
m_list[hack_m_idx_ii].hp = dummy_hp;
m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
delete_monster_idx(k);
}
}
- summon_named_creature(0, dummy_y, dummy_x, MON_BANORLUPART, FALSE, FALSE, is_friendly(m_ptr), FALSE);
+ summon_named_creature(0, dummy_y, dummy_x, MON_BANORLUPART, mode);
m_list[hack_m_idx_ii].hp = dummy_hp;
m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
if(m_ptr->r_idx == MON_ROLENTO)
{
int num = 1 + randint1(3);
+
for (k = 0; k < num; k++)
{
- count += summon_named_creature(m_idx, y, x, MON_SHURYUUDAN, FALSE, FALSE, is_friendly(m_ptr), is_pet(m_ptr));
+ count += summon_named_creature(m_idx, y, x, MON_SHURYUUDAN, mode);
}
}
else if(m_ptr->r_idx == MON_LOUSY)
int num = 2 + randint1(3);
for (k = 0; k < num; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, PM_ALLOW_GROUP);
}
}
else if(m_ptr->r_idx == MON_BULLGATES)
int num = 2 + randint1(3);
for (k = 0; k < num; k++)
{
- count += summon_named_creature(m_idx, y, x, 921, FALSE, FALSE, is_friendly(m_ptr), is_pet(m_ptr));
+ count += summon_named_creature(m_idx, y, x, 921, mode);
}
}
else if (m_ptr->r_idx == MON_CALDARM)
int num = randint1(3);
for (k = 0; k < num; k++)
{
- count += summon_named_creature(m_idx, y, x, 930, FALSE, FALSE, is_friendly(m_ptr), is_pet(m_ptr));
+ count += summon_named_creature(m_idx, y, x, 930, mode);
}
}
else if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
for (k = 0; k < num; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
}
else
for (k = 0; k < 4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, PM_ALLOW_GROUP);
}
}
#ifdef JP
for (k = 0; k < 1; k++)
{
- count += summon_specific(m_idx, y, x, rlev, 0, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
#ifdef JP
if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
for (k = 0; k < s_num_6; k++)
{
- count += summon_specific(m_idx, y, x, rlev, 0, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
#ifdef JP
if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
for (k = 0; k < s_num_6; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP);
}
#ifdef JP
if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
for (k = 0; k < s_num_6; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP);
}
#ifdef JP
if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP);
}
#ifdef JP
if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP);
}
#ifdef JP
if (blind && count) msg_print("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
for (k = 0; k < num; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP);
}
if (count < 2)
for (k = 0; k < 1; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP);
}
#ifdef JP
if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
for (k = 0; k < 1; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP);
}
#ifdef JP
if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
for (k = 0; k < 1; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, TRUE, FALSE, FALSE, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, PM_ALLOW_GROUP);
}
#ifdef JP
if (blind && count) msg_print("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£");
}
if (!cave_floor_bold(cy, cx)) continue;
- if (summon_named_creature(m_idx, cy, cx, MON_NAZGUL, FALSE, FALSE, is_friendly(m_ptr), is_pet(m_ptr)))
+ if (summon_named_creature(m_idx, cy, cx, MON_NAZGUL, mode))
{
y = cy;
x = cx;
for (k = 0; k < s_num_6; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
}
if (blind && count)
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
if (blind && count)
{
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
if (blind && count)
{
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
if (r_ptr->flags3 & RF3_GOOD)
{
for (k = count; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
}
else
{
for (k = count; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
}
if (blind && count)
int dam = 0;
int start;
int plus = 1;
+ u32b p_mode = 0L, u_mode = 0L;
int s_num_6 = (easy_band ? 2 : 6);
int s_num_4 = (easy_band ? 1 : 4);
bool see_both;
bool known;
- bool friendly = is_friendly(m_ptr);
bool pet = is_pet(m_ptr);
- bool not_pet = (bool)(!pet);
+
+ /* Prepare flags for summoning */
+ if (pet) p_mode |= PM_FORCE_PET;
+ if (!pet) u_mode |= PM_ALLOW_UNIQUE;
/* Cannot cast spells when confused */
if (m_ptr->confused) return (FALSE);
{
for (k = 0; k < 6; k++)
{
- summon_specific(m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_BIZARRE1, TRUE, FALSE, FALSE, FALSE, FALSE);
+ summon_specific(m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_BIZARRE1, PM_ALLOW_GROUP);
}
return FALSE;
}
int num = 1 + randint1(3);
for (k = 0; k < num; k++)
{
- count += summon_named_creature(m_idx, y, x, MON_SHURYUUDAN, FALSE, FALSE, is_friendly(m_ptr), pet);
+ count += summon_named_creature(m_idx, y, x, MON_SHURYUUDAN, p_mode);
}
}
else if(m_ptr->r_idx == MON_LOUSY)
int num = 2 + randint1(3);
for (k = 0; k < num; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, (PM_ALLOW_GROUP | p_mode));
}
}
else if(m_ptr->r_idx == MON_BULLGATES)
int num = 2 + randint1(3);
for (k = 0; k < num; k++)
{
- count += summon_named_creature(m_idx, y, x, 921, FALSE, FALSE, is_friendly(m_ptr), FALSE);
+ count += summon_named_creature(m_idx, y, x, 921, p_mode);
}
}
else if (m_ptr->r_idx == MON_CALDARM)
int num = randint1(3);
for (k = 0; k < num; k++)
{
- count += summon_named_creature(m_idx, y, x, 930, FALSE, FALSE, is_friendly(m_ptr), FALSE);
+ count += summon_named_creature(m_idx, y, x, 930, p_mode);
}
}
else if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
int num = 2 + randint1(3);
for (k = 0; k < num; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, TRUE, friendly, pet, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | p_mode | PM_ALLOW_UNIQUE));
}
}
else
for (k = 0; k < 4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, (PM_ALLOW_GROUP | p_mode));
}
}
}
}
- if (friendly)
+ if (is_friendly(m_ptr))
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_CYBER, TRUE, TRUE, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP | p_mode));
}
else
{
}
}
- count += summon_specific(m_idx, y, x, rlev, 0, FALSE, friendly, pet, not_pet, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, 0, (p_mode | u_mode));
if (known && !see_t && count)
{
for (k = 0; k < s_num_6; k++)
{
- count += summon_specific(m_idx, y, x, rlev, 0, TRUE, friendly, pet, not_pet, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | p_mode | u_mode));
}
if (known && !see_t && count)
for (k = 0; k < s_num_6; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, (PM_ALLOW_GROUP | p_mode));
}
if (known && !see_t && count)
for (k = 0; k < s_num_6; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, (PM_ALLOW_GROUP | p_mode));
}
if (known && !see_t && count)
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, (PM_ALLOW_GROUP | p_mode));
}
if (known && !see_t && count)
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, (PM_ALLOW_GROUP | p_mode));
}
if (known && !see_t && count)
for (k = 0; k < num; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, (PM_ALLOW_GROUP | p_mode));
}
if (known && !see_t && count)
for (k = 0; k < 1; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, (PM_ALLOW_GROUP | p_mode));
}
if (known && !see_t && count)
for (k = 0; k < 1; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, (PM_ALLOW_GROUP | p_mode));
}
if (known && !see_t && count)
for (k = 0; k < 1; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, TRUE, friendly, pet, FALSE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP | p_mode));
}
if (known && !see_t && count)
for (k = 0; k < s_num_6; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, TRUE, friendly, pet, not_pet, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | p_mode | u_mode));
}
if (known && !see_t && count)
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, TRUE, friendly, pet, not_pet, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | p_mode | u_mode));
}
if (known && !see_t && count)
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | p_mode | PM_ALLOW_UNIQUE));
}
if (known && !see_t && count)
for (k = 0; k < s_num_4; k++)
{
- count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, TRUE, FALSE, FALSE, TRUE, FALSE);
+ count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | p_mode | PM_ALLOW_UNIQUE));
}
if (known && !see_t && count)
int damage = 0;
bool unique_okay = FALSE;
bool pet = success;
- bool not_pet = (bool)(!pet);
bool no_trump = FALSE;
+ u32b p_mode, u_mode = 0L, g_mode;
- if (!success || (randint1(50+plev) < plev/10)) unique_okay = TRUE;
+ if (pet)
+ {
+ p_mode = PM_FORCE_PET;
+ }
+ else
+ {
+ p_mode = PM_NO_PET;
+ g_mode = PM_ALLOW_GROUP;
+ }
+
+ if (!success || (randint1(50+plev) < plev/10)) u_mode = PM_ALLOW_UNIQUE;
/* spell code */
switch (spell)
#endif
for (k = 0;k < 1; k++)
{
- if (summon_kin_player(pet, summon_lev, py, px, FALSE))
+ if (summon_kin_player(summon_lev, py, px, (pet ? PM_FORCE_PET : 0L)))
{
if (!pet)
#ifdef JP
msg_print("You summon a Cyberdemon!");
#endif
for (k = 0 ;k < 1 ; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, FALSE, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_CYBER, p_mode))
{
if (!pet)
#ifdef JP
msg_print("You summon help.");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, 0, FALSE, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, 0, p_mode))
{
if (!pet)
#ifdef JP
msg_print("You summon monsters!");
#endif
for (k = 0;k < plev / 15 + 2; k++)
- if(summon_specific((pet ? -1 : 0), py, px, summon_lev, 0, FALSE, FALSE, pet, unique_okay, not_pet))
+ if(summon_specific((pet ? -1 : 0), py, px, summon_lev, 0, (p_mode | u_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon ants.");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_ANT, TRUE, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_ANT, (PM_ALLOW_GROUP | p_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon spiders.");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, TRUE, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_SPIDER, (PM_ALLOW_GROUP | p_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon hounds.");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, TRUE, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HOUND, (PM_ALLOW_GROUP | p_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon a hydras.");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, not_pet, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HYDRA, (g_mode | p_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon an angel!");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_ANGEL, not_pet, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_ANGEL, (g_mode | p_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon a demon from the Courts of Chaos!");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, not_pet, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DEMON, (g_mode | p_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon an undead adversary!");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, not_pet, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNDEAD, (g_mode | p_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon a dragon!");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, not_pet, FALSE, pet, FALSE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_DRAGON, (g_mode | p_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon a greater undead!");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, not_pet, FALSE, pet, unique_okay, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, (g_mode | p_mode | u_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon an ancient dragon!");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_DRAGON, not_pet, FALSE, pet, unique_okay, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_DRAGON, (g_mode | p_mode | u_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon a Lord of Amber!");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_AMBERITES, not_pet, FALSE, pet, unique_okay, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_AMBERITES, (g_mode | p_mode | u_mode)))
{
if (!pet)
#ifdef JP
msg_print("You summon a special opponent!");
#endif
for (k = 0;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNIQUE, not_pet, FALSE, pet, TRUE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_UNIQUE, (g_mode | p_mode | PM_ALLOW_UNIQUE)))
{
count++;
if (!pet)
#endif
}
for (k = count;k < 1; k++)
- if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, not_pet, FALSE, pet, TRUE, not_pet))
+ if (summon_specific((pet ? -1 : 0), py, px, summon_lev, SUMMON_HI_UNDEAD, (g_mode | p_mode | PM_ALLOW_UNIQUE)))
{
count++;
if (!pet)
int i;
for (i = 0; i < 8; i++)
{
- summon_specific(-1, py, px, lvl, SUMMON_BIZARRE1, FALSE, TRUE, TRUE, FALSE, FALSE);
+ summon_specific(-1, py, px, lvl, SUMMON_BIZARRE1, PM_FORCE_PET);
}
}
break;
int r_idx = what[randint0(64)];
/* Place that "random" monster (no groups) */
- (void)place_monster_aux(0, y, x, r_idx, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
+ (void)place_monster_aux(0, y, x, r_idx, 0L);
}
}
}
/* Top and bottom rows */
for (x = xval - 9; x <= xval + 9; x++)
{
- place_monster_aux(0, yval - 2, x, what[0], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, yval + 2, x, what[0], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, yval - 2, x, what[0], PM_NO_KAGE);
+ place_monster_aux(0, yval + 2, x, what[0], PM_NO_KAGE);
}
/* Middle columns */
for (y = yval - 1; y <= yval + 1; y++)
{
- place_monster_aux(0, y, xval - 9, what[0], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, y, xval + 9, what[0], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, y, xval - 9, what[0], PM_NO_KAGE);
+ place_monster_aux(0, y, xval + 9, what[0], PM_NO_KAGE);
- place_monster_aux(0, y, xval - 8, what[1], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, y, xval + 8, what[1], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, y, xval - 8, what[1], PM_NO_KAGE);
+ place_monster_aux(0, y, xval + 8, what[1], PM_NO_KAGE);
- place_monster_aux(0, y, xval - 7, what[1], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, y, xval + 7, what[1], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, y, xval - 7, what[1], PM_NO_KAGE);
+ place_monster_aux(0, y, xval + 7, what[1], PM_NO_KAGE);
- place_monster_aux(0, y, xval - 6, what[2], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, y, xval + 6, what[2], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, y, xval - 6, what[2], PM_NO_KAGE);
+ place_monster_aux(0, y, xval + 6, what[2], PM_NO_KAGE);
- place_monster_aux(0, y, xval - 5, what[2], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, y, xval + 5, what[2], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, y, xval - 5, what[2], PM_NO_KAGE);
+ place_monster_aux(0, y, xval + 5, what[2], PM_NO_KAGE);
- place_monster_aux(0, y, xval - 4, what[3], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, y, xval + 4, what[3], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, y, xval - 4, what[3], PM_NO_KAGE);
+ place_monster_aux(0, y, xval + 4, what[3], PM_NO_KAGE);
- place_monster_aux(0, y, xval - 3, what[3], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, y, xval + 3, what[3], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, y, xval - 3, what[3], PM_NO_KAGE);
+ place_monster_aux(0, y, xval + 3, what[3], PM_NO_KAGE);
- place_monster_aux(0, y, xval - 2, what[4], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, y, xval + 2, what[4], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, y, xval - 2, what[4], PM_NO_KAGE);
+ place_monster_aux(0, y, xval + 2, what[4], PM_NO_KAGE);
}
/* Above/Below the center monster */
for (x = xval - 1; x <= xval + 1; x++)
{
- place_monster_aux(0, yval + 1, x, what[5], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, yval - 1, x, what[5], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, yval + 1, x, what[5], PM_NO_KAGE);
+ place_monster_aux(0, yval - 1, x, what[5], PM_NO_KAGE);
}
/* Next to the center monster */
- place_monster_aux(0, yval, xval + 1, what[6], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
- place_monster_aux(0, yval, xval - 1, what[6], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, yval, xval + 1, what[6], PM_NO_KAGE);
+ place_monster_aux(0, yval, xval - 1, what[6], PM_NO_KAGE);
/* Center monster */
- place_monster_aux(0, yval, xval, what[7], FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
+ place_monster_aux(0, yval, xval, what[7], PM_NO_KAGE);
}
case '&':
{
monster_level = base_level + 5;
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
break;
}
case '@':
{
monster_level = base_level + 11;
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
break;
}
case '9':
{
monster_level = base_level + 9;
- place_monster(y, x, TRUE, FALSE);
+ place_monster(y, x, PM_ALLOW_SLEEP);
monster_level = base_level;
object_level = base_level + 7;
place_object(y, x, TRUE, FALSE);
case '8':
{
monster_level = base_level + 40;
- place_monster(y, x, TRUE, FALSE);
+ place_monster(y, x, PM_ALLOW_SLEEP);
monster_level = base_level;
object_level = base_level + 20;
place_object(y, x, TRUE, TRUE);
if (randint0(100) < 50)
{
monster_level = base_level + 3;
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
}
if (randint0(100) < 50)
{
/* Meanest monster + treasure */
monster_level = base_level + 40;
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
object_level = base_level + 20;
place_object(y, x, TRUE, FALSE);
{
/* Mean monster +treasure */
monster_level = base_level + 20;
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
object_level = base_level + 10;
place_object(y, x, TRUE, FALSE);
{
/* Monster */
monster_level = base_level + 9;
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
}
else if (value < 17)
{
/* Monster and trap */
monster_level = base_level + 5;
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
place_trap(y, x);
}
if (randint0(100) < 50)
{
monster_level = base_level + 3;
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
monster_level = base_level;
}
if (randint0(100) < 50)
/* 20% monster, 40% trap, 20% object, 20% blank space */
if (randint0(100) < 20)
{
- place_monster(y, x, TRUE, TRUE);
+ place_monster(y, x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
}
else if (randint0(100) < 50)
{
if (o_ptr->tval == TV_CORPSE)
{
int i;
- bool friendly = (!who || is_friendly(&m_list[who]));
- bool pet = (!who || is_pet(&m_list[who]));
+ u32b mode = 0L;
+
+ if (!who || is_pet(&m_list[who]))
+ mode |= PM_FORCE_PET;
+
for (i = 0; i < o_ptr->number ; i++)
{
if (((o_ptr->sval == SV_CORPSE) && (randint1(100) > 80)) ||
}
continue;
}
- else if (summon_named_creature(who, y, x, o_ptr->pval, FALSE, FALSE, friendly, pet))
+ else if (summon_named_creature(who, y, x, o_ptr->pval, mode))
{
#ifdef JP
note_kill = "À¸¤Ê֤ä¿¡£";
/* Clone monsters (Ignore "dam") */
case GF_OLD_CLONE:
{
- bool friendly = FALSE;
- bool pet = FALSE;
-
if (seen) obvious = TRUE;
if (is_pet(m_ptr) || (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & (RF7_UNIQUE_7 | RF7_UNIQUE2)))
m_ptr->hp = m_ptr->maxhp;
/* Attempt to clone. */
- if (multiply_monster(c_ptr->m_idx, TRUE, friendly, pet))
+ if (multiply_monster(c_ptr->m_idx, TRUE, 0L))
{
#ifdef JP
note = "¤¬Ê¬Îö¤·¤¿¡ª";
if (!one_in_(6)) break;
case 19: case 20: case 21: case 22:
{
- bool pet = FALSE, friendly = FALSE;
+ bool pet = !one_in_(3);
+ u32b mode = PM_ALLOW_GROUP;
- if (one_in_(3))
- {
- friendly = TRUE;
- }
- else
- {
- pet = TRUE;
- }
- count += summon_specific((pet ? -1 : 0), py, px, (pet ? p_ptr->lev*2/3+randint1(p_ptr->lev/2) : dun_level), 0, TRUE, friendly, pet, FALSE, (bool)(!pet));
+ if (pet) mode |= PM_FORCE_PET;
+ else mode |= (PM_NO_PET | PM_FORCE_FRIENDLY);
+
+ count += summon_specific((pet ? -1 : 0), py, px, (pet ? p_ptr->lev*2/3+randint1(p_ptr->lev/2) : dun_level), 0, mode);
if (!one_in_(6)) break;
}
case 23: case 24: case 25:
(*count) += activate_hi_summon(py, px, FALSE);
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);
+ (*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
{
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);
+
+ if (!pet) mode |= PM_NO_PET;
summon_lev = (pet ? p_ptr->lev * 2 / 3 + randint1(p_ptr->lev / 2) : dun_level);
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 i;
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;
{
cave_type *c_ptr = &cave[y][x];
monster_type *m_ptr = &m_list[c_ptr->m_idx];
- bool friendly, pet;
bool polymorphed = FALSE;
int new_r_idx;
int old_r_idx = m_ptr->r_idx;
/* Memorize the monster before polymorphing */
back_m = *m_ptr;
- /* Get the monsters attitude */
- friendly = is_friendly(m_ptr);
- pet = is_pet(m_ptr);
-
/* Pick a "new" monster race */
new_r_idx = poly_r_idx(old_r_idx);
/* Handle polymorph */
if (new_r_idx != old_r_idx)
{
+ u32b mode = 0L;
+
+ /* Get the monsters attitude */
+ if (is_friendly(m_ptr)) mode |= PM_FORCE_FRIENDLY;
+ if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
+ if (m_ptr->mflag2 & MFLAG_NOPET) mode |= PM_NO_PET;
+
/* "Kill" the "old" monster */
delete_monster_idx(c_ptr->m_idx);
/* Create a new monster (no groups) */
- if (place_monster_aux(0, y, x, new_r_idx, FALSE, FALSE, friendly, pet, FALSE, (bool)(m_ptr->mflag2 & MFLAG_NOPET)))
+ if (place_monster_aux(0, y, x, new_r_idx, mode))
{
/* Success */
polymorphed = TRUE;
monster_terrain_sensitive = FALSE;
/* Placing the new monster failed */
- place_monster_aux(0, y, x, old_r_idx, FALSE, FALSE, friendly, pet, TRUE, (bool)(m_ptr->mflag2 & MFLAG_NOPET));
+ place_monster_aux(0, y, x, old_r_idx, (mode | PM_NO_KAGE));
m_list[hack_m_idx_ii] = back_m;
monster_terrain_sensitive = TRUE;
}
-bool summon_kin_player(bool pet, int level, int y, int x, bool group)
+//bool summon_kin_player(bool pet, int level, int y, int x, bool group)
+bool summon_kin_player(int level, int y, int x, u32b mode)
{
+ bool pet = (bool)(mode & PM_FORCE_PET);
+ if (!pet) mode |= PM_NO_PET;
+
switch (p_ptr->mimic_form)
{
case MIMIC_NONE:
summon_kin_type = 'V';
break;
}
- return summon_specific((pet ? -1 : 0), y, x, level, SUMMON_KIN, group, FALSE, pet, FALSE, (bool)(!pet));
+ return summon_specific((pet ? -1 : 0), y, x, level, SUMMON_KIN, mode);
}
for (i = 0; i < num; i++)
{
- (void)summon_specific(0, py, px, dun_level, 0, TRUE, FALSE, FALSE, TRUE, FALSE);
+ (void)summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
}
}
*
* XXX XXX XXX This function is rather dangerous
*/
-static void do_cmd_wiz_named(int r_idx, bool slp)
+static void do_cmd_wiz_named(int r_idx)
{
int i, x, y;
if (!cave_empty_bold(y, x)) continue;
/* Place it (allow groups) */
- if (place_monster_aux(0, y, x, r_idx, slp, TRUE, FALSE, FALSE, FALSE, FALSE)) break;
+ if (place_monster_aux(0, y, x, r_idx, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP))) break;
}
}
*
* XXX XXX XXX This function is rather dangerous
*/
-static void do_cmd_wiz_named_friendly(int r_idx, bool slp)
+static void do_cmd_wiz_named_friendly(int r_idx)
{
- (void) summon_named_creature(0, py, px, r_idx, slp, TRUE, TRUE, TRUE);
+ (void) summon_named_creature(0, py, px, r_idx, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP | PM_FORCE_PET));
}
/* Summon _friendly_ named monster */
case 'N':
- do_cmd_wiz_named_friendly(command_arg, TRUE);
+ do_cmd_wiz_named_friendly(command_arg);
break;
/* Summon Named Monster */
case 'n':
- do_cmd_wiz_named(command_arg, TRUE);
+ do_cmd_wiz_named(command_arg);
break;
/* Object playing routines */
if (attempts > 0)
{
- if (summon_specific((pet ? -1 : 0), wy, wx, 100, SUMMON_DAWN, FALSE, is_friendly(m_ptr), pet, FALSE, FALSE))
+ u32b mode = 0L;
+ if (pet) mode |= PM_FORCE_PET;
+
+ if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode))
{
if (player_can_see_bold(wy, wx))
#ifdef JP
{
int wy = y, wx = x;
bool pet = is_pet(m_ptr);
+ u32b mode = 0L;
+
+ if (pet) mode |= PM_FORCE_PET;
- if (summon_specific((pet ? -1 : 0), wy, wx, 100, SUMMON_BLUE_HORROR, FALSE, is_friendly(m_ptr), pet, FALSE, FALSE))
+ if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode))
{
if (player_can_see_bold(wy, wx))
notice = TRUE;
{
int dummy_y = m_ptr->fy;
int dummy_x = m_ptr->fx;
- bool friend = is_friendly(m_ptr);
- bool pet = is_pet(m_ptr);
+ u32b mode = 0L;
+
+ if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
/* Delete the monster */
delete_monster_idx(m_idx);
- if (summon_named_creature(0, dummy_y, dummy_x, MON_BIKETAL, FALSE, FALSE, friend, pet))
+ if (summon_named_creature(0, dummy_y, dummy_x, MON_BIKETAL, mode))
{
#ifdef JP
msg_print("¡Ö¥Ï¥¡¥Ã¥Ï¥Ã¥Ï¥Ã¥Ï¡ª¡ª»ä¤¬¥Ð¥¤¥±¥¿¥ë¤À¡ª¡ª¡×");
for (dummy = 0; dummy < randint1(5) + 1; dummy++)
{
- (void)summon_specific(0, py, px, dun_level, 0, TRUE, FALSE, FALSE, TRUE, TRUE);
+ (void)summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
#ifdef JP
reward = "¥â¥ó¥¹¥¿¡¼¤ò¾¤´¤µ¤ì¤¿¡£";
msg_format("%s rewards you with a demonic servant!",chaos_patrons[p_ptr->chaos_patron]);
#endif
- if (!summon_specific(-1, py, px, dun_level, SUMMON_DEMON, FALSE, TRUE, TRUE, FALSE, FALSE))
+ if (!summon_specific(-1, py, px, dun_level, SUMMON_DEMON, PM_FORCE_PET))
#ifdef JP
msg_print("²¿¤â¸½¤ì¤Ê¤«¤Ã¤¿...");
#else
msg_format("%s rewards you with a servant!",chaos_patrons[p_ptr->chaos_patron]);
#endif
- if (!summon_specific(-1, py, px, dun_level, 0, FALSE, TRUE, TRUE, FALSE, FALSE))
+ if (!summon_specific(-1, py, px, dun_level, 0, PM_FORCE_PET))
#ifdef JP
msg_print("²¿¤â¸½¤ì¤Ê¤«¤Ã¤¿...");
#else
msg_format("%s rewards you with an undead servant!",chaos_patrons[p_ptr->chaos_patron]);
#endif
- if (!summon_specific(-1, py, px, dun_level, SUMMON_UNDEAD, FALSE, TRUE, TRUE, FALSE, FALSE))
+ if (!summon_specific(-1, py, px, dun_level, SUMMON_UNDEAD, PM_FORCE_PET))
#ifdef JP
msg_print("²¿¤â¸½¤ì¤Ê¤«¤Ã¤¿...");
#else