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 level
const 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 mutation
mutation_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 weirdness
switch (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";
else
colourname = "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";
else
colourname = "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 mutation
level = 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 mutation
level = 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();
}
else
result = mdef.have[level - 1];
return (mutation_descrip[which_mutat][level - 1]);
if (colour)
{
const char* colourname = "lightgrey"; // the default
const 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";
else
colourname = demonspawn ? "red" : "lightblue";
}
// Build the result
std::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);