player spell "Paralyse" with it, i.e. not the wand/potion/misc. effects.
Petrify is a 4th level spell of the Enchantment/Transmigrations school (a unique combination, I believe), all other values (incl. the level) were shamelessly stolen from Paralysis. Anyway, it consists of two elements (so I actually added TWO new enchantments), Petrifying and Petrified. A monster that is petrifying cannot move around but can perform actions like hitting adjacent monsters or casting spells at a slowed rate (1.5 of the normal cost). Once this sub-enchantment runs out (happens faster) the monster cannot move or act anymore, so it works like Paralysis. The damage you do during stabbing is one third of what you'd do otherwise, for both states of enchantment, and for both stabbing counts as unchivalric behaviour.
It has not been implemented as a monster spell, and ghosts of characters that had it will use Paralyse instead. Consequently, the effect on the player (in self targetting) only handles the Petrified part.
Numbers, esp. enchantment timeout, will need tweaking. They're currently
Petrifying: cturn = 50 / _mod_speed(10, mons->speed);
Petrified: cturn = std::max(8, 150 / (1 + modded_speed(mons, 5)))
because I wanted the first to always run out faster than the second, but at the same time make the ratio of Petrifying/Petrified tilt in favour of the first for powerful monsters. The numbers are more or less made up, and tested with different monsters in wizard mode. Still, could be anything between too weak and overpowered, though the latter is more likely.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5761 c06c8d41-db1a-0410-9941-cceddc491573
JI4NDSOXGGZ7QHXXFB3ZTHAKHABXYBZXPDGLUFV5SKYEOL5FT7JQC
O4ALQTGKFDGHEHBP3JGBKDY6KYDJZSVKGDX5WXR4IDWGUYYA263AC
7BRWL2WWX5MCT5PJLWIEV7TCQW7UP2ROBGYR3HDAKM2SZI36YFIAC
JTVDCTHZTM5T45FC7UHNBXAJLF4OLSGJ2RH4RH3VN2TYPDWVVWLQC
DRQ6OBPWBA5MKPVQXELBHOWBN3I374QHD7OBTYSOEU3XQ2WBXUJQC
U5E476KITX52LCQEDW7OYSEJJS3B7624LHAUFENVMNZM76OAFJ6QC
5FJOO7TPXXTY66X4O242AWSMYNDLG2NI2NKSHDELLDIMAOE5OBTAC
KATZLWENEIQMKKWIV4ZLXJ5HFUW6SU5K4ZU6NENBOL4XAAVTDUKAC
LUGK6T7QQB7VZCQGXHPOUCUAO75U6COYCSESVFXOR5JEDMJNN3JAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC
I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC
2HNLFROSOZ6ROLX3Q3W5E7I4Y4ELIWSJ7EX5GDGZZOMRPTK6TBSAC
3YBQGKQ22WFXA5RXDSKLFWMABLJ6KHBVWEIA3WIDHWM25OECNTYAC
DH3YTI6VVI727SQXO4CXSDCSBG2UN3UAWLFULBGRLBVH22ACRXIAC
BWHU47MJ7KAVKMKMRBVYLOHUCASSNVCGPC3SPMNBAC7DLI6XX2YQC
SS6MUIJYTGIVBYU356Z563QJWLJ47QNHSJWS7GJTS7EATZH2ESJQC
V2LAHZJVKBRUAKHRXZZTHOAAHKHUS4CWWZICYEJHTDI6IA7X4LUQC
4OV4JZ6NWQ2ZK4LEWCUWALLB3BVANJJ2EMLHC5LJLA5WYSP25OIQC
GUXTGUEMZYBRGV5QUAQSJHG3AOIQDWWCDIMOX4LASFJAZVGL2WQAC
XOQT7UV34HL6343R7VDXA6LAOTQDAKUAF3IWOROKHSMXRYGO5G6AC
ILO5P5FRDUY4SEQEXMTUDKOPXAUBJRSORHHUVTLLCYOYSXBXOVRAC
LJK4ZQATLSB4MKZG3ARZX5V6RFGTN3NLCN6GTCUGJQKU26SOXMUAC
VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC
FBK5ECMQ6HJSQSN7C3DICKJIRJ3CSO3CHCQ3ONPBKLLSHDGPBQ7QC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
RM2JXW3ATVYRYHF3NMG5ALGI64OJ7IP2F3MDUDPUT5TBKSSN4KVQC
247OW5JFN34ZV3GRVHRE25AXLLISUBPOX5YRGUE64BCM2V7QNEHAC
SJOTTUZMA3UTGT5D6LKUTBDP2CZFXT24FB5IAWCUFHSHLLACM75QC
Z63Q4DA5J5TZAC5LN55UD4CLADUMU5Z73TGEVE2YUXCHIST2Y4QAC
L2G3D7YWKDUA6FMEIWBCAJQVHEWE5RELWMWWLGBXFUDSVP7ZKUSQC
FCZSQBKDNMJZRJS2LWQQWLUFGOXSKXDJZQIHC7L5S7HXCXQPOMMAC
G3HJCS277WA2VONPOJW6FAOQO7VHMSMLXZWYIXKFE4N4Y3OV7UZAC
AOAJ6D3OKSELEYKAT55XCVU5LYJ7SMCZKC6DIEGLLB3TF2LEENWQC
OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC
627CM2ZOKVBMPVPBYGWBWWPT2FBMVRRH2VDGPT6Z5XCVJ5R4YQWQC
UIRWVLX5LDNWURTZOG7EFLXE5OOEL4XBPSLSUHUQSKHC4A7WCVLQC
KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC
4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC
VQD5BW56OTUNPILMCASXZ6YZ3OQGXKQ7CSNDMNZUX72AQZXKOE3QC
XXBZEIEB6JTDFJC6V2VSDAV2KHDXZYQ245EMQBKOX3I7HTU2DMIAC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
UB67ZWGT7FOPKZ7SO5PAO3V4PUBPWPWXKQIQIUABNB533XP4JUMQC
LC2XZTUD56PLARIGBTDXDPJIYJNMJU446GFDGLRIFD2I4F66L6TAC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
23PFLB2E4QHL5SF3Q2YV5FXRH6MFHENEU2ACVC572ZCYDXCBZVQAC
5XSXMOBGXFLTIQE6WDXWWFVDOTUPZSIQ2FWT3YI5QMVU6D76IUYQC
WDEFQ6YABDQIGJXW5KT3OGR3EO6FZHXZELIRVIXQ4XDYTVOV5V6AC
TVC7W7C2XKBQSD2IJFMWFVGXZAOD4EUOW43NAQTOF5KFMAUOJABQC
22MF6OUN62WDBJR5QFNJTKU7Q5TIQ76XWCEIRBFWAZDMZUSKJGCAC
NRTBKC3AXWOHMSLJ2CTBGG3NQHSY6BLK7AOZ7TJV4FPWQ4PUZ7XAC
KQNMFSLV62B4ANDKTUZ7LQH2MD2NDGNCP55MKM5YAATQ4T52H2PQC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC
UABVRWV5U33LQGPNTESOUT72XZCGUNEGIAWTXHJQYXLSJISG4UOAC
FJCG7QPYI2ON5QIGUZDIA6KTJP2BOU45K5ZE6HOEUSLZTEW2YW6QC
7G3PQFF6KRL7XLFTHVDNPFNFHNJRACG2SQK32WXK2D22AMUPFP3QC
MJWFTUS66PTCNEYXEJA3CUJFXNWXIKDD6H3V24PW7HK64NSVOFSAC
OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC
RGY2525RQH7SSGM6ZVI7CZL4WMNFZK2WRABOSIWRKQYYOU2RWN4QC
BUSA7O6EFBZVAG2RL5T7MD2WTWKOEKKIAAZ2VS4Y3L6ECT4HQR6QC
KHVK7HH7OIYOBZY52WQGGLC2O4SXTWQS2XAHNJZZ7JZ3QTOUTLNAC
QYQKV4R47PTERXVFQNNWWQVICGSOMBHW6WM5TAZAKLIYOLLPUAJAC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC
IDTLZ6PEPJP67PO7K5TODLXTBFAEVIE4C3HZCXIQK6OIAQKRVDUQC
LKLHWERPXMDTRNYPEXVDVB6PE7CT5PZ6WMNJJDTBBE5FBHOCEK5AC
KKEPQAZMWQFWPQ4P4KT5PWG2YFPG7H4JHL5K7USVHQ3Y6L4NWURQC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
3EFDG4W2ZURQDU6I3AFVW4ETTD3ZHSCLQ7MOK5FK7VQCDQDUXIGQC
O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC
OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC
FVT2J6IVMSQZYKQGUHQVGT4ADYM7AWUQ4U7766GBRRFMSR2WBMLAC
B7MSPF6X2RLGWN4M6ZZF3WSOPKGYPTTD7LIJVST7DXN27DG6JHNAC
JZCODQCOUBBBPPR4TLOAPIB4BQLDY3ORTJXTWEQSUJVJ7DMK7FVAC
for ( int y = ystart; y <= yend; ++y )
{
for ( int x = xstart; x <= xend; ++x )
for (int y = ystart; y <= yend; ++y)
for (int x = xstart; x <= xend; ++x)
|| mon->has_ench(ENCH_CONFUSION) || mons_is_paralysed(mon) || mon->asleep()
|| silenced(you.x_pos, you.y_pos) || silenced(mon->x, mon->y))
|| mon->has_ench(ENCH_CONFUSION) || mons_cannot_move(mon)
|| mon->asleep() || silenced(you.x_pos, you.y_pos)
|| silenced(mon->x, mon->y))
if (mons_is_confused(mpusher) || mons_is_confused(mpushee)
|| mons_is_paralysed(mpusher) || mons_is_paralysed(mpushee)
|| mons_is_sleeping(mpusher) || mons_is_stationary(mpusher)
|| mons_is_stationary(mpushee))
if (mons_is_confused(mpusher) || mons_is_confused(mpushee)
|| mons_cannot_move(mpusher) || mons_cannot_move(mpushee)
|| mons_is_stationary(mpusher) || mons_is_stationary(mpushee)
|| mons_is_sleeping(mpusher))
|| ((mons_is_paralysed(def) || def->behaviour == BEH_SLEEP)
&& !one_chance_in(10 + you.skills[SK_STABBING])));
|| ((mons_cannot_act(def) || def->behaviour == BEH_SLEEP)
&& !one_chance_in(10 + you.skills[SK_STABBING]))
|| mons_is_petrifying(def)
&& !one_chance_in(2 + you.skills[SK_STABBING]));
static void _beam_petrifies_monster(bolt &pbolt, monsters *monster)
{
int petrifying = monster->has_ench(ENCH_PETRIFYING);
if (monster->has_ench(ENCH_PETRIFIED))
{
if (petrifying > 0)
{
monster->del_ench(ENCH_PETRIFYING, true);
if (!monster->has_ench(ENCH_PARALYSIS)
&& simple_monster_message(monster, " stops moving altogether!"))
{
pbolt.obvious_effect = true;
}
}
}
else if (monster->add_ench(ENCH_PETRIFIED)
&& !monster->has_ench(ENCH_PARALYSIS))
{
monster->add_ench(ENCH_PETRIFYING);
if (simple_monster_message(monster, " is moving more slowly."))
pbolt.obvious_effect = true;
mons_check_pool(monster, pbolt.killer(), pbolt.beam_source);
}
}
if (_decrement_a_duration(DUR_PARALYSIS, "You can move again."))
you.redraw_evasion = true;
if (you.duration[DUR_PARALYSIS] || you.duration[DUR_PETRIFIED])
{
_decrement_a_duration(DUR_PARALYSIS);
_decrement_a_duration(DUR_PETRIFIED);
if (!you.duration[DUR_PARALYSIS] && !you.duration[DUR_PETRIFIED])
{
mpr("You can move again.", MSGCH_DURATION);
you.redraw_evasion = true;
}
}