High-value sacrifices can reduce the gift countdown. Nemelex is easier to please. Breaks savefiles.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1821 c06c8d41-db1a-0410-9941-cceddc491573
UKN6HTZXDUUOWKNWNKWPHKGUGL474JIAQN5JU3DM3DU26WGMNP4AC
I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC
45CWQUPQHKUFUJ4MVL5K3KCVCCKLY2Z7RZWZ53UT723RV5STPSRAC
X7TRUBJTRDVUI53BROBYHF4UDC4I5SUYWBUOGQMZNN2WEZAFVGVQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
3KAINFIXO7WNWGUGZB43EUNFRS2ZPBLQZDTY456QACMRHYIJ7WDAC
XKAJWK6MPHS3ZCZIPPLTIMOPF6AROGLRDDCS6EFE3IGE4AHT7MYQC
TZTHE3TEKUDMNLAXWKHO66SYIVCVCIOJLKF3MCHSNJTXCKTWK3LAC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
6LT6USGJOTDMRJGXLAN2NSZXK2GKWEXDKKUV6SVV7ZC6WI6EKMDQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
#endif
template<typename Iterator>
int choose_random_weighted(Iterator beg, const Iterator end)
{
int totalweight = 0;
int count = 0, result = 0;
while ( beg != end )
{
totalweight += *beg;
if ( random2(totalweight) < *beg )
result = count;
++count;
++beg;
}
return result;
}
#endif
gift_type = RANDOM_ELEMENT(pure_decks);
int weights[5];
weights[0] = you.sacrifice_value[OBJ_SCROLLS] +
you.sacrifice_value[OBJ_ARMOUR] + 1;
weights[1] = you.sacrifice_value[OBJ_WEAPONS] +
you.sacrifice_value[OBJ_STAVES] +
you.sacrifice_value[OBJ_MISSILES] + 1;
weights[2] = you.sacrifice_value[OBJ_MISCELLANY];
weights[3] = you.sacrifice_value[OBJ_CORPSES] * 100;
weights[4] = you.sacrifice_value[OBJ_POTIONS];
gift_type = pure_decks[choose_random_weighted(weights,
weights+5)];
case GOD_NEMELEX_XOBEH:
you.sacrifice_value[mitm[i].base_type] += value;
if ( you.attribute[ATTR_CARD_COUNTDOWN] &&
random2(800) < value )
{
you.attribute[ATTR_CARD_COUNTDOWN]--;
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "Countdown down to %d",
you.attribute[ATTR_CARD_COUNTDOWN]);
#endif
}
mprf(MSGCH_GOD, "%s%s", mitm[i].name(DESC_CAP_THE).c_str(),
sacrifice_message(you.religion, mitm[i]).c_str());
if ((mitm[i].base_type == OBJ_CORPSES && coinflip())
// Nemelex piety gain is fairly fast.
|| random2(value) >= random2(60))
{
gain_piety(1);
}
destroy_item(i);
break;