suggested by dolorous in BR 1977925, and turn coloured draconian corpses into plain draconian skeletons. Same when the game attempts to create coloured draconian skeletons or simulacrums.
Added autoinscription to the single inscription command ('{') - this is necessary for items with long descriptions that can't autoinscribed otherwise.
Added a small hack to make death cobs (%) appear correctly in the monster list.
The rest is cleanup, I believe.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5376 c06c8d41-db1a-0410-9941-cceddc491573
RX6575DZOHRUXQUZH34YZGPZJF4STUPLBQDIVTINA2L6LVCKRIGQC
SYK4BXITMR2PELPHDAPTOLLHYMTBVDY7NZHBSKOR5ACB7VJUUUHAC
G7Y4WKHR2FHMKCBFZXKZNT37S7YVNHTDI7CZPXEKD4QXXCR6HQWQC
C7RRWT4OPLL3MLBTFYI2Z4PJX2DMS2QHKDLTLQBGR3LD6UCO6XEAC
MKI4RE5PG2PMI5XJ4QQNCKMX67E3XL3LTNPRMSCBP4RZFJTBO74QC
FSQYBDXMZTRQE4THPQYVTJART53KUR6SCS66X4AT6HQS2C2MOOZAC
T7CUIVICB74342RA32BR37T36FOX4RBSQIB5PNOHTGTGUYGDKSTQC
QXD3HX6QQ37PW6HVKIIKGFLO2ACROLUGKK66KFX7ED6SO4FDXB2AC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
U6ILMKBXTQZYT62IGD2CALYNU4VQGRSTHN6QBFBU7BVUBHWYOEQQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
7MDPXLMPCFLZS6CLZBN4FN4RDNBW4Z6Q2NNPWD2N3LOW5LQISM3AC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
NO2HRD7RZS42S55UG4FQ5EFQDY6WYWKGIXHUKYLWF36HHE3VZ7WAC
HT2Z5ZWY5G2QVHXCKFDQT62FRNGPRRD3HHJ2UULBWRTMAJICUDGAC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC
GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC
22MF6OUN62WDBJR5QFNJTKU7Q5TIQ76XWCEIRBFWAZDMZUSKJGCAC
BSAKBTGIAD3JFZPNLMEI6SOJ2XPT4EJNETZYBW2555ASJTZ2GEGQC
YZXHBEKWQPY4BTKG5FFGLP3AIRBQSTKQVLJJHWKQEA3HTN4UHDYQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
ISSEUTHG7EH3QTFLS23GXFIOQXCI5HJPJMK6GWNFMC6NDRD2H34QC
6RJVKSL7RVZIZIZIC4TWIYJQ24RUSB346ODS3NYGDHUIRTC4Z5FQC
UWI3ZNJDRQRL7CXFNFEG46TA6SAK24XUFY5YOKVOTJA3VG3OBNFAC
E5DMZFW6WCFAKTKKOQPYTQXZ2CGLWMVH64LRXDUI2UIG4VYUHIVQC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
CG4TL4AKSN4J7CMATZFJ5N7PSDCQXLS3QYX7PZ3K67KMMBT675OQC
RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC
SJDOBXECX7F3ZPPVR7FPURE53D47PP2TFIF4SB6XPS456PZV3DQAC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
TZ55IZNANEJO2WDTKYWVLY2W2VV6BR7WKIN7XLNISAMMFT6LG2WQC
Q3XHNSHW6FI4JCXSEABATRFBJPMCF7PXNG2K6ZQTRRPVMIZFHUBQC
TM35IHKZZNBCMR3ERBS4EYHGUK5IVCPUT2JUITMT74AYAIUZSYFQC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC
K2GMFKXUWN5R3KCW6OYVXHN47MIQZKEEIOSAU6LFFKBNKF6JBVWAC
HL6BR2XEXRPWBU4MQNI52H65OSJB46KOLC4R3KWNQYDEPPXBAH3AC
4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC
WL5WZXFJ6TONUQRSHUY4GQ5USU47ILWNN5X2JDQZO4CRJJZSRQIAC
VNIAJEGE3PYE6F6EAMCQDWMAS52EQTKJUPAFXK7ARCITZ326WTTQC
SGR2P5BGJIJHVSSQYQHWS4ORLVHQBZTDES3D4BFC6SVAQXSKENNQC
LFBNFE3PZBXTR2ROPKYPARUWLJAYWAKGTS7VBWADZWVVSJ5CLX6AC
TR4NPGNO5QNNRJNVMNSUEO5QLT37HCXXDOBKXCB5XWXRQNAJ5SHAC
TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC
34RCM6RXIWHZMYXNGFQKLKQIAJ6QISIQ3D5HMK4HZNLVX66BSUBAC
IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC
Y2ZJISJRUNYX23QPPLIKKUIM7XJFNSDE5GHUE6DCGZ4RCGFNZBJAC
HZK3YN3SAISTDS5JI4COBYFG7YB4ABDVENXWZZEYLFA2LDI232VAC
JUNF2JNFSVAITA6XQU3CEOMP5PG4PVSHKIGFTSUCYCN4ICPEXEKAC
7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC
ITXXL3C3XOWESEDE4TXCPJSDUSITZXBKIFM52XIC3ZRDMS4ZB43AC
BDFIS53HAIHOCXQ5BE7WCO2MEOFCUQPFY4JGUWVLWY6JO3IFMEKQC
SSCG2FLJMUTTIRXBFSPLAUUBUIN375ZGL5UOAF3SC62ZIILSMMKAC
RREJL4WZKWFEMA62AC5G5UDTOXMW4UULIQXVA5RPFASPODMHQZ7AC
547JREUJXTZNYVGHNNAET5F5O5JYYGNTDQB6ABZNT7YX5EY64OHAC
KX23OEQBBLMQHTFCA4TYYEGLHCETXVZCXALYR5U5RELKJMMB66SAC
5CNYJQGEILRX2TAYBWMVECJ6D4OPV2CD6YPDIERS2SR77Z4LTZPAC
34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC
5KJCHLIUFKRPMIVWUAYT6EOF7SW4PTQF6Y5OPEFWXGLE7DUGYLZAC
4ZAYR6K7SNJ45QYS5KLZOJ2T7OKYL4M2RY5UIIMOWRQGZLTME6UQC
TX3LTXGB7TJ2QHLW2TEW6XTCTOW5A3KTZGBPBRTDTUYOZFFT3NLAC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
ZVRH264FGAMRHW3YAHKAZVMZ66TAZNOQQOOTPXPQXUULLM32Q4WQC
SEQIMAWXQYBD6UWTK5HYN4KGLLV53HFM3LLQRSG4N5ZVZTLPR22QC
Z6XF4AIERIW4U4AR3HU2ILYFZ54IK4K4ORQ6JKCEWRO5LZODWDDAC
4MPLCIJZL4YNUWK2RTKNE6N4UWNBMO5WDRKW737ENVE3RKV5LCRAC
GKA3ZGZ2P6F22FDNSYNQDMCS3N7HNZD5QCOSQ6VJRAU2K5U4YYTQC
UET576SVCGS2TXEDRTO7BUTOTLJ77MYHIVZJCDWGH2BAXYMKG6DAC
JCWJWGMQIKQGSSFJUQRKNIWW3HBOJSHYDTOPPE5BWOJTIJTDYUTAC
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
U6Q43EFKHJIDBBWN6RUTOYRHHX4IT73OPBR4CWIOKUDGTCYQE5PAC
HIRKGUMNJPWKSVTR6TVBPD3MWNA63CEHCLCIPWEMGDFHVB3NPLDQC
JGTKZP6HCXDHEJLAONL3FNLNIZ7MUBYKXZ4CRTL46YC53TW7CBEAC
LZBHBSCXDX2JKU2BSO5QP3WDHFIGHPXK4CKUZV6FWYDRFWLQK26QC
JVSCP4FTW2G57C6YD5HZOZXTODGZH7TR75JQGFJBEPX3LCZH236QC
23PFLB2E4QHL5SF3Q2YV5FXRH6MFHENEU2ACVC572ZCYDXCBZVQAC
LC2XZTUD56PLARIGBTDXDPJIYJNMJU446GFDGLRIFD2I4F66L6TAC
E3STDXDY3HJCQBPDCGEQAXKHF2R4CQYQKINUGSS6IYPLEGJBEIKAC
RQR4PTMGQLTRWLYRU3KXIIDGND7FBORESJWMWFVD3WYU5SISZXAAC
P2YNOE2TUTZFAOBTHJOIVD6TCV7J7D2UKUX67LHZUL6QY44ZMENQC
// case MONS_VAMPIRE:
// case MONS_VAMPIRE_KNIGHT:
// case MONS_VAMPIRE_MAGE:
// case MONS_WIGHT:
// case MONS_WRAITH:
// case MONS_SHADOW_WRAITH:
// case MONS_FREEZING_WRAITH:
// case MONS_SPECTRAL_WARRIOR:
// case MONS_SPECTRAL_THING:
// case MONS_ABOMINATION_LARGE:
// case MONS_TENTACLED_MONSTROSITY:
// case MONS_ORB_GUARDIAN:
// case MONS_ZOMBIE_LARGE:
// case MONS_SKELETON_LARGE:
// case MONS_SIMULACRUM_LARGE:
// case MONS_BIG_FISH:
// case MONS_GIANT_GOLDFISH:
// case MONS_ELECTRICAL_EEL:
// case MONS_JELLYFISH:
// case MONS_SWAMP_WORM:
// case MONS_LAVA_WORM:
// case MONS_LAVA_FISH:
// case MONS_LAVA_SNAKE:
// case MONS_SALAMANDER:
// case MONS_ROCK_WORM:
// case MONS_KILLER_KLOWN:
// case MONS_GOLD_MIMIC:
// case MONS_WEAPON_MIMIC:
// case MONS_ARMOUR_MIMIC:
// case MONS_SCROLL_MIMIC:
// case MONS_POTION_MIMIC:
// case MONS_DANCING_WEAPON:
// case MONS_IMP:
// case MONS_QUASIT:
// case MONS_WHITE_IMP:
// case MONS_LEMURE:
// case MONS_UFETUBUS:
// case MONS_MANES:
// case MONS_MIDGE:
// case MONS_SHADOW_IMP:
// case MONS_RED_DEVIL:
// case MONS_ROTTING_DEVIL:
// case MONS_HAIRY_DEVIL:
// case MONS_BEAST:
// case MONS_SMOKE_DEMON:
// case MONS_HELLION:
// case MONS_TORMENTOR:
// case MONS_BLUE_DEVIL:
// case MONS_IRON_DEVIL:
// case MONS_NEQOXEC:
// case MONS_ORANGE_DEMON:
// case MONS_HELLWING:
// case MONS_YNOXINUL:
// case MONS_DEMONIC_CRAWLER:
// case MONS_SHADOW_DEMON:
// case MONS_SUN_DEMON:
// case MONS_REAPER:
// case MONS_SOUL_EATER:
// case MONS_ICE_DEVIL:
// case MONS_LOROCYPROCA:
// case MONS_FIEND:
// case MONS_ICE_FIEND:
// case MONS_SHADOW_FIEND:
// case MONS_PIT_FIEND:
// case MONS_EXECUTIONER:
// case MONS_GREEN_DEATH:
// case MONS_BLUE_DEATH:
// case MONS_BALRUG:
// case MONS_CACODEMON:
// case MONS_CLAY_GOLEM:
// case MONS_WOOD_GOLEM:
// case MONS_STONE_GOLEM:
// case MONS_IRON_GOLEM:
// case MONS_CRYSTAL_GOLEM:
// case MONS_TOENAIL_GOLEM:
// case MONS_ELECTRIC_GOLEM:
// case MONS_ICE_STATUE:
// case MONS_SILVER_STATUE:
// case MONS_ORANGE_STATUE:
// case MONS_GARGOYLE:
// case MONS_METAL_GARGOYLE:
// case MONS_MOLTEN_GARGOYLE:
// case MONS_PANDEMONIUM_DEMON:
// case MONS_BALL_LIGHTNING:
// case MONS_ORB_OF_FIRE:
// case MONS_VAPOUR:
// case MONS_SHADOW:
// case MONS_DEATH_COB:
// case MONS_IJYB:
// case MONS_BLORK_THE_ORC:
// case MONS_URUG:
// case MONS_EROLCHA:
// case MONS_SNORG:
// case MONS_ANTAEUS:
// case MONS_XTAHUA:
// case MONS_TIAMAT:
// case MONS_BORIS:
// case MONS_MURRAY:
// case MONS_TERENCE:
// case MONS_JESSICA:
// case MONS_SIGMUND:
// case MONS_EDMUND:
// case MONS_PSYCHE:
// case MONS_DONALD:
// case MONS_MICHAEL:
// case MONS_JOSEPH:
// case MONS_ERICA:
// case MONS_JOSEPHINE:
// case MONS_HAROLD:
// case MONS_NORBERT:
// case MONS_JOZEF:
// case MONS_AGNES:
// case MONS_MAUD:
// case MONS_LOUISE:
// case MONS_FRANCIS:
// case MONS_FRANCES:
// case MONS_RUPERT:
// case MONS_WAYNE:
// case MONS_DUANE:
// case MONS_NORRIS:
// case MONS_FREDERICK:
// case MONS_MARGERY:
// case MONS_MNOLEG:
// case MONS_LOM_LOBON:
// case MONS_CEREBOV:
// case MONS_GLOORX_VLOQ:
// case MONS_GERYON:
// case MONS_DISPATER:
// case MONS_ASMODEUS:
// case MONS_ERESHKIGAL:
// hack -- non-dungeon zombies are always made out of nastier
// monsters
// Skeletal or icy draconians shouldn't be coloured.
// How could you tell?
if ((cs == MONS_SKELETON_SMALL || cs == MONS_SIMULACRUM_SMALL)
&& mons_genus(cls) == MONS_DRACONIAN
&& cls != MONS_DRACONIAN)
{
cls = MONS_DRACONIAN;
}
// Hack -- non-dungeon zombies are always made out of nastier
// monsters.
case MONS_ZOMBIE_SMALL: case MONS_ZOMBIE_LARGE:
result += " zombie"; break;
case MONS_SKELETON_SMALL: case MONS_SKELETON_LARGE:
result += " skeleton"; break;
case MONS_SIMULACRUM_SMALL: case MONS_SIMULACRUM_LARGE:
result += " simulacrum"; break;
default: break;
case MONS_ZOMBIE_SMALL:
case MONS_ZOMBIE_LARGE:
result += " zombie";
break;
case MONS_SKELETON_SMALL:
case MONS_SKELETON_LARGE:
result += " skeleton";
break;
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
result += " simulacrum";
break;
default:
break;
}
// Vampire draining corpses currently leaves them a time of 90, while the
// default time is 200. I'm not sure whether this is for balancing reasons
// or just an arbitrary difference. (jpeg)
void turn_corpse_into_skeleton(item_def &corpse, int time)
{
ASSERT(corpse.base_type == OBJ_CORPSES && corpse.sub_type == CORPSE_BODY);
// Some monsters' corpses lack the structure to leave skeletons behind.
if (!mons_skeleton( corpse.plus ))
return;
// While it is possible to distinguish draconian corpses by colour, their
// skeletons are indistinguishable.
if (mons_genus(corpse.plus) == MONS_DRACONIAN
&& corpse.plus != MONS_DRACONIAN)
{
corpse.plus = MONS_DRACONIAN;
}
corpse.sub_type = CORPSE_SKELETON;
corpse.special = time;
corpse.colour = LIGHTGREY;
// you can't unwield/fire a wielded cursed weapon/staff
// but cursed armour and rings can be unwielded without problems
// You can't unwield/fire a wielded cursed weapon/staff
// but cursed armour and rings can be unwielded without problems.
/* Fill items with the items on a square.
Squelched items (marked with =k) are ignored, unless
the square contains *only* squelched items, in which case they
are included. If force_squelch is true, squelched items are
never displayed.
*/
// Fill items with the items on a square.
// Squelched items (marked with =k) are ignored, unless
// the square contains *only* squelched items, in which case they
// are included. If force_squelch is true, squelched items are
// never displayed.
// Actually, it would be easy to add the monster type to a corpse
// (or to another item) by setting orig_monnum when the monster dies
// (already done for unique monsters to get named zombies), but
// personally, I rather like the way the player can't tell where an
// item came from if he just finds it lying on the floor. (jpeg)
static bool find_subtype_by_name(item_def &item,
object_class_type base_type, int ntypes,
const std::string &name)
static bool _find_subtype_by_name(item_def &item,
object_class_type base_type, int ntypes,
const std::string &name)
mpr( you.inv[item_slot].name(DESC_INVENTORY).c_str(), MSGCH_EQUIPMENT );
mpr( "Inscribe with what? ", MSGCH_PROMPT );
if (!cancelable_get_line(buf, sizeof buf))
{
// strip spaces from the end
for (int i = strlen(buf) - 1; i >= 0; i--)
{
if (isspace( buf[i] ))
buf[i] = 0;
else
break;
}
you.inv[item_slot].inscription = std::string(buf);
you.wield_change = true;
}
else
{
canned_msg(MSG_OK);
}
inscribe_item(you.inv[item_slot]);
void inscribe_item(item_def &item)
{
mpr(item.name(DESC_INVENTORY).c_str(), MSGCH_EQUIPMENT);
std::string ainscrip;
if (is_random_artefact(item))
ainscrip = _randart_auto_inscription(item);
// Only allow autoinscription if we don't have all the text
// already.
const bool autoinscribe =
is_random_artefact(item)
&& !ainscrip.empty()
&& item.inscription.find(ainscrip) == std::string::npos;
char buf[79];
if (!cancelable_get_line(buf, sizeof buf))
{
// Strip spaces from the end.
for (int i = strlen(buf) - 1; i >= 0; i--)
{
if (isspace( buf[i] ))
buf[i] = 0;
else
break;
}
if (autoinscribe && buf[1] == 0 && (buf[0] == 'a' || buf[0] == 'A'))
{
// Remove previous randart inscription
_trim_randart_inscrip(item);
if (!item.inscription.empty())
item.inscription += ", ";
item.inscription += ainscrip;
}
else
item.inscription = std::string(buf);
mpr(item.name(DESC_INVENTORY).c_str(), MSGCH_EQUIPMENT);
you.wield_change = true;
}
else
{
canned_msg(MSG_OK);
}
}
// monster cannot be affected in these states
// (all results of Recite, plus friendly + stupid;
// note that berserk monsters are also hasted)
// Monsters cannot be affected in these states.
// (All results of Recite, plus friendly + stupid;
// note that berserk monsters are also hasted.)