is no longer necessary. However, holes in the mutation numbering will cause a crash (random2(NUM_MUTATIONS) is used in a few places.) Breaks saves badly, sorry. I tested this somewhat but some bugs might have slipped in. Fixes a few other bugs (e.g. draconians not having any messages if their wings disappear) and highlights some unused code (e.g. no way to get the stinger mutation.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9234 c06c8d41-db1a-0410-9941-cceddc491573
X3B7EVFL3GJOEID2C42QJQIQBJS4YLA4R2HT4LXGDPIBKHGDDEHQC MFFS7OHRFVHVB6A5BN7WJ7C3WSCUUNX3B4LVLESPB6OCPXZUWYUQC HDICSBH25TFURJY7N6OLXJR6EJEMYFTD7EXIJSYY2GZOMQZ2TYHQC UIPP24IE3AZFGFMYM4NXWQQWFFBXEJBNSWDV6VHDP4DJNNEUKAKAC AE66GSBGYDYM74YB362N6RZW6RQQL4RCXWMDBGKKJXVAGCY25PFAC SLAKSKTKWZT2IQ4EMQP5OF7U3M6LAEARH4PYEXT6RDBLVYBHCUMQC OMRGFCIC7YV6SFSQASVUECR6EMUFF5NVZC7TYQFMPXUSHHPHEFUAC C6SU6CPHYLFEJTVDX4Q5VBL4GCCKZNTI3TEB3YSFG2RYELSQGA2QC BS5R6I7HHHZUS74DG52RHDFKCORK5JQMPQZO35ASZ3TZNYUAX7VAC 7K5WX25MHMSAE7C5TP3T3SYTOLMKHZ44J3ZGL6QHCIJMK7LP6V7AC 3EEANHIOVDZCYDZFSQIBDCBXM646G6TNLUKKHDGVYEXWTGRYQTFAC DCOMZRPROZNXAL67AM7ZWBPWNS6IQL74S67K2JLLV4Q4MU36STZAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC CLIEHAE2PP7ZIGLLIMYCWM4FC54KBOAN5AILOLAZJ5S26GTJM4RQC PGTE3JC4J5U536IJTCJFXTUOSRE73JXZJINWAGCANOQOCGC7J6AAC 3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC AQ36MO7VNGSGQ5KK7JCQA2WEHUELAFLSU2QBUWROVJFOTPMGFGMQC EWFP6RFDHTEGD6SX36LYRLQB3APIKGAHNBKWPD56RGYBUE4FWJUQC CMNLYUECIMEZSOYG4KOSINOPER5OM7PPCGIHCM7LQVWEO77XFUYQC UWEN2EZXAWVDX4BTX6RHJEPTC6ZC7SRG4LAP27LLFILDPQ4BRBGAC XG7HS3PRUOW35OPBF5M3ZFURHPBUMQRQPZ7GIKZIVGQ2INEBMENAC WF3F2I73VYD5BGLTUC3YWXZQ3CN2H2ZPBH2R7WJ5WQLHJSUYGU5QC S6ADNAPM545WP3FRHCU6UWKX5VEMY5TPSIZYSZ3XE76VCBTVIN5QC KPWRUHZWXG5TEDDAUCRTLGQGTAS27WYWODM3LXQ4E7XLHZEEY27AC TTHOIZMSG2GWUO5IQWOPYK5V5DS6HIPD7ULFI6P6E7LQ6MMKPMHAC Z2KSBD2LWXDNFJPIIYS3GGXHBXQLTLDYGPAJY4T3LNNSOVT5ALZAC H7KLIGBECC2SCGAIFPZFZ7P2TVDKR67HQ7AG5LXPP5SVNL7RWAHAC GA7RSKRL2B7OYL4NWCCMULF2QXJ27NALF7KWTSVXY272NS5KFGJQC Z63Q4DA5J5TZAC5LN55UD4CLADUMU5Z73TGEVE2YUXCHIST2Y4QAC ZCRK2DJ5VKECRQXZTWT4NUDL2VT5ZHUK7NT6NQPLRJ56TDX5PJSAC 6HB4TWKSEWOXTXUJINB4KKVKPHYPKDOAC56H7OAAXASIBAGARX3AC FBK5ECMQ6HJSQSN7C3DICKJIRJ3CSO3CHCQ3ONPBKLLSHDGPBQ7QC AR63P3QDQ6EU3CU4ECRGARNXTQFHOFGRAOSSQAZZ32TOFU6OFD2AC CA6ZG6P2CE5EPAOQSB3P7NBDKTNFFHQP4CPOUFZL32ON6N32GSSQC BOJPQUU6D4LHA2PGXUZBGTOW54G7ISKFXC4UQHLBSVAI7KQGYW6QC 7CMQLE4XIFMWDEUZAOKIKDW7BHAJCK5S26APMEZ6TEFEH63TEZ6AC 4Z3TR25JTD3KEKHICPLULPZU7SJ2454TVCASHRERV45MDFBD6LEAC P2ZCF3BBG523ZEOD6XQA4X5YEHBTWH3IM33YVHXP2SQ5POXZIH4QC 2BKZYWSXQV43NJVTUHGC3ZPFU5KT3C6YKTXEDW3DR7MKQ4F4UOXQC UVJBHQ5KGUIEFRHKTYQPKSXYDUDKTRAXINUXGJJJ6QGNCR6JO7ZAC JE5K2LGM25NQQ3VIBZ25WJEQ4AJJVFLZWOH5RLNX66NVGQWI3YMQC 4BSWRAIA7TLRFRZ4RMLOVDHWDWBGJCAQZUOPXPJYW6OJY6B3HPLQC MLZSEZWNNZMSIDQNAAIOJJR4K7VSVJICL5SAGHD3ROM7SYDVZABAC 3UDBQWJX7TIIV3WJWCOIETL7NYQ4GPEU5SUXA247SUZXNEAQQMBQC SGEDA6Y3N2SNKXM5LLOR4SP2IJIWY5ALA3IWQAUDAY22UTZCJUNAC POKKD4OOQZD4PMEITE5SNPXBNRJNNEJ5DJLRHF5PSF4G4MCYFM3AC ILFGYFIGMG2TGMEGOLYIBNCOTWK526EDQYXPZ3CUST6OEH77QFKAC LCCGXSFIDQFIRXHGRJWOELNPQOHHCXCWXS366GOULDFPQVOKAIJAC KBBSDMAXAGEDFMIVL6BSPMMSOBZKWPJTFCLBGCHRLE5DGTVAACSAC Y4ZNLX7ZW3DDSUXXQSQ235EHKVLLEFOTG2J2FOT7Z6HM6OMPY2OAC VCRHZX4OD42RQ6MIMXL6UXII46APZCHKPWV3TCFMYCKMIEK3GX2QC CB7U6IEEN2Z74672EYQQHWTB4GXVNNMAYDRQYAGY6K3QSDYYEHYAC NXIVXEHVXS22UDSQL4KZQ4VHK3XTW7DAGA5LLL3EXY5MHPIUXL7AC 5FECCMAC5QKG3SJ4ATZFE2QF7I3A4YKWKCU4XQEW2P2SWZ2J33YQC 63FVHSCMJNAYTX3O2MIWNOOSRBTCZCVQE5DWJQFF5P4GX6QRUXDAC JZCODQCOUBBBPPR4TLOAPIB4BQLDY3ORTJXTWEQSUJVJ7DMK7FVAC QEEJFAETO6B2J4IWDIDCJ5UNIFNNHHG22IWF2CUJRTJJBNE47CWQC Q7UVH4DI46F2E2KUPOTHZTAJKMMYM2UJ5KRUC5CJDZGR4AZCR52AC IJHH3PPN3KL6CXDXOB4I7VBEHHQJXXIKRZN45CT4DX5PQGER5REAC JBZ7NU4BB5PGQWCOSZHD5OQUHQIVOD4XGJLSJQ7BUGQEGPRTVGZQC ZBPS5ZTPF3DVTR5WET4XEFHYXU26CRHU2OHX3YO6PD4MTM2DUXAQC 3BYA46OYLVN6ZPGAZD5OGIMMH5PRWGNSU3ITJRCVBE6P5HYYYAYQC SIWYMIPYJIFTWSVO4PAVBZEXUYPUMHAUEO442J6YCYWAK3IOV5JQC OTADS6FRT25MVJ3NVA2XBFFX22JS6C6F3IAJBG3OAHYFYTLMYUIAC ZASKZI4USJSPW7CSCJUCFMLLTNQT3IGF5XSSW2FU7ESY735AMSFAC BZMLXBTB63CXPZZPFXM4VLE7IBXPBEZ6YLM4MSNQGJR4L5IBM3OAC XD27UUFYG5CXSQMTO5TMCAND5QUDNGLNGZFNISRFWCNO7R2ODAPQC LABXKXWWQY2V4FUDLGVTDYHXINAP6KRHZDHBQ2FE22FFOEIZPL6QC O4ZFDG3AEV3K4NPGCCLB7DXUH5CBETKP5FBKLCIET7JNTNDX5DUAC QWGKTN3UC5YEKX7KVABFAPMAQZFH3JGKO32RJM2NE2UXUHHVDYKQC MON7RKVUB3K6T2WHI4BTVLOQQFSVPR5LAAPHDMR5OLDFGNJBDY7QC AO7VKBS75RKHQDP3KYUVNMCE562K7NMVO2W3YXH7D5DKMKGO5GOQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC RB3ZDZXUZ3KVU5C4MFWTQB4J3PCQ5IQS4UVUBRS3TLSPFKBWNFDAC AMSENYIGRJWHHGHLKIZQGZZQTWCZBTS2Y3WKPVTZZRI7ZMTATBCAC PC5SUFZIL6KWW36FJNC52ZV3I32S5KC2BL2GIRLCMQ6UXYT6KWEAC S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC N6AGSH77SEVF4RU4NZIV3SL7SYQ2BQ25EV5RXCGVTWAFBDCP3MRAC ND3T5LCZATC63EVQ6SLI7XXMSUL7XICJDNLH3UCYUDEFWTA3N5MQC EEYHYRJXQKQZZ5PGEV5OCUJHCEPCHBECIPAD5QY4UMZUI5LLSVGAC IMC2HA2YWCU7SLGGVQQVUEUIST4ILSOEAUYXNZAW2PJZ475GXLDAC BQ5QKUWLCYSBO4A7EWZN4FXPNSIAR6JPBAZE4PSV6XCUNTV53ERQC R7S5SFHDENT3VTY7LAE3RXYDXDMJNB2QDNVZBD3TVBWV2RDHCWSAC FIYBXLWALQINNQTHG2KNDUUTAQAZRDDLXW2XOVSKDKBADJ3XCJ4AC PDK36YVNNJ76LDXLK3NBHHLE47GZRVYGAXDY2FWLD5H7HR4Q6WRAC 6CWMT6I76TMTHT7BVOVZJ7ATDMZ3VBKKICIRRZBOSGLHJMDS2DWQC KVDUZCENP2TCYLWIGUOS4JD4PK4TIJE5GGCAXVUBAYSF5YZFADVAC CJZ3R6IPU766AVGO2QHTEHY6BGM375IUL4W2XA33F2G2SGIAD2KQC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC UISCFODQTHZG4576DDR4QCFOGGOIT4BQI7DTVBSMLKHANTE7D3IAC SYOKJY5QJ6Q45KSF6Z2ADNGOS5CIRIY6CS5ZFKWZKV5J57Q7QMGAC O7S3ILRELHICJXXTDGMF7KPPZWYHPYCNDPV2I77FZXXH4I454B4QC 3FBKOX4Y5QYPMBOCSAMHNZXCY7Z75YDQDL4EJZHZIGDXL7RMZ7TAC SQDS2YBPOYDDDCW3GGARBZ2HQIUHCQKL7SSHKFQWDENOL5YNNVNQC HQSI2RK5QGNSOR5Y67GZDK4ZWFZ5DSRPASXAV4VHYVB5TUXFZWJQC 62RTHBY44JDI7W4EYD4UD3W2QL4CZ3SJ6DY7LX6QBCF3JWFEEIOAC WLX2RQMMOMP2PYPAGJRM4VFD2WTLJTOAZZPPY3MV76FU2EGEJ54QC // last updated 12may2000 {dlb}/* ************************************************************************ called from: acr - decks - effects - fight - food - it_use2 - items -* mutation - religion - spell - spells* *********************************************************************** */
// last updated 12may2000 {dlb}/* ************************************************************************ called from: decks - it_use2 - mutation - spells* *********************************************************************** */
// last updated 12may2000 {dlb}/* ************************************************************************ called from: chardump* *********************************************************************** */// default of level == -1, means to use the player's current levelconst char *mutation_name(mutation_type which_mutat, int level = -1);
std::string mutation_name(mutation_type which_mutat, int level = -1,bool colour = false);
const char *mutation_descrip[NUM_MUTATIONS][3] = {{"You have tough skin (AC + 1).", "You have very tough skin (AC + 2).","You have extremely tough skin (AC + 3)."},
// mutation definitions:// first number = probability (0 means it doesn't appear naturally?)// second number = maximum levels// first boolean = is mutation mostly bad?// second boolean = is mutation physical, i.e. external only?// first strings = what to show in 'A'// second strings = message given when gaining the mutation// third strings = message given when losing the mutation// fourth string = wizard-mode name of mutationmutation_def mutation_defs[] = {{ MUT_TOUGH_SKIN, 10, 3, false, true,
{"You are partially covered in thick black scales (AC + 3, dex - 1).","You are mostly covered in thick black scales (AC + 6, dex - 2).","You are completely covered in thick black scales (AC + 9, dex - 3)."},
{"Your skin feels delicate.","Your skin feels delicate.","Your skin feels delicate."},
{"You are protected by plates of bone (AC + 2, dex - 1).","You are protected by plates of bone (AC + 3, dex - 2).","You are protected by plates of bone (AC + 4, dex - 3)."},
{ MUT_STRONG, 8, 14, false, true,{"Your muscles are strong (Str +", "", ""},{"", "", ""},{"", "", ""},"strong"},{ MUT_CLEVER, 8, 14, false, true,{"Your mind is acute (Int +", "", ""},{"", "", ""},{"", "", ""},"clever"},{ MUT_AGILE, 8, 14, false, true,{"You are agile (Dex +", "", ""},{"", "", ""},{"", "", ""},"agile"},{ MUT_GREEN_SCALES, 2, 3, false, true,{"You are partially covered in green scales (AC + 1).","You are mostly covered in green scales (AC + 3).","You are covered in green scales (AC + 5)."},
{"You are surrounded by a mild repulsion field (ev + 1).","You are surrounded by a moderate repulsion field (ev + 3).","You are surrounded by a strong repulsion field (ev + 5; repel missiles)."},
{"Green scales grow over part of your body.","Green scales spread over more of your body.","Green scales cover you completely."},
{"Your digestive system is specialised to digest meat.","Your digestive system is highly specialised to digest meat.","You are carnivorous and can eat meat at any time."},
"green scales"},{ MUT_BLACK_SCALES, 1, 3, false, true,{"You are partially covered in thick black scales (AC + 3, Dex - 1).","You are mostly covered in thick black scales (AC + 6, Dex - 2).","You are completely covered in thick black scales (AC + 9, Dex - 3)."},
{"You digest meat inefficiently.", "You digest meat very inefficiently.","You are a herbivore."},
{"Thick black scales grow over part of your body.","Thick black scales spread over more of your body.","Thick black scales cover you completely."},
{"Your flesh is heat resistant.", "Your flesh is very heat resistant.","Your flesh is almost immune to the effects of heat."},
{"Your black scales disappear.","Your black scales recede somewhat.","Your black scales recede somewhat."},
{"Your flesh is cold resistant.", "Your flesh is very cold resistant.","Your flesh is almost immune to the effects of cold."},
"black scales"},{ MUT_GREY_SCALES, 2, 3, false, true,{"You are partially covered in supple grey scales (AC + 1).","You are mostly covered in supple grey scales (AC + 2).","You are completely covered in supple grey scales (AC + 3)."},
{"You heal slowly.", "You heal very slowly.", "You do not heal naturally."},
"grey scales"},{ MUT_BONEY_PLATES, 1, 3, false, true,{"You are protected by plates of bone (AC + 2, Dex -1).","You are protected by plates of bone (AC + 3, Dex -2).","You are protected by plates of bone (AC + 4, Dex -3)."},
{"You have a fast metabolism.", "You have a very fast metabolism.","Your metabolism is lightning-fast."},
{"You grow protective plates of bone.","You grow more protective plates of bone.","You grow more protective plates of bone."},
{"You are weak (Str -", "", ""},{"You are dopey (Int -", "", ""},
"boney plates"},{ MUT_REPULSION_FIELD, 1, 3, false, false,{"You are surrounded by a mild repulsion field (EV + 1).","You are surrounded by a moderate repulsion field (EV + 3).","You are surrounded by a strong repulsion field ""(EV + 5; repel missiles)."},
{"You are resistant to magic.", "You are highly resistant to magic.","You are extremely resistant to the effects of magic."},
{ MUT_POISON_RESISTANCE, 4, 1, false, false,{"Your system is immune to poisons.", "", ""},{"You feel healthy.", "", ""},{"You feel a little less healthy.", "", ""},
{"You cover ground quickly.", "You cover ground very quickly.","You cover ground extremely quickly."},
"poison resistance"},{ MUT_CARNIVOROUS, 5, 3, false, false,{"Your digestive system is specialised to digest meat.","Your digestive system is highly specialised to digest meat.","You are carnivorous and can eat meat at any time."},
{"Armour fits poorly on your deformed body.","Armour fits poorly on your badly deformed body.","Armour fits poorly on your hideously deformed body."},
{"You feel able to eat a more balanced diet.","You feel able to eat a more balanced diet.","You feel able to eat a more balanced diet."},
{"You can teleport at will.", "You are good at teleporting at will.","You can teleport instantly at will."},
"carnivorous"},{ MUT_HERBIVOROUS, 5, 3, true, false,{"You digest meat inefficiently.","You digest meat very inefficiently.","You are a herbivore."},
{"You can sense your immediate surroundings.","You can sense your surroundings.","You can sense a large area of your surroundings."},
{"You feel able to eat a more balanced diet.","You feel able to eat a more balanced diet.","You feel able to eat a more balanced diet."},
{"You can breathe flames.", "You can breathe fire.","You can breathe blasts of fire."},
"herbivorous"},{ MUT_HEAT_RESISTANCE, 4, 3, false, false,{"Your flesh is heat resistant.","Your flesh is very heat resistant.","Your flesh is almost immune to the effects of heat."},
{"You can translocate small distances instantaneously.","You can translocate small distances instantaneously.","You can translocate small distances instantaneously."},
{"You feel a sudden chill.","You feel a sudden chill.","You feel a sudden chill."},
{"Your muscles are strong (Str +1), but stiff (Dex -1).","Your muscles are very strong (Str +2), but stiff (Dex -2).","Your muscles are extremely strong (Str +3), but stiff (Dex -3)."},
{"You feel hot for a moment.","You feel hot for a moment.","You feel hot for a moment."},
{"Your muscles are flexible (Dex +1), but weak (Str -1).","Your muscles are very flexible (Dex +2), but weak (Str -2).","Your muscles are extremely flexible (Dex +3), but weak (Str -3)."},
{"You feel a sudden chill.","You feel a sudden chill.","You feel a sudden chill."},
{"You occasionally shout uncontrollably.","You sometimes yell uncontrollably.","You frequently scream uncontrollably."},
"cold resistance"},{ MUT_SHOCK_RESISTANCE, 2, 1, false, false,{"You are immune to electric shocks.", "", ""},{"You feel insulated.", "", ""},{"You feel conductive.", "", ""},
{"You possess an exceptional clarity of mind.","You possess an unnatural clarity of mind.","You possess a supernatural clarity of mind."},
"shock resistance"},{ MUT_REGENERATION, 3, 3, false, false,{"Your natural rate of healing is unusually fast.","You heal very quickly.","You regenerate."},
{"Your vision is a little blurry.", "Your vision is quite blurry.","Your vision is extremely blurry."},
"regeneration"},{ MUT_SLOW_HEALING, 0, 3, true, false,{"You heal slowly.","You heal very slowly.","You do not heal naturally."},
{"You are somewhat resistant to further mutation.","You are somewhat resistant to both further mutation and mutation removal.","Your current mutations are irrevocably fixed, and you can mutate no more."},
{"You begin to heal more slowly.","You begin to heal more slowly.","You stop healing."},
{"You are frail (-10 percent hp).","You are very frail (-20 percent hp).","You are extremely frail (-30 percent hp)."},
{"Your rate of healing increases.","Your rate of healing increases.","Your rate of healing increases."},
{"You are robust (+10 percent hp).","You are very robust (+20 percent hp).","You are extremely robust (+30 percent hp)."},
"slow healing"},{ MUT_FAST_METABOLISM, 10, 3, true, false,{"You have a fast metabolism.","You have a very fast metabolism.","Your metabolism is lightning-fast."},
// Use player_has_spell() to avoid duplication{"You can summon minor demons to your aid.", "", ""},{"You can summon demons to your aid.", "", ""},{"You can hurl blasts of hellfire.", "", ""},{"You can call on the torments of Hell.", "", ""},
"fast metabolism"},{ MUT_SLOW_METABOLISM, 7, 3, false, false,{"You have a slow metabolism.","You have a slow metabolism.","You need consume almost no food."},
// Not summoners/necromancers/worshippers of Yredelemnul{"You can raise the dead to walk for you.", "", ""},{"You can control demons.", "", ""},{"You can travel to (but not from) Pandemonium at will.", "", ""},{"You can draw strength from death and destruction.", "", ""},
{"Your metabolism slows.","Your metabolism slows.","Your metabolism slows."},
// Not worshippers of Vehumet{"You can channel magical energy from Hell.", "", ""},
{"You feel a little hungry.","You feel a little hungry.","You feel a little hungry."},
// Not conjurers/worshippers of Makhleb{"You can throw forth the flames of Gehenna.", "", ""},
{ MUT_WEAK, 10, 14, true, true,{"You are weak (Str -", "", ""},{"", "", ""},{"", "", ""},"weak"},{ MUT_DOPEY, 10, 14, true, true,{"You are dopey (Int -", "", ""},{"", "", ""},{"", "", ""},"dopey",},{ MUT_CLUMSY, 10, 14, true, true,{"You are clumsy (Dex -", "", ""},{"", "", ""},{"", "", ""},"clumsy"},{ MUT_TELEPORT_CONTROL, 2, 1, false, false,{"You can control translocations.", "", ""},{"You feel controlled.", "", ""},{"You feel random.", "", ""},
{"You can invoke the powers of Tartarus to smite your living foes.", "", ""},
{ MUT_TELEPORT, 3, 3, true, false,{"Space occasionally distorts in your vicinity.","Space sometimes distorts in your vicinity.","Space frequently distorts in your vicinity."},
{"You have sharp fingernails.", "You have very sharp fingernails.","You have claws for hands."},
{"You feel weirdly uncertain.","You feel even more weirdly uncertain.","You feel even more weirdly uncertain."},
// Leave some space for more demonic powers{"You have hooves in place of feet.", "", ""},
"teleport"},{ MUT_MAGIC_RESISTANCE, 5, 3, false, false,{"You are resistant to magic.","You are highly resistant to magic.","You are extremely resistant to the effects of magic."},
{"There is a blue sigil on each of your hands.","There are several blue sigils on your hands and arms.","Your hands, arms and shoulders are covered in intricate, arcane blue writing."},
{"You feel sluggish.","You feel sluggish.","You feel sluggish."},
{"There is a green sigil on your chest.","There are several green sigils on your chest and abdomen.","Your chest, abdomen and neck are covered in intricate, arcane green writing."},
"fast"},{ MUT_ACUTE_VISION, 2, 1, false, false,{"You have supernaturally acute eyesight.","You have supernaturally acute eyesight.","You have supernaturally acute eyesight."},
{"You are covered in fur (AC + 1).","You are covered in thick fur (AC + 2).","Your thick and shaggy fur keeps you warm (AC + 3, cold resistant)."},
"acute vision"},{ MUT_DEFORMED, 8, 3, true, true,{"Armour fits poorly on your deformed body.","Armour fits poorly on your badly deformed body.","Armour fits poorly on your hideously deformed body."},
{"You have an increased reservoir of magic (+10 percent mp).","You have a strongly increased reservoir of magic (+20 percent mp).","You have an extremely increased reservoir of magic (+30 percent mp)."},
{"Your body twists and deforms.","Your body twists and deforms.","Your body twists and deforms."},
{"Your magical capacity is low (-10 percent mp).","Your magical capacity is very low (-20 percent mp).","Your magical capacity is extremely low (-30 percent mp)."},
{"Your body's shape seems more normal.","Your body's shape seems slightly more normal.","Your body's shape seems slightly more normal."},
{"You are partially covered in red scales (AC + 1).","You are mostly covered in red scales (AC + 2).","You are covered in red scales (AC + 4)."},
{"You feel jumpy.","You feel more jumpy.","You feel even more jumpy."},
{"You are partially covered in smooth nacreous scales (AC + 1).","You are mostly covered in smooth nacreous scales (AC + 3).","You are completely covered in smooth nacreous scales (AC + 5)."},
{"You feel static.","You feel less jumpy.","You feel less jumpy."},
{"You are partially covered in ridged grey scales (AC + 2, Dex -1).","You are mostly covered in ridged grey scales (AC + 4, Dex -1).","You are completely covered in ridged grey scales (AC + 6, Dex -2)."},
"teleport at will"},{ MUT_SPIT_POISON, 8, 3, false, false,{"You can spit poison.","You can spit poison.","You can spit poison."},
{"You are partially covered in metallic scales (AC + 3, Dex -2).","You are mostly covered in metallic scales (AC + 7, Dex -3).","You are completely covered in metallic scales (AC + 10, Dex -4)."},
{"There is a nasty taste in your mouth for a moment.","There is a nasty taste in your mouth for a moment.","There is a nasty taste in your mouth for a moment."},
{"You are partially covered in black scales (AC + 1).","You are mostly covered in black scales (AC + 3).","You are completely covered in black scales (AC + 5)."},
{"You feel an ache in your throat.","You feel an ache in your throat.","You feel an ache in your throat."},
{"You are partially covered in white scales (AC + 1).","You are mostly covered in white scales (AC + 3).","You are completely covered in white scales (AC + 5)."},
"spit poison"},{ MUT_MAPPING, 3, 3, false, false,{"You can sense your immediate surroundings.","You can sense your surroundings.","You can sense a large area of your surroundings."},
{"You are partially covered in yellow scales (AC + 2).","You are mostly covered in yellow scales (AC + 4, Dex -1).","You are completely covered in yellow scales (AC + 6, Dex -2)."},
{"You feel aware of your surroundings.","You feel more aware of your surroundings.","You feel even more aware of your surroundings."},
{"You are partially covered in brown scales (AC + 2).","You are mostly covered in brown scales (AC + 4).","You are completely covered in brown scales (AC + 5)."},
{"You feel slightly disoriented.","You feel slightly disoriented.","You feel slightly disoriented."},
{"You are partially covered in blue scales (AC + 1).","You are mostly covered in blue scales (AC + 2).","You are completely covered in blue scales (AC + 3)."},
"mapping"},{ MUT_BREATHE_FLAMES, 4, 3, false, false,{"You can breathe flames.","You can breathe fire.","You can breathe blasts of fire."},
{"You are partially covered in purple scales (AC + 2).","You are mostly covered in purple scales (AC + 4).","You are completely covered in purple scales (AC + 6)."},
{"Your throat feels hot.","Your throat feels hot.","Your throat feels hot."},
{"You are partially covered in speckled scales (AC + 1).","You are mostly covered in speckled scales (AC + 2).","You are covered in speckled scales (AC + 3)."},
{"A chill runs up and down your throat.","A chill runs up and down your throat.","A chill runs up and down your throat."},
{"You are partially covered in orange scales (AC + 1).","You are mostly covered in orange scales (AC + 3).","You are completely covered in orange scales (AC + 4)."},
"breathe flames"},{ MUT_BLINK, 3, 3, false, false,{"You can translocate small distances instantaneously.","You can translocate small distances instantaneously.","You can translocate small distances instantaneously."},
{"You are partially covered in indigo scales (AC + 2).","You are mostly covered in indigo scales (AC + 3).","You are completely covered in indigo scales (AC + 5)."},
{"You feel a little jumpy.","You feel more jumpy.","You feel even more jumpy."},
{"You are partially covered in knobbly red scales (AC + 2).","You are mostly covered in knobbly red scales (AC + 5, Dex -1).","You are completely covered in knobbly red scales (AC + 7, Dex -2)."},
{"You feel a little less jumpy.","You feel less jumpy.","You feel less jumpy."},
{"You are partially covered in iridescent scales (AC + 1).","You are mostly covered in iridescent scales (AC + 2).","You are completely covered in iridescent scales (AC + 3)."},
"blink"},{ MUT_HORNS, 7, 3, false, true,{"You have a pair of small horns on your head.","You have a pair of horns on your head.","You have a pair of large horns on your head."},
{"You are partially covered in patterned scales (AC + 1).","You are mostly covered in patterned scales (AC + 2).","You are completely covered in patterned scales (AC + 3)."}};
{"A pair of horns grows on your head!","The horns on your head grow some more.","The horns on your head grow some more."},
const char *gain_mutation[NUM_MUTATIONS][3] = {{"Your skin toughens.", "Your skin toughens.", "Your skin toughens."},
"horns"},{ MUT_BEAK, 1, 1, false, true,{"You have a beak for a mouth.", "", ""},{"Your mouth lengthens and hardens into a beak!", "", ""},{"Your beak shortens and softens into a mouth.", "", ""},
{"", "", ""}, // replaced with player::modify_stat() handling {dlb}{"", "", ""}, // replaced with player::modify_stat() handling {dlb}{"", "", ""}, // replaced with player::modify_stat() handling {dlb}
"beak"},{ MUT_STRONG_STIFF, 10, 3, false, true,{"Your muscles are strong (Str +1), but stiff (Dex -1).","Your muscles are very strong (Str +2), but stiff (Dex -2).","Your muscles are extremely strong (Str +3), but stiff (Dex -3)."},
{"Supple grey scales grow over part of your body.","Supple grey scales spread over more of your body.","Supple grey scales cover you completely."},
"strong stiff"},{ MUT_FLEXIBLE_WEAK, 10, 3, false, true,{"Your muscles are flexible (Dex +1), but weak (Str -1).","Your muscles are very flexible (Dex +2), but weak (Str -2).","Your muscles are extremely flexible (Dex +3), but weak (Str -3)."},
// 10{"You hunger for flesh.", "You hunger for flesh.","You hunger for flesh."},
{"You feel the urge to shout.","You feel a strong urge to yell.","You feel a strong urge to scream."},
{"You feel a sudden chill.", "You feel a sudden chill.","You feel a sudden chill."},
"scream"},{ MUT_CLARITY, 6, 1, false, false,{"You possess an exceptional clarity of mind.","You possess an unnatural clarity of mind.","You possess a supernatural clarity of mind."},
{"You begin to heal more quickly.","You begin to heal more quickly.","You begin to regenerate."},
"clarity"},{ MUT_BERSERK, 7, 3, true, false,{"You tend to lose your temper in combat.","You often lose your temper in combat.","You have an uncontrollable temper."},
{"Your metabolism slows.", "Your metabolism slows.","Your metabolism slows."},
"berserk"},{ MUT_DETERIORATION, 10, 3, true, false,{"Your body is slowly deteriorating.","Your body is deteriorating.","Your body is rapidly deteriorating."},
// 20{"You feel clumsy.", "You feel clumsy.","You feel clumsy."},{"You feel controlled.", "You feel controlled.","You feel controlled."},
"deterioration"},{ MUT_BLURRY_VISION, 10, 3, true, false,{"Your vision is a little blurry.","Your vision is quite blurry.","Your vision is extremely blurry."},
{"You feel quick.", "You feel quick.", "You feel quick."},
"blurry vision"},{ MUT_MUTATION_RESISTANCE, 4, 3, false, false,{"You are somewhat resistant to further mutation.","You are somewhat resistant to both further mutation ""and mutation removal.","Your current mutations are irrevocably fixed, ""and you can mutate no more."},
// 30{"Your throat feels hot.", "Your throat feels hot.","Your throat feels hot."},
"frail"},{ MUT_ROBUST, 5, 3, false, true,{"You are robust (+10% HP).","You are very robust (+20% HP).","You are extremely robust (+30% HP)."},
{"Your muscles feel sore.", "Your muscles feel sore.","Your muscles feel sore."},
// Some demonic powers start here:{ MUT_TORMENT_RESISTANCE, 0, 1, false, false,{"You are immune to unholy pain and torment.", "", ""},{"You feel a strange anaesthesia.", "", ""},{"", "", ""},
{"Your muscles feel loose.", "Your muscles feel loose.","Your muscles feel loose."},
"torment resistance"},{ MUT_NEGATIVE_ENERGY_RESISTANCE, 0, 3, false, false,{"You resist negative energy.","You are quite resistant to negative energy.","You are immune to negative energy."},
{"You feel a little pissed off.", "You feel angry.","You feel extremely angry at everything!"},
"negative energy resistance"},{ MUT_SUMMON_MINOR_DEMONS, 0, 1, false, false,{"You can summon minor demons to your aid.", "", ""},{"A thousand chattering voices call out to you.", "", ""},{"", "", ""},
{"You feel yourself wasting away.", "You feel yourself wasting away.","You feel your body start to fall apart."},
"summon minor demons"},{ MUT_SUMMON_DEMONS, 0, 1, false, false,{"You can summon demons to your aid.", "", ""},{"Help is not far away!", "", ""},{"", "", ""},
// 40{"Your vision blurs.", "Your vision blurs.", "Your vision blurs."},
"summon demons"},{ MUT_HURL_HELLFIRE, 0, 1, false, false,{"You can hurl blasts of hellfire.", "", ""},{"You smell fire and brimstone.", "", ""},{"", "", ""},
{"You feel genetically stable.", "You feel genetically stable.","You feel genetically immutable."},
"hurl hellfire"},{ MUT_CALL_TORMENT, 0, 1, false, false,{"You can call on the torments of Hell.", "", ""},{"You feel a terrifying power at your call.", "", ""},{"", "", ""},
{"You feel robust.", "You feel robust.", "You feel robust."},
"raise dead"},{ MUT_CONTROL_DEMONS, 0, 1, false, false,{"You can control demons.", "", ""},{"You feel an affinity for all demonkind.", "", ""},{"", "", ""},
{"You feel a strange anaesthesia.", "", ""},{"You feel negative.", "You feel negative.", "You feel negative."},{"A thousand chattering voices call out to you.", "", ""},{"Help is not far away!", "", ""},{"You smell fire and brimstone.", "", ""},{"You feel a terrifying power at your call.", "", ""},// 50{"You feel an affinity for the dead.", "", ""},{"You feel an affinity for all demonkind.", "", ""},{"You feel something pulling you to a strange and terrible place.", "", ""},{"You feel hungry for death.", "", ""},{"You feel a flux of magical energy.", "", ""},{"Your skin tingles in a strangely unpleasant way.", "", ""},{"You smell the fires of Gehenna.", "", ""},{"You feel the icy cold of Cocytus chill your soul.", "", ""},{"A shadow passes over the world around you.", "", ""},
"control demons"},{ MUT_PANDEMONIUM, 0, 1, false, false,{"You can travel to (but not from) Pandemonium at will.", "", ""},{"You feel something pulling you to a strange and terrible place.","", ""},{"", "", ""},
{"Your fingernails lengthen.", "Your fingernails sharpen.","Your hands twist into claws."},
"pandemonium"},{ MUT_DEATH_STRENGTH, 0, 1, false, false,{"You can draw strength from death and destruction.", "", ""},{"You feel hungry for death.", "", ""},{"", "", ""},
// 60{"Your teeth lengthen and sharpen.","Your teeth lengthen and sharpen some more.","Your teeth are very long and razor-sharp."},
"death strength"},{ MUT_CHANNEL_HELL, 0, 1, false, false,{"You can channel magical energy from Hell.", "", ""},{"You feel a flux of magical energy.", "", ""},{"", "", ""},
{"Your feet shrivel into cloven hooves.", "", ""},{"Your feet stretch and sharpen into talons.", "", ""},
"channel hell"},{ MUT_DRAIN_LIFE, 0, 1, false, false,{"You can drain life in unarmed combat.", "", ""},{"Your skin tingles in a strangely unpleasant way.", "", ""},{"", "", ""},
{"You taste something nasty.", "You taste something very nasty.","You taste something extremely nasty."},
"drain life"},{ MUT_THROW_FLAMES, 0, 1, false, false,{"You can throw forth the flames of Gehenna.", "", ""},{"You smell the fires of Gehenna.", "", ""},{"", "", ""},
{"A poisonous barb forms on the end of your tail.","The barb on your tail looks sharper.","The barb on your tail looks very sharp."},
"throw flames"},{ MUT_THROW_FROST, 0, 1, false, false,{"You can throw forth the frost of Cocytus.", "", ""},{"You feel the icy cold of Cocytus chill your soul.", "", ""},{"", "", ""},
{"Your wings grow larger and stronger.", "", ""},
"throw frost"},{ MUT_SMITE, 0, 1, false, false,{"You can invoke the powers of Tartarus to smite your living foes.","", ""},{"A shadow passes over the world around you.", "", ""},{"", "", ""},
{"Your chest itches.", "Your chest and abdomen itch.","Your chest, abdomen and neck itch."},
{ MUT_CLAWS, 2, 3, false, true,{"You have sharp fingernails.","You have very sharp fingernails.","You have claws for hands."},
// saprovorous/gourmand: can never be gained or lost, only started with{"", "", ""},{"", "", ""},
{"Your fingernails lengthen.","Your fingernails sharpen.","Your hands twist into claws."},
// 70{"Fur sprouts all over your body.","Your fur grows into a thick mane.","Your thick fur grows shaggy and warm."},
{"Your fingernails shrink to normal size.","Your fingernails look duller.","Your hands feel fleshier."},
{"You feel more energetic.", "You feel more energetic.","You feel more energetic."},
"claws"},{ MUT_FANGS, 1, 3, false, true,{"You have very sharp teeth.","You have extremely sharp teeth.","You have razor-sharp teeth."},
// 75{"Red scales grow over part of your body.","Red scales spread over more of your body.","Red scales cover you completely."},{"Smooth nacreous scales grow over part of your body.","Smooth nacreous scales spread over more of your body.","Smooth nacreous scales cover you completely."},{"Ridged grey scales grow over part of your body.","Ridged grey scales spread over more of your body.","Ridged grey scales cover you completely."},{"Metallic scales grow over part of your body.","Metallic scales spread over more of your body.","Metallic scales cover you completely."},{"Black scales grow over part of your body.","Black scales spread over more of your body.","Black scales cover you completely."},{"White scales grow over part of your body.","White scales spread over more of your body.","White scales cover you completely."},{"Yellow scales grow over part of your body.","Yellow scales spread over more of your body.","Yellow scales cover you completely."},{"Brown scales grow over part of your body.","Brown scales spread over more of your body.","Brown scales cover you completely."},{"Blue scales grow over part of your body.","Blue scales spread over more of your body.","Blue scales cover you completely."},{"Purple scales grow over part of your body.","Purple scales spread over more of your body.","Purple scales cover you completely."},
"fangs"},{ MUT_HOOVES, 1, 1, false, true,{"You have hooves in place of feet.", "", ""},{"Your feet shrivel into cloven hooves.", "", ""},{"Your hooves expand and flesh out into feet!", "", ""},
// 85{"Speckled scales grow over part of your body.","Speckled scales spread over more of your body.","Speckled scales cover you completely."},{"Orange scales grow over part of your body.","Orange scales spread over more of your body.","Orange scales cover you completely."},{"Indigo scales grow over part of your body.","Indigo scales spread over more of your body.","Indigo scales cover you completely."},{"Knobbly red scales grow over part of your body.","Knobbly red scales spread over more of your body.","Knobbly red scales cover you completely."},{"Iridescent scales grow over part of your body.","Iridescent scales spread over more of your body.","Iridescent scales cover you completely."},{"Patterned scales grow over part of your body.","Patterned scales spread over more of your body.","Patterned scales cover you completely."}};
"hooves"},{ MUT_TALONS, 1, 1, false, true,{"You have talons in place of feet.", "", ""},{"Your feet stretch and sharpen into talons.", "", ""},{"Your talons dull and shrink into feet!", "", ""},
{"Your skin feels delicate.", "Your skin feels delicate.","Your skin feels delicate."},
// Naga only{ MUT_BREATHE_POISON, 0, 1, false, false,{"You can exhale a cloud of poison.", "", ""},{"You taste something nasty.", "", ""},{"Your breath is less nasty.", "", ""},
{"You feel weaker.", "You feel weaker.", "You feel weaker."},
"breathe poison"},// Naga and Draconian only -- FIXME: unused!{ MUT_STINGER, 0, 3, false, true,{"Your tail ends in a poisonous barb.","Your tail ends in a sharp poisonous barb.","Your tail ends in a wicked poisonous barb."},
{"Your black scales disappear.", "Your black scales recede somewhat.","Your black scales recede somewhat."},
// Draconian only{ MUT_BIG_WINGS, 0, 1, false, true,{"Your wings are large and strong.", "", ""},{"Your wings grow larger and stronger.", "", ""},{"Your wings shrivel and weaken.", "", ""},
{"Your grey scales disappear.", "Your grey scales recede somewhat.","Your grey scales recede somewhat."},
"big wings"},// used by evil gods to mark followers (currently UNUSED){ MUT_BLUE_MARKS, 0, 3, false, true,{"There is a blue sigil on each of your hands.","There are several blue sigils on your hands and arms.","Your hands, arms and shoulders are covered in intricate, ""arcane blue writing."},
{"You feel a little less healthy.", "", ""},
"blue marks"},{ MUT_GREEN_MARKS, 0, 3, false, true,{"There is a green sigil on your chest.","There are several green sigils on your chest and abdomen.","Your chest, abdomen and neck are covered in intricate, ""arcane green writing."},
// 10{"You feel able to eat a more balanced diet.","You feel able to eat a more balanced diet.","You feel able to eat a more balanced diet."},
{"Your chest itches.","Your chest and abdomen itch.","Your chest, abdomen and neck itch."},
{"You feel a sudden chill.", "You feel a sudden chill.","You feel a sudden chill."},
// species-dependent innate mutations{ MUT_SAPROVOROUS, 0, 3, false, false,{"You can tolerate rotten meat.","You can eat rotten meat.","You thrive on rotten meat."},{"", "", ""},{"", "", ""},
{"Your rate of healing increases.", "Your rate of healing increases.","Your rate of healing increases."},
{ MUT_SHAGGY_FUR, 2, 3, false, true,{"You are covered in fur (AC + 1).","You are covered in thick fur (AC + 2).","Your thick and shaggy fur keeps you warm (AC + 3, cold resistant)."},
{"", "", ""}, // replaced with player::modify_stat() handling {dlb}{"", "", ""}, // replaced with player::modify_stat() handling {dlb}// 20{"", "", ""}, // replaced with player::modify_stat() handling {dlb}
"shaggy fur"},{ MUT_HIGH_MAGIC, 1, 3, false, false,{"You have an increased reservoir of magic (+10% MP).","You have a considerably increased reservoir of magic (+20% MP).","You have an greatly increased reservoir of magic (+30% MP)."},
{"You feel sluggish.", "You feel sluggish.", "You feel sluggish."},
"high mp"},{ MUT_LOW_MAGIC, 9, 3, true, false,{"Your magical capacity is low (-10% MP).","Your magical capacity is very low (-20% MP).","Your magical capacity is extremely low (-30% MP)."},
// 30{"A chill runs up and down your throat.","A chill runs up and down your throat.","A chill runs up and down your throat."},
// Scales of various colours and effects{ MUT_RED_SCALES, 2, 3, false, true,{"You are partially covered in red scales (AC + 1).","You are mostly covered in red scales (AC + 2).","You are covered in red scales (AC + 4)."},
{"Your beak shortens and softens into a mouth.", "", ""},
"red scales"},{ MUT_NACREOUS_SCALES, 1, 3, false, true,{"You are partially covered in smooth nacreous scales (AC + 1).","You are mostly covered in smooth nacreous scales (AC + 3).","You are completely covered in smooth nacreous scales (AC + 5)."},
{"Your muscles feel loose.", "Your muscles feel loose.","Your muscles feel loose."},
{"Smooth nacreous scales grow over part of your body.","Smooth nacreous scales spread over more of your body.","Smooth nacreous scales cover you completely."},
{"Your urge to shout disappears.", "Your urge to yell lessens.","Your urge to scream lessens."},
"nacreous scales"},{ MUT_GREY2_SCALES, 2, 3, false, true,{"You are partially covered in ridged grey scales (AC + 2, Dex -1).","You are mostly covered in ridged grey scales (AC + 4, Dex -1).","You are completely covered in ridged grey scales (AC + 6, Dex -2)."},
{"Your thinking seems confused.", "Your thinking seems confused.","Your thinking seems confused."},
{"Ridged grey scales grow over part of your body.","Ridged grey scales spread over more of your body.","Ridged grey scales cover you completely."},
{"You feel healthier.", "You feel a little healthier.","You feel a little healthier."},
"grey2 scales"},{ MUT_METALLIC_SCALES, 1, 3, false, true,{"You are partially covered in metallic scales (AC + 3, Dex -2).","You are mostly covered in metallic scales (AC + 7, Dex -3).","You are completely covered in metallic scales (AC + 10, Dex -4)."},
// 40{"Your vision sharpens.", "Your vision sharpens a little.","Your vision sharpens a little."},
{"Metallic scales grow over part of your body.","Metallic scales spread over more of your body.","Metallic scales cover you completely."},
{"You feel genetically unstable.", "You feel genetically unstable.","You feel genetically unstable."},
{"Your metallic scales disappear.","Your metallic scales recede somewhat.","Your metallic scales recede somewhat."},
{"You feel robust.", "You feel robust.", "You feel robust."},{"You feel frail.", "You feel frail.", "You feel frail."},
"metallic scales"},{ MUT_BLACK2_SCALES, 2, 3, false, true,{"You are partially covered in black scales (AC + 1).","You are mostly covered in black scales (AC + 3).","You are completely covered in black scales (AC + 5)."},
// Some demonic powers (which can't be lost) start here...{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},// 50{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},
{"Black scales grow over part of your body.","Black scales spread over more of your body.","Black scales cover you completely."},
// 60{"Your teeth shrink to normal size.","Your teeth shrink and become duller.","Your teeth shrink and become duller."},
"black2 scales"},{ MUT_WHITE_SCALES, 2, 3, false, true,{"You are partially covered in white scales (AC + 1).","You are mostly covered in white scales (AC + 3).","You are completely covered in white scales (AC + 5)."},
{"Your hooves expand and flesh out into feet!", "", ""},{"Your talons dull and shrink into feet!", "", ""},
{"White scales grow over part of your body.","White scales spread over more of your body.","White scales cover you completely."},
{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},{"", "", ""},
{"Your white scales disappear.","Your white scales recede somewhat.","Your white scales recede somewhat."},
// saprovorous/gourmand: can never be gained or lost, only started with{"", "", ""},{"", "", ""},
"white scales"},{ MUT_YELLOW_SCALES, 2, 3, false, true,{"You are partially covered in yellow scales (AC + 2).","You are mostly covered in yellow scales (AC + 4, Dex -1).","You are completely covered in yellow scales (AC + 6, Dex -2)."},
// 70{"You shed all your fur.","Your thick fur recedes somewhat.","Your shaggy fur recedes somewhat."},
{"Yellow scales grow over part of your body.","Yellow scales spread over more of your body.","Yellow scales cover you completely."},
{"You feel less energetic.", "You feel less energetic.","You feel less energetic."},
{"Your yellow scales disappear.","Your yellow scales recede somewhat.","Your yellow scales recede somewhat."},
{"You feel more energetic.", "You feel more energetic.","You feel more energetic."},
"yellow scales"},{ MUT_BROWN_SCALES, 2, 3, false, true,{"You are partially covered in brown scales (AC + 2).","You are mostly covered in brown scales (AC + 4).","You are completely covered in brown scales (AC + 5)."},
// 75{"Your red scales disappear.", "Your red scales recede somewhat.","Your red scales recede somewhat."},
{"Your brown scales disappear.","Your brown scales recede somewhat.","Your brown scales recede somewhat."},
{"Your smooth nacreous scales disappear.","Your smooth nacreous scales recede somewhat.","Your smooth nacreous scales recede somewhat."},
"brown scales"},{ MUT_BLUE_SCALES, 2, 3, false, true,{"You are partially covered in blue scales (AC + 1).","You are mostly covered in blue scales (AC + 2).","You are completely covered in blue scales (AC + 3)."},
{"Your ridged grey scales disappear.","Your ridged grey scales recede somewhat.","Your ridged grey scales recede somewhat."},
{"Blue scales grow over part of your body.","Blue scales spread over more of your body.","Blue scales cover you completely."},
{"Your black scales disappear.", "Your black scales recede somewhat.","Your black scales recede somewhat."},
"blue scales"},{ MUT_PURPLE_SCALES, 2, 3, false, true,{"You are partially covered in purple scales (AC + 2).","You are mostly covered in purple scales (AC + 4).","You are completely covered in purple scales (AC + 6)."},
{"Your white scales disappear.", "Your white scales recede somewhat.","Your white scales recede somewhat."},
{"Purple scales grow over part of your body.","Purple scales spread over more of your body.","Purple scales cover you completely."},
{"Your brown scales disappear.", "Your brown scales recede somewhat.","Your brown scales recede somewhat."},
"purple scales"},{ MUT_SPECKLED_SCALES, 2, 3, false, true,{"You are partially covered in speckled scales (AC + 1).","You are mostly covered in speckled scales (AC + 2).","You are covered in speckled scales (AC + 3)."},
{"Your blue scales disappear.", "Your blue scales recede somewhat.","Your blue scales recede somewhat."},
{"Speckled scales grow over part of your body.","Speckled scales spread over more of your body.","Speckled scales cover you completely."},
// 85{"Your speckled scales disappear.","Your speckled scales recede somewhat.","Your speckled scales recede somewhat."},
"speckled scales"},{ MUT_ORANGE_SCALES, 2, 3, false, true,{"You are partially covered in orange scales (AC + 1).","You are mostly covered in orange scales (AC + 3).","You are completely covered in orange scales (AC + 4)."},
{"Your orange scales disappear.", "Your orange scales recede somewhat.","Your orange scales recede somewhat."},
{"Orange scales grow over part of your body.","Orange scales spread over more of your body.","Orange scales cover you completely."},
{"Your knobbly red scales disappear.","Your knobbly red scales recede somewhat.","Your knobbly red scales recede somewhat."},
"orange scales"},{ MUT_INDIGO_SCALES, 2, 3, false, true,{"You are partially covered in indigo scales (AC + 2).","You are mostly covered in indigo scales (AC + 3).","You are completely covered in indigo scales (AC + 5)."},
{"Your iridescent scales disappear.","Your iridescent scales recede somewhat.","Your iridescent scales recede somewhat."},
{"Indigo scales grow over part of your body.","Indigo scales spread over more of your body.","Indigo scales cover you completely."},
{"Your patterned scales disappear.","Your patterned scales recede somewhat.","Your patterned scales recede somewhat."}};
{"Your indigo scales disappear.","Your indigo scales recede somewhat.","Your indigo scales recede somewhat."},
// mutation definitions:// first number = probability (0 means it doesn't appear naturally?)// second number = maximum levels// first boolean = is mutation mostly bad?// second boolean = is mutation physical, i.e. external only?
"indigo scales"},{ MUT_RED2_SCALES, 1, 3, false, true,{"You are partially covered in knobbly red scales (AC + 2).","You are mostly covered in knobbly red scales (AC + 5, Dex -1).","You are completely covered in knobbly red scales (AC + 7, Dex -2)."},
static mutation_def mutation_defs[] = {{ MUT_TOUGH_SKIN, 10, 3, false, true },{ MUT_STRONG, 8, 14, false, true },{ MUT_CLEVER, 8, 14, false, true },{ MUT_AGILE, 8, 14, false, true },{ MUT_GREEN_SCALES, 2, 3, false, true },{ MUT_BLACK_SCALES, 1, 3, false, true },{ MUT_GREY_SCALES, 2, 3, false, true },{ MUT_BONEY_PLATES, 1, 3, false, true },{ MUT_REPULSION_FIELD, 1, 3, false, false },{ MUT_POISON_RESISTANCE, 4, 1, false, false },{ MUT_CARNIVOROUS, 5, 3, false, false },{ MUT_HERBIVOROUS, 5, 3, true, false },{ MUT_HEAT_RESISTANCE, 4, 3, false, false },{ MUT_COLD_RESISTANCE, 4, 3, false, false },{ MUT_SHOCK_RESISTANCE, 2, 1, false, false },{ MUT_REGENERATION, 3, 3, false, false },{ MUT_SLOW_HEALING, 0, 3, true, false },{ MUT_FAST_METABOLISM, 10, 3, true, false },{ MUT_SLOW_METABOLISM, 7, 3, false, false },{ MUT_WEAK, 10, 14, true, true },{ MUT_DOPEY, 10, 14, true, true },{ MUT_CLUMSY, 10, 14, true, true },{ MUT_TELEPORT_CONTROL, 2, 1, false, false },{ MUT_TELEPORT, 3, 3, true, false },{ MUT_MAGIC_RESISTANCE, 5, 3, false, false },{ MUT_FAST, 1, 3, false, false },{ MUT_ACUTE_VISION, 2, 1, false, false },{ MUT_DEFORMED, 8, 3, true, true },{ MUT_TELEPORT_AT_WILL, 2, 3, false, false },{ MUT_SPIT_POISON, 8, 3, false, false },{ MUT_MAPPING, 3, 3, false, false },{ MUT_BREATHE_FLAMES, 4, 3, false, false },{ MUT_BLINK, 3, 3, false, false },{ MUT_HORNS, 7, 3, false, true },{ MUT_BEAK, 1, 1, false, true },{ MUT_STRONG_STIFF, 10, 3, false, true },{ MUT_FLEXIBLE_WEAK, 10, 3, false, true },{ MUT_SCREAM, 6, 3, true, false },{ MUT_CLARITY, 6, 1, false, false },{ MUT_BERSERK, 7, 3, true, false },{ MUT_DETERIORATION, 10, 3, true, false },{ MUT_BLURRY_VISION, 10, 3, true, false },{ MUT_MUTATION_RESISTANCE, 4, 3, false, false },{ MUT_FRAIL, 10, 3, true, true },{ MUT_ROBUST, 5, 3, false, true },
{"Knobbly red scales grow over part of your body.","Knobbly red scales spread over more of your body.","Knobbly red scales cover you completely."},
// Some demonic powers start here:{ MUT_TORMENT_RESISTANCE, 0, 1, false, false },{ MUT_NEGATIVE_ENERGY_RESISTANCE, 0, 3, false, false },{ MUT_SUMMON_MINOR_DEMONS, 0, 1, false, false },{ MUT_SUMMON_DEMONS, 0, 1, false, false },{ MUT_HURL_HELLFIRE, 0, 1, false, false },{ MUT_CALL_TORMENT, 0, 1, false, false },{ MUT_RAISE_DEAD, 0, 1, false, false },{ MUT_CONTROL_DEMONS, 0, 1, false, false },{ MUT_PANDEMONIUM, 0, 1, false, false },{ MUT_DEATH_STRENGTH, 0, 1, false, false },{ MUT_CHANNEL_HELL, 0, 1, false, false },{ MUT_DRAIN_LIFE, 0, 1, false, false },{ MUT_THROW_FLAMES, 0, 1, false, false },{ MUT_THROW_FROST, 0, 1, false, false },{ MUT_SMITE, 0, 1, false, false },// end of demonic powers
{"Your knobbly red scales disappear.","Your knobbly red scales recede somewhat.","Your knobbly red scales recede somewhat."},
{ MUT_CLAWS, 2, 3, false, true },{ MUT_FANGS, 1, 3, false, true },{ MUT_HOOVES, 1, 1, false, true },{ MUT_TALONS, 1, 1, false, true },
"red2 scales"},{ MUT_IRIDESCENT_SCALES, 1, 3, false, true,{"You are partially covered in iridescent scales (AC + 1).","You are mostly covered in iridescent scales (AC + 2).","You are completely covered in iridescent scales (AC + 3)."},
// Naga only{ MUT_BREATHE_POISON, 0, 1, false, false },// Naga and Draconian only{ MUT_STINGER, 0, 3, false, true },
{"Iridescent scales grow over part of your body.","Iridescent scales spread over more of your body.","Iridescent scales cover you completely."},
// Draconian only{ MUT_BIG_WINGS, 0, 1, false, true },// used by evil gods to mark followers (currently UNUSED){ MUT_BLUE_MARKS, 0, 3, false, true },{ MUT_GREEN_MARKS, 0, 3, false, true },
{"Your iridescent scales disappear.","Your iridescent scales recede somewhat.","Your iridescent scales recede somewhat."},
// species-dependent innate mutations{ MUT_SAPROVOROUS, 0, 3, false, false },{ MUT_GOURMAND, 0, 1, false, false },
"iridescent scales"},{ MUT_PATTERNED_SCALES, 1, 3, false, true,{"You are partially covered in patterned scales (AC + 1).","You are mostly covered in patterned scales (AC + 2).","You are completely covered in patterned scales (AC + 3)."},
{ MUT_SHAGGY_FUR, 2, 3, false, true },{ MUT_HIGH_MAGIC, 1, 3, false, false },{ MUT_LOW_MAGIC, 9, 3, true, false },
{"Patterned scales grow over part of your body.","Patterned scales spread over more of your body.","Patterned scales cover you completely."},
// Scales of various colours and effects{ MUT_RED_SCALES, 2, 3, false, true },{ MUT_NACREOUS_SCALES, 1, 3, false, true },{ MUT_GREY2_SCALES, 2, 3, false, true },{ MUT_METALLIC_SCALES, 1, 3, false, true },{ MUT_BLACK2_SCALES, 2, 3, false, true },{ MUT_WHITE_SCALES, 2, 3, false, true },{ MUT_YELLOW_SCALES, 2, 3, false, true },{ MUT_BROWN_SCALES, 2, 3, false, true },{ MUT_BLUE_SCALES, 2, 3, false, true },{ MUT_PURPLE_SCALES, 2, 3, false, true },{ MUT_SPECKLED_SCALES, 2, 3, false, true },{ MUT_ORANGE_SCALES, 2, 3, false, true },{ MUT_INDIGO_SCALES, 2, 3, false, true },{ MUT_RED2_SCALES, 1, 3, false, true },{ MUT_IRIDESCENT_SCALES, 1, 3, false, true },{ MUT_PATTERNED_SCALES, 1, 3, false, true }
"patterned scales"}
{const mutation_def &mdef(mutation_defs[i]);ASSERT(mdef.mutation == static_cast<mutation_type>(i)|| mdef.mutation == RANDOM_MUTATION);}
if (mut == mutation_defs[i].mutation)return mutation_defs[i];ASSERT(0);return mutation_defs[0];
mutation_defs[MUT_BIG_WINGS].rarity = 1;
for (unsigned i = 0; i < ARRAYSZ(mutation_defs); ++i)if (mutation_defs[i].mutation == MUT_BIG_WINGS)mutation_defs[i].rarity = 1;if (you.species == SP_TROLL){for (unsigned i = 0; i < ARRAYSZ(mutation_defs); ++i){if (mutation_defs[i].mutation == MUT_CLAWS){for (int j = 0; j < 3; ++j){mutation_defs[i].gain[j] = troll_claw_gain[j];mutation_defs[i].lose[j] = troll_claw_lose[j];}}}}if (you.species == SP_NAGA)for (unsigned i = 0; i < ARRAYSZ(mutation_defs); ++i)if (mutation_defs[i].mutation == MUT_DEFORMED)for (int j = 0; j < 3; ++j)mutation_defs[i].have[j] = naga_deformed_descrip[j];if (you.species == SP_CENTAUR)for (unsigned i = 0; i < ARRAYSZ(mutation_defs); ++i)if (mutation_defs[i].mutation == MUT_DEFORMED)for (int j = 0; j < 3; ++j)mutation_defs[i].have[j] = centaur_deformed_descrip[j];
result += "<lightblue>"; // inborn abilities and weirdnessswitch (you.species) //mv: following code shows innate abilities - if any
// Innate abilities which don't fit as mutations.result += "<lightblue>";switch (you.species)
if (you.mutation[MUT_DEFORMED] > 1)result += "</lightblue><cyan>";result += naga_deformed_descrip[you.mutation[MUT_DEFORMED] - 1];if (you.mutation[MUT_DEFORMED] > 1)result += "</cyan><lightblue>";result += EOL;
else{result += "</lightblue><cyan>You can exhale a cloud of poison.""</cyan><lightblue>" EOL ;}// Slowness can be overridden.if (you.mutation[MUT_FAST])result += "</lightblue><cyan>";result += naga_speed_descrip[you.mutation[MUT_FAST]];if (you.mutation[MUT_FAST])result += "</cyan>";result += EOL;
case SP_TROLL:if (you.mutation[MUT_CLAWS])result += "</lightblue><cyan>";result += troll_claw_descrip[you.mutation[MUT_CLAWS]];if ( you.mutation[MUT_CLAWS] )result += "</cyan><lightblue>";result += EOL;
case SP_GHOUL:result += "Your body is rotting away." EOL;
case SP_CENTAUR:if (you.mutation[MUT_DEFORMED] > 1)result += "</lightblue><cyan>";result += centaur_deformed_descrip[you.mutation[MUT_DEFORMED] - 1];if (you.mutation[MUT_DEFORMED] > 1)result += "</cyan><lightblue>";result += EOL;
case SP_TROLL:if (!you.mutation[MUT_CLAWS]){result += mutation_name(MUT_CLAWS, -1, true);result += EOL;}
case SP_GHOUL:result += "Your body is rotting away." EOL;result += troll_claw_descrip[you.mutation[MUT_CLAWS]];result += EOL;have_any = true;break;
// These are already handled above:if (you.species == SP_NAGA&& (i == MUT_BREATHE_POISON || i == MUT_FAST|| i == MUT_DEFORMED)){continue;}if (you.species == SP_TROLL && i == MUT_CLAWS)continue;if (you.species == SP_CENTAUR && i == MUT_DEFORMED)continue;const bool fully_active= mutation_is_fully_active(mut_type);bool fully_inactive = false;if (!fully_active)fully_inactive = _mutation_is_fully_inactive(mut_type);const char* colourname = "";if (you.species == SP_DEMONSPAWN){if (fully_inactive)colourname = "darkgrey";else if (!fully_active)colourname = "yellow";else if (you.demon_pow[i] < you.mutation[i])colourname = "lightred";elsecolourname = "red";}else // innate ability{if (fully_inactive)colourname = "darkgrey";else if (!fully_active)colourname = "blue";else if (you.demon_pow[i] < you.mutation[i])colourname = "cyan";elsecolourname = "lightblue";}result += "<";result += colourname;result += ">";if (fully_inactive)result += "(";std::string name = mutation_name(mut_type);if (name.empty()){int level;if (!fully_active)level = player_mutation_level(mut_type);else // give description of fully active mutationlevel = you.mutation[mut_type];char buf[80];sprintf(buf, "ERROR: no name for mutation #%d, level %d", i,level);name = buf;}result += name;if (fully_inactive)result += ")";result += "</";result += colourname;result += ">";result += EOL;
// this is already handled above:if (you.species == SP_NAGA&& (i == MUT_BREATHE_POISON || i == MUT_FAST)){continue;}if (you.species == SP_TROLL && i == MUT_CLAWS)continue;have_any = true;// not currently active?const bool need_grey = !mutation_is_fully_active(mut_type);bool inactive = false;if (need_grey){result += "<darkgrey>";if (_mutation_is_fully_inactive(mut_type)){inactive = true;result += "(";}}std::string name = mutation_name(mut_type);if (name.empty()){int level;if (!mutation_is_fully_active(mut_type))level = player_mutation_level(mut_type);else // give description of fully active mutationlevel = you.mutation[mut_type];char buf[80];sprintf(buf, "ERROR: no name for mutation #%d, level %d", i,level);name = buf;}result += name;if (need_grey){if (inactive)result += ")";result += "</darkgrey>";}
result += mutation_name(mut_type, -1, true);
case HS_SATIATED:rotting = !one_chance_in(3);break;case HS_FULL:rotting = coinflip();break;case HS_VERY_FULL:rotting = one_chance_in(3);break;case HS_ENGORGED:rotting = false;break;
case HS_SATIATED: rotting = !one_chance_in(3); break;case HS_FULL: rotting = coinflip(); break;case HS_VERY_FULL: rotting = one_chance_in(3); break;case HS_ENGORGED: rotting = false; break;
modify_stat(STAT_DEXTERITY, -1, true, "gaining a mutation");you.redraw_evasion = true;mpr(gain_mutation[mutat][0], MSGCH_MUTATION);
change_stat = STAT_DEXTERITY;change_amount = -1;
mpr((you.species == SP_TROLL ? troll_claw_gain: gain_mutation[mutat])[you.mutation[mutat]],MSGCH_MUTATION);
mpr(mdef.gain[you.mutation[mutat]], MSGCH_MUTATION);need_msg = false;
// For all those scale mutations.you.redraw_armour_class = true;if (change_stat != STAT_RANDOM && change_amount != 0)modify_stat(change_stat, change_amount, false, "losing a mutation");else if (need_msg)mpr(mdef.gain[you.mutation[mutat]], MSGCH_MUTATION);// Note the difference from losing a mutation, where the// post-increment index is used.
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;
while ((you.mutation[mutat] == 0&& (mutat != MUT_STRONG && mutat != MUT_CLEVER&& mutat != MUT_AGILE)&& (mutat != MUT_WEAK && mutat != MUT_DOPEY&& mutat != MUT_CLUMSY))|| !accept_mutation(mutat, true, non_fatal, true)|| random2(10) >= mutation_defs[mutat].rarity|| you.demon_pow[mutat] >= you.mutation[mutat]|| (which_mutation == RANDOM_GOOD_MUTATION&& (mutation_defs[mutat].bad || one_chance_in(10)))|| (which_mutation == RANDOM_BAD_MUTATION&& (!mutation_defs[mutat].bad || one_chance_in(10))));
modify_stat(STAT_DEXTERITY, -1, true, "losing a mutation");mpr(lose_mutation[mutat][0], MSGCH_MUTATION);you.redraw_evasion = true;
change_stat = STAT_DEXTERITY;change_amount = -1;
modify_stat(STAT_STRENGTH, -1, true, "losing a mutation");modify_stat(STAT_DEXTERITY, 1, true, "losing a mutation");mpr(lose_mutation[mutat][0], MSGCH_MUTATION);you.redraw_evasion = true;
modify_stat(STAT_STRENGTH, -1, true, "losing a mutation");modify_stat(STAT_DEXTERITY, 1, true, "losing a mutation");
if (which_mutat == MUT_STRONG || which_mutat == MUT_CLEVER|| which_mutat == MUT_AGILE || which_mutat == MUT_WEAK|| which_mutat == MUT_DOPEY || which_mutat == MUT_CLUMSY)
std::string result;bool innate = false;if (mut == MUT_CLAWS &&(you.species == SP_TROLL || you.species == SP_GHOUL))
if (which_mutat == MUT_FAST && you.species == SP_NAGA)return (naga_speed_descrip[level]);
if (mut == MUT_STRONG || mut == MUT_CLEVER|| mut == MUT_AGILE || mut == MUT_WEAK|| mut == MUT_DOPEY || mut == MUT_CLUMSY){std::ostringstream ostr;ostr << mdef.have[0] << level << ").";result = ostr.str();}elseresult = mdef.have[level - 1];
return (mutation_descrip[which_mutat][level - 1]);
if (colour){const char* colourname = "lightgrey"; // the defaultconst bool permanent = (you.demon_pow[mut] > 0);if (innate)colourname = (level > 0 ? "cyan" : "lightblue");else if (permanent){const bool demonspawn = (you.species == SP_DEMONSPAWN);const bool extra = (you.mutation[mut] > you.demon_pow[mut]);if (fully_inactive)colourname = "darkgrey";else if (!fully_active)colourname = demonspawn ? "yellow" : "blue";else if (extra)colourname = demonspawn ? "lightred" : "cyan";elsecolourname = demonspawn ? "red" : "lightblue";}// Build the resultstd::ostringstream ostr;ostr << '<' << colourname << '>' << result<< "</" << colourname << ">";result = ostr.str();}return (result);
"tough skin","strong","clever","agile","green scales","black scales","grey scales","boney plates","repulsion field","poison resistance","carnivorous","herbivorous","heat resistance","cold resistance","shock resistance","regeneration","slow healing","fast metabolism","slow metabolism","weak","dopey","clumsy","teleport control","teleport","magic resistance","fast","acute vision","deformed","teleport at will","spit poison","mapping","breathe flames","blink","horns","beak","strong stiff","flexible weak","scream","clarity","berserk","deterioration","blurry vision","mutation resistance","frail","robust","torment resistance","negative energy resistance","summon minor demons","summon demons","hurl hellfire","call torment","raise dead","control demons","pandemonium","death strength","channel hell","drain life","throw flames","throw frost","smite","claws","fangs","hooves","talons","breathe poison","stinger","big wings","blue marks","green marks","saprovorous","gourmand","shaggy fur","high mp","low mp","",// from here on scales"red scales","nacreous scales","grey2 scales","metallic scales","black2 scales","white scales","yellow scales","brown scales","blue scales","purple scales","speckled scales","orange scales","indigo scales","red2 scales","iridescent scales","patterned scales"};bool wizard_add_mutation(void){
if ((sizeof(mutation_type_names) / sizeof(char*)) != NUM_MUTATIONS){mprf("Mutation name list has %d entries, but there are %d ""mutations total; update mutation_type_names in debug.cc ""to reflect current list.",(sizeof(mutation_type_names) / sizeof(char*)),(int) NUM_MUTATIONS);crawl_state.cancel_cmd_repeat();return (false);}
if (strstr(mutation_type_names[i], strlwr(specs)))partial_matches.push_back(i);
if (strstr(mutation_defs[i].wizname, specs))partial_matches.push_back(mutation_defs[i].mutation);// FIXME: hack, but I don't want to export the size// of the array...this is even worse.if (mutation_defs[i].mutation + 1 == NUM_MUTATIONS)break;
if (mutat == NUM_MUTATIONS){if (partial_matches.size() == 1)mutat = (mutation_type) partial_matches[0];}
if (mutat == NUM_MUTATIONS && partial_matches.size() == 1)mutat = partial_matches[0];
for (unsigned int i = 0, size = partial_matches.size();i < size; i++){matches.push_back(mutation_type_names[partial_matches[i]]);}
for (unsigned int i = 0; i < partial_matches.size(); ++i)matches.push_back(get_mutation_def(partial_matches[i]).wizname);