Fix 1996304: the Swap card incorrectly swapping monsters/player caught in a net
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5941 c06c8d41-db1a-0410-9941-cceddc491573
HAMUM5IA4BJMLRIME7KVVVYLRHVS55RIYMGLLQZL3F7QEP7FJ5KAC
ND4ACNEVS6XTHPUSWPD6OCD7UXVLGCC4VNHUYRZNGRRO6ETD77EAC
DF5LOTJFSXOT7UBDHLBDLGA22OY4L7ZF6CVFP6H3KL4N5CHB5C5QC
CIAIASCBKKV7VMYBL2CIFAYGFQTB6GIME4FSQGZNQGXO7FXQTA5AC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
Z75MWMOPGK3RC3ERIV5AW52CRJDTYWLXYGE6CHRF4MCB5EJ7WH6QC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
V7IKAPO5OY7CJTT62GMHQOD3EQW42FTTY3KDBOTJUODPS5WMBCHAC
WQLOHSNCA3VOMDJF6IINJYKSYVYZEBPJJWBB33QSNE4RP5HEXPMAC
JP7SVXCIKEPVDD4Q5CDYDATPK7X5XOYW3T6QK2Y6EWHFH52LBK3QC
6MAMXLPWLW5IXKQXGUNSKNZNHZM7U24GQNN4IWZL2FKKGAKL23YAC
TO43FWKHNIA5MVDOFXYHQODTLBQYEZKX5UIUGID57436UF7G2EXQC
RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC
NLXVJSK53M3GCGGVJWYPHYZJ2A7JAF2FEYQPIGLRUYJ3FTWYONLQC
4HLF6Q3OBOOHCCJ76L2BXVIYI6EMJ2G7O4XXZPFTLFP6BQGSUZNAC
YOYLOYEHDT254RQ6KODMNSSNWS5S4AMT35QAXLFWZAPX7BGL7MMAC
void check_net_will_hold_monster(monsters *mons)
{
if (mons->body_size(PSIZE_BODY) >= SIZE_GIANT)
{
int net = get_trapping_net(mons->x, mons->y);
if (net != NON_ITEM)
destroy_item(net);
if (see_grid(mons->x, mons->y))
{
if (player_monster_visible(mons))
{
mprf("The net rips apart, and %s comes free!",
mons->name(DESC_NOCAP_THE).c_str());
}
else
mpr("All of a sudden the net rips apart!");
}
}
else if (mons_is_insubstantial(mons->type)
|| mons->type == MONS_OOZE
|| mons->type == MONS_PULSATING_LUMP)
{
const int net = get_trapping_net(mons->x, mons->y);
if (net != NON_ITEM)
remove_item_stationary(mitm[net]);
if (mons_is_insubstantial(mons->type))
{
simple_monster_message(mons,
" drifts right through the net!");
}
else
{
simple_monster_message(mons,
" oozes right through the net!");
}
}
else
mons->add_ench(ENCH_HELD);
}
if (see_grid(monster->x, monster->y))
{
if (player_monster_visible(monster))
{
mprf("The net rips apart, and %s comes free!",
monster->name(DESC_NOCAP_THE).c_str());
}
else
mpr("All of a sudden the net rips apart!");
}
}
else if (mons_is_insubstantial(monster->type)
|| monster->type == MONS_OOZE
|| monster->type == MONS_PULSATING_LUMP)
{
const int net = get_trapping_net(monster->x, monster->y);
if (net != NON_ITEM)
remove_item_stationary(mitm[net]);
if (mons_is_insubstantial(monster->type))
{
simple_monster_message(monster,
" drifts right through the net!");
}
else
{
simple_monster_message(monster,
" oozes right through the net!");
}
}
else
monster->add_ench(ENCH_HELD);
}
if (mon_caught)
{
if (you.body_size(PSIZE_BODY) >= SIZE_GIANT)
{
mpr("The net rips apart!");
you.attribute[ATTR_HELD] = 0;
int net = get_trapping_net(you.x_pos, you.y_pos);
if (net != NON_ITEM)
destroy_item(net);
}
else
{
you.attribute[ATTR_HELD] = 10;
mpr("You become entangled in the net!");
}
if (!you_caught)
mon.del_ench(ENCH_HELD, true);
}