git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10155 c06c8d41-db1a-0410-9941-cceddc491573
OJM4PHYETFEMK43FQ4O2KFWL4TMZTSBAPAWMDST733S7SIXTU4RAC
77TCDR7AO42VYBIYZYWRWFSX34MPZCNW6SLBREFZZZ5NBPXEKDFAC
DA4SGKR5R6YAADTB3R2KLIMCFH45H7UOO7YTC665C7TSY4BRBTJQC
CCNYYIJ7WWYIXGFC27V4XO75QR6LRF45BTVBLE7RXOIKURNE3SQQC
5QRXZHCR7QAYOILGUCQPVNLM4NQM5E5PPVNRGGMARWAIRJYKUJEQC
A3QXTQ5RKIGDWIKA7JHIGIHQE5EVGO6WNNWF6XY2VZNP67JESDHQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
5LDEEBB7DT4CORJZOAYLQFXNI7FOURUJGAKVDVX7YL745NNRW63AC
LOJYD6QZRNLNDDZJKVBMKQIBPTKSRN2ETCYGNVV47M7L3QLUJUJAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
FL5OQVX5UXHYHPKC2YZ3PSD4QQ6OHRYXBIVSSKR4RIPUJNC3TORAC
2UVHNPJRS352B7HNGZMEQRAIN5NE4R44B7JRQWCHUMZJIALWOEGAC
BQ5QKUWLCYSBO4A7EWZN4FXPNSIAR6JPBAZE4PSV6XCUNTV53ERQC
CMNLYUECIMEZSOYG4KOSINOPER5OM7PPCGIHCM7LQVWEO77XFUYQC
UEEDQIFBOUZOXHCWGSEBED4Z3SYGN3DVHOVRJYQVWQQ6BIDLWAQAC
4BSWRAIA7TLRFRZ4RMLOVDHWDWBGJCAQZUOPXPJYW6OJY6B3HPLQC
3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC
TH2RUX3XQ5I43J4ASC4C3KHFCBUOYQ4EUBMXPQV4JCJGPTZZAYAAC
GETZ2YQJEBLH7WVPSMKYRW25CTHYMCYTWPMTWJTUMBPFPPA5G7XAC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
SUPHSH236UYIFASEHHFIVAJETU6CCXCJL6Y2B7J2SPZDVT3MSVBAC
5SCR65HLLU7VGN7A4NTAOGH6AQQ55F3WUX2OXLOESDW2RA7LC5OQC
UISCFODQTHZG4576DDR4QCFOGGOIT4BQI7DTVBSMLKHANTE7D3IAC
X3B7EVFL3GJOEID2C42QJQIQBJS4YLA4R2HT4LXGDPIBKHGDDEHQC
Z7NYYNCWCAXZCRAWIAX4IKON52ZHVXLHXQCF2ED7VHJBT6DY7MOAC
L7LNOGIPMKCFARJWTLEGFFWX6W2KSXVPRPZ7V42XTGADYCJRLRCAC
U52YN2JQUGBRV434NNAKL3YXFLG3JDYBW3VV3HOIEJGGBFZRT6WQC
4LFTDJY3DK6S7C7SQLLML6UIZ42GZOWK2EIMZZSNEKBWSA3YNUZAC
simple_god_message(" is no longer ready to bless your weapon.");
if (you.religion == GOD_SHINING_ONE || you.religion == GOD_LUGONU)
simple_god_message(" is no longer ready to bless your weapon.");
ASSERT(!non_fatal || _is_random(which_mutation));
mutation_type mutat = which_mutation;
if (!force_mutation)
{
if (!god_gift)
{
if (player_mutation_level(MUT_MUTATION_RESISTANCE) > 1
&& (player_mutation_level(MUT_MUTATION_RESISTANCE) == 3
|| coinflip()))
{
if (failMsg)
mpr("You feel rather odd for a moment.", MSGCH_MUTATION);
return (false);
}
}
}
if (which_mutation == RANDOM_MUTATION
|| which_mutation == RANDOM_XOM_MUTATION
|| which_mutation == RANDOM_GOOD_MUTATION
|| which_mutation == RANDOM_BAD_MUTATION)
{
while (true)
{
if (one_chance_in(1000))
return (false);
mutat = static_cast<mutation_type>(random2(NUM_MUTATIONS));
if (you.mutation[mutat] == 0
&& mutat != MUT_STRONG
&& mutat != MUT_CLEVER
&& mutat != MUT_AGILE
&& mutat != MUT_WEAK
&& mutat != MUT_DOPEY
&& mutat != MUT_CLUMSY)
{
continue;
}
if (!_accept_mutation(mutat, true, non_fatal, true))
continue;
if (you.demon_pow[mutat] >= you.mutation[mutat])
continue;
const mutation_def& mdef = get_mutation_def(mutat);
if (random2(10) >= mdef.rarity)
continue;
bool mismatch = (which_mutation == RANDOM_GOOD_MUTATION && mdef.bad)
|| (which_mutation == RANDOM_BAD_MUTATION && !mdef.bad);
if (mismatch && !one_chance_in(10))
continue;
break;
}
}
mutation_type mutat = which_mutation;
if (!force_mutation)
{
if (!god_gift)
{
if (player_mutation_level(MUT_MUTATION_RESISTANCE) > 1
&& (player_mutation_level(MUT_MUTATION_RESISTANCE) == 3
|| coinflip()))
{
if (failMsg)
mpr("You feel rather odd for a moment.", MSGCH_MUTATION);
return (false);
}
}
}
if (which_mutation == RANDOM_MUTATION
|| which_mutation == RANDOM_XOM_MUTATION
|| which_mutation == RANDOM_GOOD_MUTATION
|| which_mutation == RANDOM_BAD_MUTATION)
{
while (true)
{
if (one_chance_in(1000))
return (false);
mutat = static_cast<mutation_type>(random2(NUM_MUTATIONS));
if (you.mutation[mutat] == 0
&& mutat != MUT_STRONG
&& mutat != MUT_CLEVER
&& mutat != MUT_AGILE
&& mutat != MUT_WEAK
&& mutat != MUT_DOPEY
&& mutat != MUT_CLUMSY)
{
continue;
}
if (!_accept_mutation(mutat, true, non_fatal, true))
continue;
if (you.demon_pow[mutat] >= you.mutation[mutat])
continue;
const mutation_def& mdef = get_mutation_def(mutat);
if (random2(10) >= mdef.rarity)
continue;
const bool mismatch =
(which_mutation == RANDOM_GOOD_MUTATION && mdef.bad)
|| (which_mutation == RANDOM_BAD_MUTATION && !mdef.bad);
if (mismatch && !one_chance_in(10))
continue;
break;
}
}
return (_delete_single_mutation_level(mutat));
}