an early return.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10497 c06c8d41-db1a-0410-9941-cceddc491573
L2HDKXXUL27V7CTKPRAJMUVZNV6ZVSWVEYEOWZZ6NO6O7Y2THDZQC
HRQG6VRPN7WIVHX7GFKMQLDYM67ILWARQNWKSW3WAURNCPX4SDEQC
BMF6Y2AW2UKQ4J2KKWZOF4MFRMIU4PJG5DT72D4H6ZUV56MXR7SQC
HHHZGZT7QAERYSE26QGJPFAV6TQQXXECP6RTCLF6SZQ5L6GTXPWAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
2W34FMSGJ2BZY7QQM6X6RTVRXXI2H72Z2MH75SU3SDL4FN4G74KAC
52XHD5LKS6UVLXBYUXMPTMVMTXQ6FBUFXJ2TAW6R7CSJY7OXWVJAC
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
P722Q43MJLCJ5NHF6FA27YM7IYP2ZTP6WP373BAVZPODZW4JLJPQC
SWT4O2TCOAQOVFA6WRA7MCU3KMTMJWFEMIHO64N4PWL5FNHDPADAC
OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC
7V4DCKFJCNBXFODMKJ6H3MCDUTSD4XVQ7D4D6XFCD4JNF4HCE4KAC
CCRQESB4ADT4WA7FGLNZZXAJ6G5QMCTYCZIWORBN45P6ZPILC34AC
YDWBT7CZGY33CNDPF7S4LK7YULFMDUJAKIODKMGB2IYIWHF4SJWQC
JJVROJMJVKS7VN5HJNB4ZNCG7Y6EMHJQZR3MDN2VZCFTZC73HOZQC
5TQYGO7IXRZVWFDFLFKMZ4M3WJKR6GAPAZ4ZMGDZK32S3YL3DM2QC
2DORUQ4B574MDOOMRYWGU5I72AKHMCSTZ6B3VSHQBUQOZYHRC7FAC
HDJSYPW6GTSBM43QYCJQBEBDAUWWHFHUR6DC4ILGF6LJVL26CZPAC
MPSRFYQMG5SLUOLALTBWHCD4CLVXV3SS7GSFPVYSG3L2J7RKOCFAC
EEZCC5GUYHETFQV4KSZJSJ6BTTWZHKS7RXQ25XQ6ODGKLDD4XFRAC
CVTJ6OQ5WSLXTRRJJDE3VIGVQ3V5CWSDEZIBOUGVGEMVOI7JQZQQC
VY6XNTDD2LY42BDFVDT6QXPSRO74UCLH5RGTTH72DFCXWRNC3F5QC
4SWYX4Y3QSG5EUFHUNAW56WVK4FU3CZPQNHGGYKEV2LQ3P3GQTMQC
DCZMEKDHQWSQCQYQD6ZXB3XOMWLVLPSPVSBVVMPXMSZF7GO3BVCAC
UIVESOFZ4C262RYTFHSTFZIYTPTWSRJCFJAOZX7O2PQ35DFRDDEAC
NPN2F6GGWW56R5GGXPZQWGJSHNQNAZVUHCG6PAZUJKNW4BN3A3VAC
MAB2G62ND7B3KVGJ6YIAQC52IVXZWWOEVFJ3XDVCGWI3DBRHS23AC
FAVME2A2U4OUKN2BTISAG5PCI5Y4BN6YVFKCSQQHHZLEVVVF4LKAC
T7PHMSG47WP4MTKIGVBP4EAQRGXHMZPYSI3GT3DAEWKHUDFCH3QQC
KQNIGKATHT4YSPJFPJGIGPD6VNR5B753SE2JN2LCXZZJNHCGY3DQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
4FQAKUKUO6PCAZ3N4HUR5XL6E4VA5UQUZ3AEDGRBLVY7W2LMWI7QC
RQR4PTMGQLTRWLYRU3KXIIDGND7FBORESJWMWFVD3WYU5SISZXAAC
QCUMH3C7GXV7ZW444WT5SFAXQOJKJSE2YCQCEHMRYXCWF4QI7UMAC
M2HMYLYYXSP5XGX6MCI77IT6UW5K4YSEUJWHPQPYXVSW5L36BJ2AC
U35AIEBK6N3OG2BS6ZHI6L7VPBX562FZTH7CWSLFH6NMRXNSVC6QC
FWNNTOEERPUKXPE4OC52UABFZLKIU3O5GRNNLDK4QI4HR2IOU36QC
OE3TD4J5FSIFAM37J2UPEV7QQNXLSZM6GDUMPI66LC5LW2OM2J4AC
UFNXOEBCAUO3QMYOF6EXYILHZ44AXVMCOV76SFV3VV7DMVUPZWBAC
V53DXVC5T3N6J47H2CNG4MMPRR4PHW4AIS66QNVTKJNNYTTTQL4AC
4GYZYBY7FFORRNPIEFTV4ZM2C7Z6D2KTQOM537ZCC2YBXT2TNSHAC
57MGLFVRSI6MCEZT6NTWWW2LK4DKHFETEMXRHYNB4DPEMVBU64ZAC
U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC
45CXZWWXI7SGKLHVSRP2U6KNXJBT2XADNLIIHQQJYL2E6QWNURKQC
BYJVNG64DJWUDZH55L5XKRZSRGDV54TJOIDUXWTG52KMUUOOG4QQC
PA2AUORPJHOD7XBRM34UMBZRJVTKUFD3PINRMSEE4GKM7AH2KDVAC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
int quant = 1;
for (int item_tries = 0; item_tries < 40; item_tries++)
{
int type_wanted = _find_acquirement_subtype(class_wanted, quant,
agent);
int type_wanted = _find_acquirement_subtype(class_wanted, quant, agent);
// Clobber class_wanted for vampires.
if (you.species == SP_VAMPIRE && class_wanted == OBJ_FOOD)
class_wanted = OBJ_POTIONS;
// Clobber class_wanted for vampires.
if (you.species == SP_VAMPIRE && class_wanted == OBJ_FOOD)
class_wanted = OBJ_POTIONS;
// Don't generate randart books in items(), we do that
// ourselves.
int want_arts = (class_wanted == OBJ_BOOKS ? 0 : 1);
// Don't generate randart books in items(), we do that
// ourselves.
int want_arts = (class_wanted == OBJ_BOOKS ? 0 : 1);
thing_created = items( want_arts, class_wanted, type_wanted, true,
MAKE_GOOD_ITEM, MAKE_ITEM_RANDOM_RACE,
0, 0, agent );
thing_created = items( want_arts, class_wanted, type_wanted, true,
MAKE_GOOD_ITEM, MAKE_ITEM_RANDOM_RACE,
0, 0, agent );
if (thing_created == NON_ITEM)
continue;
item_def &doodad(mitm[thing_created]);
// For mundane armour, try to change the subtype to something
// matching a currently unfilled equipment slot.
if (doodad.base_type == OBJ_ARMOUR && !is_artefact(doodad)
&& get_armour_ego_type(doodad) == SPARM_NORMAL)
{
_try_give_mundane_armour(doodad);
if (agent == GOD_OKAWARU && doodad.plus < 0)
doodad.plus = 0;
}
// For mundane armour, try to change the subtype to something
// matching a currently unfilled equipment slot.
if (doodad.base_type == OBJ_ARMOUR && !is_artefact(doodad)
&& get_armour_ego_type(doodad) == SPARM_NORMAL)
{
_try_give_mundane_armour(doodad);
if (agent == GOD_OKAWARU && doodad.plus < 0)
doodad.plus = 0;
}
if (doodad.base_type == OBJ_WEAPONS
&& !can_wield(&doodad, false, true)
|| doodad.base_type == OBJ_ARMOUR
&& !can_wear_armour(doodad, false, true))
{
destroy_item(thing_created, true);
thing_created = NON_ITEM;
continue;
}
if (doodad.base_type == OBJ_WEAPONS
&& !can_wield(&doodad, false, true)
|| doodad.base_type == OBJ_ARMOUR
&& !can_wear_armour(doodad, false, true))
{
destroy_item(thing_created, true);
thing_created = NON_ITEM;
continue;
}
// Only TSO gifts blessed blades, and currently not through
// acquirement, but make sure of this anyway.
if (agent != GOD_SHINING_ONE && is_blessed_blade(doodad))
{
destroy_item(thing_created, true);
thing_created = NON_ITEM;
continue;
}
// Only TSO gifts blessed blades, and currently not through
// acquirement, but make sure of this anyway.
if (agent != GOD_SHINING_ONE && is_blessed_blade(doodad))
// Trog does not gift the Wrath of Trog, nor weapons of pain
// (which work together with Necromantic magic).
if (agent == GOD_TROG)
{
int brand = get_weapon_brand(doodad);
if (brand == SPWPN_PAIN
|| is_unrandom_artefact(doodad)
&& (doodad.special == UNRAND_TROG
|| doodad.special == UNRAND_WUCAD_MU))
}
// Trog does not gift the Wrath of Trog, nor weapons of pain
// (which work together with Necromantic magic).
if (agent == GOD_TROG)
{
int brand = get_weapon_brand(doodad);
if (brand == SPWPN_PAIN
|| is_unrandom_artefact(doodad)
&& (doodad.special == UNRAND_TROG
|| doodad.special == UNRAND_WUCAD_MU))
{
destroy_item(thing_created, true);
thing_created = NON_ITEM;
continue;
}
// MT - Check: god-gifted weapons and armour shouldn't kill you.
// Except Xom.
if ((agent == GOD_TROG || agent == GOD_OKAWARU)
&& is_artefact(doodad))
{
artefact_properties_t proprt;
artefact_wpn_properties( doodad, proprt );
// Check vs. stats. positive stats will automatically fall
// through. As will negative stats that won't kill you.
if (-proprt[ARTP_STRENGTH] >= you.strength
|| -proprt[ARTP_INTELLIGENCE] >= you.intel
|| -proprt[ARTP_DEXTERITY] >= you.dex)
{
// Try again.
destroy_item(thing_created);
thing_created = NON_ITEM;
continue;
}
}
// MT - Check: god-gifted weapons and armour shouldn't kill you.
// Except Xom.
if ((agent == GOD_TROG || agent == GOD_OKAWARU)
&& is_artefact(doodad))
{
artefact_properties_t proprt;
artefact_wpn_properties( doodad, proprt );
// Sif Muna shouldn't gift Vehumet or Kiku's special books.
// (The spells therein are still fair game for randart books.)
if (agent == GOD_SIF_MUNA
&& doodad.sub_type >= MIN_GOD_ONLY_BOOK
&& doodad.sub_type <= MAX_GOD_ONLY_BOOK)
// Check vs. stats. positive stats will automatically fall
// through. As will negative stats that won't kill you.
if (-proprt[ARTP_STRENGTH] >= you.strength
|| -proprt[ARTP_INTELLIGENCE] >= you.intel
|| -proprt[ARTP_DEXTERITY] >= you.dex)
if (thing_created == NON_ITEM)
// Sif Muna shouldn't gift Vehumet or Kiku's special books.
// (The spells therein are still fair game for randart books.)
if (agent == GOD_SIF_MUNA
&& doodad.sub_type >= MIN_GOD_ONLY_BOOK
&& doodad.sub_type <= MAX_GOD_ONLY_BOOK)
if (!quiet)
mpr("The demon of the infinite void smiles upon you.");
*item_index = NON_ITEM;
return (false);
ASSERT(doodad.base_type == OBJ_BOOKS);
// Try again.
destroy_item(thing_created);
thing_created = NON_ITEM;
continue;
// Give some more gold.
if (class_wanted == OBJ_GOLD)
thing.quantity += 150;
else if (quant > 1)
thing.quantity = quant;
// Give some more gold.
if (class_wanted == OBJ_GOLD)
thing.quantity += 150;
else if (quant > 1)
thing.quantity = quant;
if (!_do_book_acquirement(thing, agent))
{
if (!quiet)
mpr("The demon of the infinite void smiles upon you.");
*item_index = NON_ITEM;
destroy_item(thing, true);
return (false);
}
mark_had_book(thing);
if (!quiet)
mpr("The demon of the infinite void smiles upon you.");
*item_index = NON_ITEM;
destroy_item(thing, true);
return (false);
switch (thing.sub_type)
{
case RING_SLAYING:
// Make sure plus to damage is >= 1.
thing.plus2 = std::max(abs(thing.plus2), 1);
// fall through...
case RING_SLAYING:
// Make sure plus to damage is >= 1.
thing.plus2 = std::max(abs(thing.plus2), 1);
// fall through...
case RING_PROTECTION:
case RING_STRENGTH:
case RING_INTELLIGENCE:
case RING_DEXTERITY:
case RING_EVASION:
// Make sure plus is >= 1.
thing.plus = std::max(abs(thing.plus), 1);
break;
case RING_PROTECTION:
case RING_STRENGTH:
case RING_INTELLIGENCE:
case RING_DEXTERITY:
case RING_EVASION:
// Make sure plus is >= 1.
thing.plus = std::max(abs(thing.plus), 1);
break;
case RING_HUNGER:
case AMU_INACCURACY:
// These are the only truly bad pieces of jewellery.
if (!one_chance_in(9))
make_item_randart(thing);
break;
case RING_HUNGER:
case AMU_INACCURACY:
// These are the only truly bad pieces of jewellery.
if (!one_chance_in(9))
make_item_randart(thing);
break;
else if (thing.base_type == OBJ_WEAPONS
&& !is_unrandom_artefact(thing))
}
else if (thing.base_type == OBJ_WEAPONS
&& !is_unrandom_artefact(thing))
{
// HACK: Make unwieldable weapons wieldable.
// Note: messing with fixed artefacts is probably very bad.
switch (you.species)
// HACK: Make unwieldable weapons wieldable.
// Note: messing with fixed artefacts is probably very bad.
switch (you.species)
case SP_DEMONSPAWN:
case SP_MUMMY:
case SP_GHOUL:
case SP_VAMPIRE:
{
int brand = get_weapon_brand(thing);
if (brand == SPWPN_HOLY_WRATH)
if (is_random_artefact(thing))
{
// Keep resetting seed until it's good.
for (; brand == SPWPN_HOLY_WRATH;
brand = get_weapon_brand(thing))
{
make_item_randart(thing);
}
}
else
{
set_item_ego_type(thing, OBJ_WEAPONS, SPWPN_VORPAL);
}
make_item_randart(thing);
case WPN_GREAT_SWORD:
case WPN_TRIPLE_SWORD:
thing.sub_type = (coinflip() ? WPN_FALCHION : WPN_LONG_SWORD);
break;
case SP_HALFLING:
case SP_KOBOLD:
case SP_SPRIGGAN:
switch (thing.sub_type)
{
case WPN_LONGBOW:
thing.sub_type = WPN_BOW;
break;
case WPN_GREAT_MACE:
case WPN_DIRE_FLAIL:
thing.sub_type = (coinflip() ? WPN_MACE : WPN_FLAIL);
break;
case WPN_GREAT_SWORD:
case WPN_TRIPLE_SWORD:
thing.sub_type = (coinflip() ? WPN_FALCHION : WPN_LONG_SWORD);
break;
case WPN_BATTLEAXE:
case WPN_EXECUTIONERS_AXE:
thing.sub_type = (coinflip() ? WPN_HAND_AXE : WPN_WAR_AXE);
break;
case WPN_GREAT_MACE:
case WPN_DIRE_FLAIL:
thing.sub_type = (coinflip() ? WPN_MACE : WPN_FLAIL);
break;
case WPN_HALBERD:
case WPN_GLAIVE:
case WPN_SCYTHE:
case WPN_BARDICHE:
thing.sub_type = (coinflip() ? WPN_SPEAR : WPN_TRIDENT);
break;
}
case WPN_BATTLEAXE:
case WPN_EXECUTIONERS_AXE:
thing.sub_type = (coinflip() ? WPN_HAND_AXE : WPN_WAR_AXE);
int plusmod = random2(4);
if (agent == GOD_TROG)
{
// More damage, less accuracy.
thing.plus -= plusmod;
thing.plus2 += plusmod;
if (!is_artefact(thing))
thing.plus = std::max(static_cast<int>(thing.plus), 0);
}
else if (agent == GOD_OKAWARU)
{
// More accuracy, less damage.
thing.plus += plusmod;
thing.plus2 -= plusmod;
if (!is_artefact(thing))
thing.plus2 = std::max(static_cast<int>(thing.plus2), 0);
}
default:
break;
}
int plusmod = random2(4);
if (agent == GOD_TROG)
{
// More damage, less accuracy.
thing.plus -= plusmod;
thing.plus2 += plusmod;
if (!is_artefact(thing))
thing.plus = std::max(static_cast<int>(thing.plus), 0);
}
else if (agent == GOD_OKAWARU)
{
// More accuracy, less damage.
thing.plus += plusmod;
thing.plus2 -= plusmod;
if (!is_artefact(thing))
thing.plus2 = std::max(static_cast<int>(thing.plus2), 0);
if (agent > GOD_NO_GOD && agent < NUM_GODS && agent == you.religion)
thing.inscription = "god gift";
if (agent > GOD_NO_GOD && agent < NUM_GODS && agent == you.religion)
thing.inscription = "god gift";
// This should never actually be NON_ITEM because of the way
// move_item_to_grid works (doesn't create a new item ever),
// but we're checking it anyways. -- bwr
if (thing_created != NON_ITEM)
{
if (!quiet)
canned_msg(MSG_SOMETHING_APPEARS);
}
*item_index = thing_created;
// This should never actually be NON_ITEM because of the way
// move_item_to_grid works (doesn't create a new item ever),
// but we're checking it anyways. -- bwr
if (thing_created != NON_ITEM)
{
if (!quiet)
canned_msg(MSG_SOMETHING_APPEARS);