git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5157 c06c8d41-db1a-0410-9941-cceddc491573
PRQ3EYE6QDRMGWIPRON2NVNDCY5YBDHD2NURV5H5T4GYV5YHUOTQC
UW7HW2UZEZ2ZNMZBX5HKHH22OJCSG2QRJJNZ6JGZQGENENGY7VBAC
LBSQ554ON4ONM2S544MUFGNHZPQYBIT5KAYRIBQLGH2ZERL63ESQC
AROBKQGZEY7IBWUQ6XNGEJQJMI3XB7BXLMX5PHU3L6DWIATCH7EAC
IT6JBMDXGN6X3F3W4ERVPFSURM4G7ZBSIBDMUXV5ZZXXSLM6RSAAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
ZXYVKEDP7QYG66XFUCXXCKZXT7Z5OOEJWHICWOYAUZQ4SSLHIA4AC
HXAKQLE5VFM3TREGGSFH362HVJPZ2NE5JCQUTMKD5YBZCS4JTU4AC
35NWNQBNLDOHPPHMYA2722IIFGAA57LUN5NOZPRUFZBD5EVCSYCAC
BFPWM2MSF5HSN5UZXNEB5FR22P536UR24E3WXY5IIHC2SDIPOWSAC
KJ7BAVTDVVETEXDWUUDPDRCSX5DWRU2QOTYCUOICFA7CJPAGNVCAC
NJFYSNTX33RAPYMVYJYGSCHOE7AWYX4ZG6ZRJZBDVDQWTANTM2QQC
DRQ6OBPWBA5MKPVQXELBHOWBN3I374QHD7OBTYSOEU3XQ2WBXUJQC
Q3DXU2RW3O54VZ5MW473T5WWU2E4PRHYLVWL3ATDO7AER4DGAU7AC
FPULZPNPOCNH6BET5QMN3OMASPKGQGFBAGLAYOTJB6QSSAIEAN6QC
FEXFEKY3QAJ4M2RIJB3SOV65ECDY6M6K5DQJ7FEOXNAGQDEYVKUAC
3HA76QBIYDRXHHKK7FRIGTEZLRFPECJW2AYXOBYNZM4FIDSDLWGAC
XTUKLNRQ6OB4SAJFCF7XT5A643QXGNMEW4YHZTOSSAKZAGHJALZAC
2R4Q7C5ATEAJ5JXJZQSDPFFGLOU36TTV6DMGM47BY5CUQTD5KTKAC
J3IUDNIRXUTU5MDEICM6FM4IA7ZC37ZO5WF6QYMTTUOMV6R3VLTQC
3B2ZAT7GIM6WQX3K2MOXHFO2HPSXEQUHRCPE5SQCUFSS6KHXZVMAC
TPDD6YOMSQHPNJRSHCRPYZQPOLYDZE3YZD64ZU6IRX3MZBFVQFEQC
O5F3IX3GQCTPVQEXVZNUCL3VRAPR3NHQO6KU5GNDAZGSQXU7QZ4QC
IHDUCQLZCL74OXNV5ICHQCPQ6TDAHZBVGUTMLXHP432WJH5VOZWQC
HVYJMQL4JNEWML77XJEPCO3WWMGJDY2POGH4FEYCAZUL7VHVEDXQC
EVNSWER2QTBF677CBQ7M66A2EQMWVNLANEUXX6UK35TE42YZM2OAC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
ULK5ZKKZ6OR2DPZKEOVF6K53U2IHLVWEAJ7YKDNQTR2IEF6DMYJQC
IDVXDTVLNXRKZ32SEMIDKW5OM2C2SI2XNQWHLRZN33GOOSGYQ5WQC
I5ECB3F77YUAWY4MVFU3PTBJUYYR4J76VWA6JY5PE5NR44QHXTWQC
SMFI5G2UUW6I5GQYEYJNSCS4HGA5HFCHD45VBD4EW5NNNBDJIMOQC
OZ5D37MVA3M2COBXAFMD3IZAW55RVPQRQBNTH5HARFWU7SW4PARAC
GQLLYETI5KID6MXQ6YJ5TZJYN5V3QDFOUQIKBVDYGVARNWBCMOSAC
ZCSYP2AFLY5QD4NAZSLAO33QYTVITJVRAJMFOE33CZZRVCWYXHNQC
ITXXROSRTWGBQQFTW7MCG7DEATIU7E5GH7UE4BKM4FYBPFHZVCDAC
3S5MXRGHKBYOT4Q2BXMARYJH4PEPTAH5CRV5Z23RBE7VQLO2Y57QC
HGH6TXJX5PZ6UWUX5CO2BRFCMG6EQY5EWI4YLYLBHTEHE2HEJBEAC
76LKB66IWIPTE75HR2T4B75YFRVZ3PVRPX5WTRPNTOOP3SLAQWFAC
// Remove negative afflictions, and/or add divine robustness.
// Restore HP and MP.
if (you.hp < you.hp_max || you.magic_points < you.max_magic_points)
{
success = true;
inc_hp(hp_amt, false);
inc_mp(mp_amt, false);
hp_amt *= 2;
mp_amt *= 2;
need_chain =
(you.hp < you.hp_max
|| you.magic_points < you.max_magic_points);
break;
}
need_chain = false;
step = 0;
type = 1;
// Deliberate fall through, resetting the vitalisation chaining
// indicator and the step counter.
case 1:
switch (step)
{
case 0:
case 1:
case 2:
// Restore stats.
if (you.strength < you.max_strength
|| you.intel < you.max_intel
|| you.dex < you.max_dex)
{
success = true;
restore_stat(STAT_STRENGTH, step + 1, true);
restore_stat(STAT_INTELLIGENCE, step + 1, true);
restore_stat(STAT_DEXTERITY, step + 1, true);
need_chain =
(you.strength < you.max_strength
|| you.intel < you.max_intel
|| you.dex < you.max_dex);
break;
}
step = 3;
// Deliberate fall through.
if (step >= step_max)
break;
default:
break;
}
if (success)
break;
need_chain = false;
step = 0;
type = 2;
// Deliberate fall through, resetting the vitalisation chaining
// indicator and the step counter.
case 2:
// Remove negative afflictions.
// Divine robustness.
case 3:
case 4:
case 5:
if ((step == 3 || you.duration[DUR_VITALISATION_CHAIN] > 0)
&& you.attribute[ATTR_DIVINE_ROBUSTNESS] == (step - 3)
&& player_mutation_level(MUT_ROBUST) < (6 - step))
{
success = true;
mprf(MSGCH_DURATION, "Zin %s divine robustness.",
(step == 3) ? "grants you" :
(step == 4) ? "strengthens your"
: "maximises your");
you.attribute[ATTR_DIVINE_ROBUSTNESS]++;
you.duration[DUR_DIVINE_ROBUSTNESS] +=
(step == 3) ? (you.skills[SK_INVOCATIONS] * 2) :
(step == 4) ? (you.skills[SK_INVOCATIONS])
: (you.skills[SK_INVOCATIONS] / 2);
const int old_hp_max = you.hp_max;
calc_hp();
set_hp(you.hp * you.hp_max / old_hp_max, false);
need_chain = (player_mutation_level(MUT_ROBUST) < (5 - step));
break;
}
step = 6;
// Deliberate fall through.
break;
need_chain = false;
step = 0;
type = 1;
// Deliberate fall through, resetting the vitalisation chaining
// indicator and the step counter.
case 1:
// Restore HP.
if (you.hp < you.hp_max)
{
success = true;
inc_hp(hp_amt, false);
hp_amt *= 2;
need_chain = (you.hp < you.hp_max);
break;
}
need_chain = false;
step = 0;
type = 2;
// Deliberate fall through, resetting the vitalisation chaining
// indicator and the step counter.
case 2:
// Restore MP.
if (you.magic_points < you.max_magic_points)
{
success = true;
inc_mp(mp_amt, false);
mp_amt *= 2;
need_chain = (you.magic_points < you.max_magic_points);
// Restore stats.
if (you.strength < you.max_strength
|| you.intel < you.max_intel
|| you.dex < you.max_dex)
case 4:
if ((step == 0 || you.duration[DUR_VITALISATION_CHAIN] > 0)
&& ((you.attribute[ATTR_DIVINE_STAMINA] + 1) / 2) == (step / 2)
&& (player_mutation_level(MUT_STRONG) / 5) < (3 - step / 2)
&& (player_mutation_level(MUT_CLEVER) / 5) < (3 - step / 2)
&& (player_mutation_level(MUT_AGILE) / 5) < (3 - step / 2))
restore_stat(STAT_STRENGTH, step + 1, true);
restore_stat(STAT_INTELLIGENCE, step + 1, true);
restore_stat(STAT_DEXTERITY, step + 1, true);
need_chain =
(you.strength < you.max_strength
|| you.intel < you.max_intel
|| you.dex < you.max_dex);
mprf(MSGCH_DURATION, "Zin %s divine stamina.",
(step == 0) ? "grants you" :
(step == 2) ? "strengthens your"
: "maximises your");
const int stamina_amt = step + 1;
you.attribute[ATTR_DIVINE_STAMINA] += stamina_amt;
you.duration[DUR_DIVINE_STAMINA] +=
(step == 0) ? (you.skills[SK_INVOCATIONS] * 2) :
(step == 2) ? (you.skills[SK_INVOCATIONS])
: (you.skills[SK_INVOCATIONS] / 2);
modify_stat(STAT_STRENGTH, stamina_amt, true, "");
modify_stat(STAT_INTELLIGENCE, stamina_amt, true, "");
modify_stat(STAT_DEXTERITY, stamina_amt, true, "");
need_chain = true;
if ((step == 3 || you.duration[DUR_VITALISATION_CHAIN] > 0)
&& ((you.attribute[ATTR_DIVINE_STAMINA] + 1) / 2) == (step - 3)
&& (player_mutation_level(MUT_STRONG) / 5) < (6 - step)
&& (player_mutation_level(MUT_CLEVER) / 5) < (6 - step)
&& (player_mutation_level(MUT_AGILE) / 5) < (6 - step))
if ((step == 1 || you.duration[DUR_VITALISATION_CHAIN] > 0)
&& you.attribute[ATTR_DIVINE_ROBUSTNESS] == (step / 2)
&& player_mutation_level(MUT_ROBUST) < (3 - step / 2))
const int stamina_amt = (step - 3) * 2 + 1;
you.attribute[ATTR_DIVINE_STAMINA] += stamina_amt;
you.duration[DUR_DIVINE_STAMINA] +=
(step == 3) ? (you.skills[SK_INVOCATIONS] * 2) :
(step == 4) ? (you.skills[SK_INVOCATIONS])
you.attribute[ATTR_DIVINE_ROBUSTNESS]++;
you.duration[DUR_DIVINE_ROBUSTNESS] +=
(step == 1) ? (you.skills[SK_INVOCATIONS] * 2) :
(step == 3) ? (you.skills[SK_INVOCATIONS])
modify_stat(STAT_STRENGTH, stamina_amt, true, "");
modify_stat(STAT_INTELLIGENCE, stamina_amt, true, "");
modify_stat(STAT_DEXTERITY, stamina_amt, true, "");
need_chain =
((player_mutation_level(MUT_STRONG) / 5) < (5 - step)
&& (player_mutation_level(MUT_CLEVER) / 5) < (5 - step)
&& (player_mutation_level(MUT_AGILE) / 5) < (5 - step));
const int old_hp_max = you.hp_max;
calc_hp();
set_hp(you.hp * you.hp_max / old_hp_max, false);
need_chain = true;