Also:
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3460 c06c8d41-db1a-0410-9941-cceddc491573
EJKHYV2Z6UPRVYUAL4WRW33GBNHYBFPMPA57HMBX2LQKXHIUO5VQC
5DI5IBEYOMNFQOLSI4ZNFJCGG4CFYYEEMIGZNCA42ESVEIBTJLSAC
LCTK2YWQDCLWI53GMNGWYP6W3GD22DKFNZFA2763KKPLC3A7FCVAC
6BCD3B7SZ4T2VPOGO562767LMFCVMKBAUMF4PQ7T5XNKSXVY7F6QC
3ZE757JEFAUED26M4MVEA7XXEHFNKLKAAHMVYOZSHKKBZ563AHMQC
3ZNI2YMHYXRVEONY5CGWXSRMFSLOATZMKU7H6HRY3CC2W6OZAM7QC
XCEZ7OA2INNPSYNAB5U6JB7XNDAD5BKU26YLFPPZ3SEESFZKADQAC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
NVD2HSEW2ONWNYDDCTOMZZOUP6NG4DCXI4LNYYIY4BQEBDMJQK5AC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
HQYQ6ZCUZBFKNPREFNSWSMRA4UD7VJXW6XK2GQONE5F3OX5NOMUQC
VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
X7TRUBJTRDVUI53BROBYHF4UDC4I5SUYWBUOGQMZNN2WEZAFVGVQC
IMWUGMMOAL72JLH5LLDD3BXXPZ7ZSTXQUJEXW5WMI6JKXHXD2N2AC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
SL4H3NXHK4VIROWPSQDGO7YIYDKDWZWMUDGH5U7Y6NG63MUQXRPAC
IXLNOTBJGHKESBCTME6QAR6XVWFNCHYGMS62V62ZJEA7VLQHXO2QC
H7BW6SEIQ57X6V4BM2RX54W42W6BH5XJBAS6FYCYKLQQG43ZMU4QC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
QVVC7AYGVA6U64PTNA7L27422NLMO327P22BQKXEVIMPZHIHO7MQC
45CWQUPQHKUFUJ4MVL5K3KCVCCKLY2Z7RZWZ53UT723RV5STPSRAC
TXVVUZNKI2O5YJXC2N4GPG3RJFNC6LSC5IJZKD5XLS4LGJHD2H7AC
KAL42YT6OQXFPMKKKHE2NQM47W5KMLSRI6KWFRTJFAO4WKP4MMLAC
MNYDF64QY6NHYKOAFOGBQJFYU7TZDILXRV23EXJPN4IZOCLSJ2AQC
2KTJHQUX2LTU2BCLS5YXVRRKMOYKKIZAPF2LBKORFGSHEN5IO3IAC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC
BWAQ3FHBBM6G3K3KYP75CRTR343RDQZJRYX5ZGYUEXYBAC3APDLAC
BW3XFNOS6LDAQLHOZ6RXARCMKCY5JVLVDSXDSSAX4DSYM3FANQBAC
5HBRQ2QZTFBQE2Z2CFADUI2D52LO5Z5CNHXHA7BJP3LGO7FJPUCQC
IHIJSWVOONSTA2WCHKW3YKBLETUQECFVBVLMET5SGQZ4C6U3GCUQC
CHUJFZ7HBTS6IC46OJQEMWSQV5QLF7LCPBYW5NPSEM4L6OT3PJVQC
5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC
Y56C5OMUQ5XF2G6DKDV4R5MED44UOIUPTBBQVWQBUHYIXYA5MOZAC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
KR655YT3I3U5DMN5NS3FPUGMDNT4BI56K3SFF2FNJ77C45NFKL5AC
QHUJATUWL3I7TJOLOY55LPZSAU3EB5X2AKRKTBVN7VSZD527VAXQC
I7QLYOTE6DLQZM7YWUWYLKHRJRB2A3STQ42ALSRGQICEWKD2QTEQC
BMHUBADDGIOZRVN4P3O5QKIDUYD4RFWBS7MP5X6LZWAYHUBRVD2QC
AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC
3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC
KKROXTUPBNEXXEUUDJNADATK3BCQPSQWFZ6L4VTKBPTYXJLYUHDQC
TFZ4TER7O2Z4FOGF2RCPEPYIHBTUA4LG3ECXLR7XGLCC6GO6OOTAC
6HG6JFO47Y3BZLU7Y6G3R2CX6JFGN4X5PKK6S5IGUXUYQ5GVZYFQC
(you.piety > 145) ? "A favourite toy of Xom." :
(you.piety > 130) ? "A very special toy of Xom." :
(you.piety > 115) ? "A special toy of Xom." :
(you.piety > 100) ? "A toy of Xom." :
(you.piety > 85) ? "A plaything of Xom." :
(you.piety > 70) ? "A special plaything of Xom." :
(you.piety > 55) ? "A very special plaything of Xom." :
(you.piety > 40) ? "A favourite plaything of Xom." :
"A beloved plaything of Xom.";
(you.piety > 145) ? "A favourite toy of Xom." :
(you.piety > 130) ? "A very special toy of Xom." :
(you.piety > 115) ? "A special toy of Xom." :
(you.piety > 100) ? "A toy of Xom." :
(you.piety > 85) ? "A plaything of Xom." :
(you.piety > 70) ? "A special plaything of Xom." :
(you.piety > 55) ? "A very special plaything of Xom." :
(you.piety > 40) ? "A favourite plaything of Xom." :
"A beloved plaything of Xom.";
/* ***********************************************************************
* called from: itemname
* *********************************************************************** */
std::string randart_armour_name( const item_def &item );
* called from: itemname
* *********************************************************************** */
std::string randart_jewellery_name( const item_def &item );
/* ***********************************************************************
static const char *rand_wpn_names[] = {
" of Blood",
" of Death",
" of Bloody Death",
" of Pain",
" of Painful Death",
" of Pain & Death",
" of Infinite Pain",
" of Eternal Torment",
" of Power",
" of Wrath",
/* 10: */
" of Doom",
" of Tender Mercy",
" of the Apocalypse",
" of the Jester",
" of the Ring",
" of the Fool",
" of the Gods",
" of the Imperium",
" of Destruction",
" of Armageddon",
/* 20: */
" of Cruel Justice",
" of Righteous Anger",
" of Might",
" of the Orb",
" of Makhleb",
" of Trog",
" of Xom",
" of the Ancients",
" of Mana",
" of Nemelex Xobeh",
/* 30: */
" of the Magi",
" of the Archmagi",
" of the King",
" of the Queen",
" of the Spheres",
" of Circularity",
" of Linearity",
" of Conflict",
" of Battle",
" of Honour",
/* 40: */
" of the Butterfly",
" of the Wasp",
" of the Frog",
" of the Weasel",
" of the Troglodytes",
" of the Pill-Bug",
" of Sin",
" of Vengeance",
" of Execution",
" of Arbitration",
/* 50: */
" of the Seeker",
" of Truth",
" of Lies",
" of the Eggplant",
" of the Turnip",
" of Chance",
" of Curses",
" of Hell's Wrath",
" of the Undead",
" of Chaos",
/* 60: */
" of Law",
" of Life",
" of the Old World",
" of the New World",
" of the Middle World",
" of Crawl",
" of Unpleasantness",
" of Discomfort",
" of Brutal Revenge",
" of Triumph",
/* 70: */
" of Evisceration",
" of Dismemberment",
" of Terror",
" of Fear",
" of Pride",
" of the Volcano",
" of Blood-Lust",
" of Division",
" of Eternal Harmony",
" of Peace",
/* 80: */
" of Quick Death",
" of Instant Death",
" of Misery",
" of the Whale",
" of the Lobster",
" of the Whelk",
" of the Penguin",
" of the Puffin",
" of the Mushroom",
" of the Toadstool",
/* 90: */
" of the Little People",
" of the Puffball",
" of Spores",
" of Optimality",
" of Pareto-Optimality",
" of Greatest Utility",
" of Anarcho-Capitalism",
" of Ancient Evil",
" of the Revolution",
" of the People",
/* 100: */
" of the Elves",
" of the Dwarves",
" of the Orcs",
" of the Humans",
" of Sludge",
" of the Naga",
" of the Trolls",
" of the Ogres",
" of Equitable Redistribution",
" of Wealth",
/* 110: */
" of Poverty",
" of Reapportionment",
" of Fragile Peace",
" of Reinforcement",
" of Beauty",
" of the Slug",
" of the Snail",
" of the Gastropod",
" of Corporal Punishment",
" of Capital Punishment",
/* 120: */
" of the Beast",
" of Light",
" of Darkness",
" of Day",
" of the Day",
" of Night",
" of the Night",
" of Twilight",
" of the Twilight",
" of Dawn",
/* 130: */
" of the Dawn",
" of the Sun",
" of the Moon",
" of Distant Worlds",
" of the Unseen Realm",
" of Pandemonium",
" of the Abyss",
" of the Nexus",
" of the Gulag",
" of the Crusades",
/* 140: */
" of Proximity",
" of Wounding",
" of Peril",
" of the Eternal Warrior",
" of the Eternal War",
" of Evil",
" of Pounding",
" of Oozing Pus",
" of Pestilence",
" of Plague",
/* 150: */
" of Negation",
" of the Saviour",
" of Infection",
" of Defence",
" of Protection",
" of Defence by Offence",
" of Expedience",
" of Reason",
" of Unreason",
" of the Heart",
/* 160: */
" of Offence",
" of the Leaf",
" of Leaves",
" of Winter",
" of Summer",
" of Autumn",
" of Spring",
" of Midsummer",
" of Midwinter",
" of Eternal Night",
/* 170: */
" of Shrieking Terror",
" of the Lurker",
" of the Crawling Thing",
" of the Thing",
" \"Thing\"",
" of the Sea",
" of the Forest",
" of the Trees",
" of Earth",
" of the World",
/* 180: */
" of Bread",
" of Yeast",
" of the Amoeba",
" of Deformation",
" of Guilt",
" of Innocence",
" of Ascent",
" of Descent",
" of Music",
" of Brilliance",
/* 190: */
" of Disgust",
" of Feasting",
" of Sunlight",
" of Starshine",
" of the Stars",
" of Dust",
" of the Clouds",
" of the Sky",
" of Ash",
" of Slime",
/* 200: */
" of Clarity",
" of Eternal Vigilance",
" of Purpose",
" of the Moth",
" of the Goat",
" of Fortitude",
" of Equivalence",
" of Balance",
" of Unbalance",
" of Harmony",
/* 210: */
" of Disharmony",
" of the Inferno",
" of the Omega Point",
" of Inflation",
" of Deflation",
" of Supply",
" of Demand",
" of Gross Domestic Product",
" of Unjust Enrichment",
" of Detinue",
/* 220: */
" of Conversion",
" of Anton Piller",
" of Mandamus",
" of Frustration",
" of Breach",
" of Fundamental Breach",
" of Termination",
" of Extermination",
" of Satisfaction",
" of Res Nullius",
/* 230: */
" of Fee Simple",
" of Terra Nullius",
" of Context",
" of Prescription",
" of Freehold",
" of Tortfeasance",
" of Omission",
" of Negligence",
" of Pains",
" of Attainder",
/* 240: */
" of Action",
" of Inaction",
" of Truncation",
" of Defenestration",
" of Desertification",
" of the Wilderness",
" of Psychosis",
" of Neurosis",
" of Fixation",
" of the Open Hand",
/* 250: */
" of the Tooth",
" of Honesty",
" of Dishonesty",
" of Divine Compulsion",
" of the Invisible Hand",
" of Freedom",
" of Liberty",
" of Servitude",
" of Domination",
" of Tension",
/* 260: */
" of Monotheism",
" of Atheism",
" of Agnosticism",
" of Existentialism",
" of the Good",
" of Relativism",
" of Absolutism",
" of Absolution",
" of Abstinence",
" of Abomination",
/* 270: */
" of Mutilation",
" of Stasis",
" of Wonder",
" of Dullness",
" of Dim Light",
" of the Shining Light",
" of Immorality",
" of Amorality",
" of Precise Incision",
" of Orthodoxy",
/* 280: */
" of Faith",
" of Untruth",
" of the Augurer",
" of the Water Diviner",
" of the Soothsayer",
" of Punishment",
" of Amelioration",
" of Sulphur",
" of the Egg",
" of the Globe",
/* 290: */
" of the Candle",
" of the Candelabrum",
" of the Vampires",
" of the Orcs",
" of the Halflings",
" of World's End",
" of Blue Skies",
" of Red Skies",
" of Orange Skies",
" of Purple Skies",
/* 300: */
" of Articulation",
" of the Mind",
" of the Spider",
" of the Lamprey",
" of the Beginning",
" of the End",
" of Severance",
" of Sequestration",
" of Mourning",
" of Death's Door",
/* 310: */
" of the Key",
" of Earthquakes",
" of Failure",
" of Success",
" of Intimidation",
" of the Mosquito",
" of the Gnat",
" of the Blowfly",
" of the Turtle",
" of the Tortoise",
/* 320: */
" of the Pit",
" of the Grave",
" of Submission",
" of Dominance",
" of the Messenger",
" of Crystal",
" of Gravity",
" of Levity",
" of the Slorg",
" of Surprise",
/* 330: */
" of the Maze",
" of the Labyrinth",
" of Divine Intervention",
" of Rotation",
" of the Spinneret",
" of the Scorpion",
" of Demonkind",
" of the Genius",
" of Bloodstone",
" of Grontol",
/* 340: */
" \"Grim Tooth\"",
" \"Widowmaker\"",
" \"Widowermaker\"",
" \"Lifebane\"",
" \"Conservator\"",
" \"Banisher\"",
" \"Tormentor\"",
" \"Secret Weapon\"",
" \"String\"",
" \"Stringbean\"",
/* 350: */
" \"Blob\"",
" \"Globulus\"",
" \"Hulk\"",
" \"Raisin\"",
" \"Starlight\"",
" \"Giant's Toothpick\"",
" \"Pendulum\"",
" \"Backscratcher\"",
" \"Brush\"",
" \"Murmur\"",
/* 360: */
" \"Sarcophage\"",
" \"Concordance\"",
" \"Dragon's Tongue\"",
" \"Arbiter\"",
" \"Gram\"",
" \"Grom\"",
" \"Grim\"",
" \"Grum\"",
" \"Rummage\"",
" \"Omelette\"",
/* 370: */
" \"Egg\"",
" \"Aubergine\"",
" \"Z\"",
" \"X\"",
" \"Q\"",
" \"Ox\"",
" \"Death Rattle\"",
" \"Tattletale\"",
" \"Fish\"",
" \"Bung\"",
/* 380: */
" \"Arcanum\"",
" \"Mud Pie of Death\"",
" \"Transmigrator\"",
" \"Ultimatum\"",
" \"Earthworm\"",
" \"Worm\"",
" \"Worm's Wrath\"",
" \"Xom's Favour\"",
" \"Bingo\"",
" \"Leviticus\"",
/* 390: */
" of Joyful Slaughter"
static bool god_fits_artefact(const god_type which_god, const item_def &item)
{
if (which_god == GOD_NO_GOD)
return (false);
const int brand = get_weapon_brand(item);
if (is_evil_god(which_god) && brand == SPWPN_HOLY_WRATH)
return (false);
else if (is_good_god(which_god) && (brand == SPWPN_DRAINING
|| brand == SPWPN_PAIN || brand == SPWPN_VAMPIRICISM))
{
return (false);
}
switch (which_god)
{
case GOD_BEOGH:
if (brand == SPWPN_ORC_SLAYING)
return (false);
break;
case GOD_ELYVILON: // peaceful healer god, no weapons, no berserking
if (item.base_type == OBJ_WEAPONS)
return (false);
if (item.base_type == OBJ_JEWELLERY && item.sub_type == AMU_RAGE)
return (false);
if (randart_wpn_property( item, RAP_ANGRY )
|| randart_wpn_property( item, RAP_BERSERK ))
{
return (false);
}
break;
case GOD_OKAWARU: // precision fighter
if (item.base_type == OBJ_JEWELLERY && item.sub_type == AMU_INACCURACY)
return (false);
break;
case GOD_ZIN:
if (item.base_type == OBJ_JEWELLERY && item.sub_type == RING_HUNGER)
return (false); // goes against food theme
if (randart_wpn_property( item, RAP_MUTAGENIC ))
return (false); // goes against anti-mutagenic theme
break;
// Lemuel's new names
" \"Eviscerator\"",
" \"Undertaker\"",
" \"Embalmer\"",
" of Sudden Death",
" of Slow Death",
" of Certain Death",
" of Uncertain Death",
" \"Trog's Wrath\"",
" \"Ogre's Foe\"",
" \"Dragon's Doom\"",
" \"Hellblazer\"",
" \"Hell-Harrower\"",
" of Hacking and Slashing",
" of Anger",
" of Fury",
" of Righteous Fury",
" of the Warrior",
" of the Doomed Warrior",
" of the Warrior-Mage",
case GOD_SIF_MUNA:
case GOD_KIKUBAAQUDGHA:
case GOD_VEHUMET:
if (randart_wpn_property( item, RAP_PREVENT_SPELLCASTING))
return (false);
break;
// from the crawl.akrasiac.org patch
" of the Alphagorgon",
" \"Cookie Cutter\"",
case GOD_TROG: // hates anything enhancing magic
if (item.base_type == OBJ_JEWELLERY && (item.sub_type == RING_WIZARDRY
|| item.sub_type == RING_FIRE || item.sub_type == RING_ICE
|| item.sub_type == RING_MAGICAL_POWER))
{
return (false);
}
if (brand == SPWPN_PAIN) // involves magic
return (false);
if (randart_wpn_property( item, RAP_MAGICAL_POWER))
return (false);
" of the Nine Deaths",
" of Megalomania",
" of Egomania",
" of Pyrrhic Victory",
" of Irrepressible Laughter",
" of Impeachment",
};
default:
break;
}
return (true);
}
static const char *rand_armour_names[] = {
/* 0: */
" of Shielding",
" of Grace",
" of Impermeability",
" of the Onion",
" of Life",
" of Defence",
" of Nonsense",
" of Eternal Vigilance",
" of Fun",
" of Joy",
" of Death's Door",
" of the Gate",
" of Watchfulness",
" of Integrity",
" of Bodily Harmony",
" of Harmony",
" of the Untouchables",
" of Grot",
" of Grottiness",
" of Filth",
" of Wonder",
" of Wondrous Power",
" of Power",
" of Vlad",
" of the Eternal Fruit",
" of Invincibility",
" of Hide-and-Seek",
" of the Mouse",
" of the Saviour",
" of Plasticity",
" of Baldness",
" of Terror",
" of the Arcane",
" of Resist Death",
" of Anaesthesia",
" of the Guardian",
" of Inviolability",
" of the Tortoise",
" of the Turtle",
" of the Armadillo",
" of the Echidna",
" of the Armoured One",
" of Weirdness",
" of Pathos",
" of Serendipity",
" of Loss",
" of Hedging",
" of Indemnity",
" of Limitation",
" of Exclusion",
" of Repulsion",
" of Untold Secrets",
" of the Earth",
" of the Turtledove",
" of Limited Liability",
" of Responsibility",
" of Hadjma",
" of Glory",
" of Preservation",
" of Conservation",
" of Protective Custody",
" of the Clam",
" of the Barnacle",
" of the Lobster",
" of Hairiness",
" of Supple Strength",
" of Space",
" of the Vacuum",
" of Compression",
" of Decompression",
" of the Loofah",
static std::string replace_name_parts(const std::string name_in,
const item_def item)
{
std::string name = name_in;
// maybe god gift?
god_type god_gift = GOD_NO_GOD;
if (item.orig_monnum < 0)
{
int help = -item.orig_monnum - 2;
if (help > GOD_NO_GOD && help < NUM_GODS)
god_gift = static_cast<god_type>(help);
}
// Lemuel's new names
" of the Sun",
" of the Moon",
" of the Stars",
" of the Planets",
" of the Pleiades",
" of the Morning Star",
" of the Evening Star",
" of the Seven Stars",
" of the Seventy-Seven Stars",
" of Departure",
" of Arrival",
" of Change",
" of Stasis",
" of Doubt",
" of Uncertainty",
" of the Elephant",
" of the Donkey",
" of the Zebra",
" of the Hippo",
" of the Giraffe",
" of the Monkey",
" of the Monkey's Uncle",
" of Shadows and Fog",
" of Love and Death",
" of Crimes and Misdemeanours",
" of Courage",
" of Cowardice",
" of Valour",
" of the Extremes",
" of the Middle",
" of the Median",
" of Optimism",
" of Pessimism",
" of the Man with No Name",
" of Crawling",
" of Zot",
" of the Orb",
" of the Orb Guardian",
" of the Dragon",
" of the Komodo Dragon",
" of the Swamp",
" of the Islands",
" of the Lair",
" of the Beasts",
" of the Vault",
" of the Hive",
" of the Beekeeper",
" of the Garden",
" of the Gardener",
" of the Assistant Gardener",
" of War",
" of Peace",
" of Xom",
" of Xom's Laughter",
" of Xom's Questionable Humour",
" of Zin's Displeasure",
" of the Gods",
" of Atheism",
" of Agnosticism",
" of Heresy",
" of the Nightingale",
" of the Meadowlark",
" of Analysis",
" of the Ego",
" of the Id",
" of the Empty Set",
" with No Name",
" with an Unpronounceable Name",
" with a Strange-Sounding Name",
" of Trumpets",
" of the Kettle-Drum",
" of the Accordion",
" of the Hangman",
" of the Hanged Man",
" of Insatiable Hunger",
" of the Devil",
" of Demons",
" of Lesser Demons",
" of Greater Demons",
" of the Iron Devil",
" of Terror",
" of Annoyance",
" of Minor Irritation",
" of Boredom",
" of Ennui",
" of the Springtime",
" of Midsummer",
" of the Harvest",
" of First Snow",
" of Boiling Hail",
" of Perpetual Drought",
" of the Poles",
" of the Tropics",
" of the Equator",
" of the Flat Earth",
" of Premature Burial",
" of False Imprisonment",
" of Moderation",
" of Extremism",
" of Fun and Games",
" of the Great Game",
" of the Game of Life",
" of the King",
" of the Queen",
" of Royalty",
" of Nobility",
" of the Republic",
" of the Empire",
" of Commoners",
" of Peasants",
" of Townfolk",
" of the City",
" of the Country",
" of the Suburbs",
" \"Hero's Friend\"",
" of Calculation",
" of Instinct",
" of Intuition",
" of Magic",
" of Sorcery",
" of Hedge Wizardry",
" of Doom",
" of Pride",
" of Honour",
" of Dishonour",
" of Shame",
" of Embarrassment",
" of Abstract Expressionism",
" of Free Expression",
" of the Guilds",
" of the Guild-Master",
" of the Apprentice",
" of the Blacksmith",
" of the Carpenter",
" of the Wheelwright",
" of the Cooper",
" of the Fisher",
" of the Hunter",
" of the Ditch-Digger",
" of Patience",
" of Impatience",
" of Anxiety",
" of Urgency",
" \"Forget-Me-Not\"",
" of Lilacs",
" of Daffodils",
" of the Rose",
// Don't allow "player's Doom" type names for god gifts (except Xom!)
if (name.find("@player_name@'s", 0) != std::string::npos
&& god_gift != GOD_NO_GOD && god_gift != GOD_XOM)
{
// simply overwrite the name with one of type "god's Favour"
name = "of ";
name += god_name(god_gift, false);
name += "'s ";
name + getRandNameString("divine_esteem");
}
name = replace_all(name, "@player_name@", you.your_name);
static const char *randart_weapon_appearance[] = {
"brightly glowing ", "iridescent ", "smoking ", "bloodstained ", "twisted ",
"shimmering ", "warped ", "crystal ", "jewelled ", "transparent ",
"encrusted ", "pitted ", "slimy ", "polished ", "fine ", "crude ",
"ancient ", "ichor-stained ", "faintly glowing ", "steaming ", "shiny "
};
if (name.find("@branch_name@", 0) != std::string::npos)
{
std::string place;
if (one_chance_in(5))
{
switch(random2(6))
{
case 0:
case 1:
default:
place = "the Abyss";
break;
case 2:
case 3:
place = "Pandemonium";
break;
case 4:
place = "the Labyrinth";
break;
case 5:
place = "the Portal Chambers";
break;
}
}
else
{
const branch_type branch =
static_cast<branch_type>(random2(BRANCH_INFERNO));
place = place_name( get_packed_place(branch, 1, LEVEL_DUNGEON),
true, false );
}
if (!place.empty())
name = replace_all(name, "@branch_name@", place);
}
// occasionally use long name for Xom (see religion.cc)
name = replace_all(name, "@xom_name@", god_name(GOD_XOM, coinflip()));
if (name.find("@god_name@", 0) != std::string::npos)
{
god_type which_god;
// God gifts will always get the gifting god's name
if (god_gift != GOD_NO_GOD)
which_god = god_gift;
else
{
do {
which_god = static_cast<god_type>(random2(NUM_GODS));
} while (!god_fits_artefact(which_god, item));
}
static const char *randart_armour_appearance[] = {
"brightly glowing ", "faintly humming ", "smoking ", "bloodstained ",
"twisted ", "shimmering ", "warped ", "heavily runed ", "jewelled ",
"transparent ", "encrusted ", "pitted ", "slimy ", "polished ", "fine ",
"crude ", "ancient ", "ichor-stained ", "faintly glowing ",
"steaming ", "shiny ", "distressingly furry "
};
name = replace_all(name, "@god_name@", god_name(which_god, false));
}
static const char *randart_jewellery_appearance[] = {
"brightly glowing", "runed", "smoking", "ruby", "twisted",
"shimmering", "warped", "crystal", "diamond", "transparent",
"encrusted", "pitted", "slimy", "polished", "fine", "crude",
"ancient", "emerald", "faintly glowing", "steaming", "shiny",
"scintillating", "sparkling", "flickering", "glittering"
};
return name;
}
const unrandart_entry *unrand = seekunrandart( item );
return (item_type_known(item) ? unrand->name : unrand->unid_name);
}
const long seed = calc_seed( item );
rng_save_excursion rng_state;
seed_rng( seed );
std::string result;
if (!item_type_known(item))
{
result += RANDOM_ELEMENT(randart_weapon_appearance);
result += item_base_name(item);
return result;
case OBJ_WEAPONS:
return "weapon";
case OBJ_ARMOUR:
return "armour";
case OBJ_JEWELLERY:
return "jewellery";
default:
return "artefact";
if (coinflip())
{
result += item_base_name(item);
result += RANDOM_ELEMENT(rand_wpn_names);
}
else
static bool pick_db_name(const int type)
{
switch (type)
const std::string st_p = make_name(random_int(), false);
result += item_base_name(item);
if (one_chance_in(3))
{
result += " of ";
result += st_p;
}
else
{
result += " \"";
result += st_p;
result += "\"";
}
case OBJ_WEAPONS:
case OBJ_ARMOUR:
return coinflip();
case OBJ_JEWELLERY:
return one_chance_in(5);
default:
return 0;
if (!item_type_known(item))
{
result += RANDOM_ELEMENT(randart_armour_appearance);
result += item_base_name(item);
return result;
}
if (coinflip())
{
result += item_base_name(item);
result += RANDOM_ELEMENT(rand_armour_names);
}
else
// use prefix of gifting god, if applicable
bool god_gift = false;
int item_orig = 0;
if (item_type_known(item)) // god prefix not necessary for appearance
const std::string st_p = make_name(random_int(), false);
result += item_base_name(item);
if (one_chance_in(3))
{
result += " of ";
result += st_p;
}
item_orig = item.orig_monnum;
if (item_orig < 0)
item_orig = -item_orig - 2;
return result;
}
std::string randart_jewellery_name( const item_def &item )
{
ASSERT( item.base_type == OBJ_JEWELLERY );
if (is_unrandom_artefact( item ))
{
const unrandart_entry *unrand = seekunrandart( item );
return (item_type_known(item) ? unrand->name : unrand->unid_name);
}
const long seed = calc_seed( item );
rng_save_excursion exc;
// get base type
lookup += get_artefact_type(item.base_type);
rng_save_excursion rng_state;
result += RANDOM_ELEMENT(randart_jewellery_appearance);
std::string appear = getRandNameString(lookup, " appearance");
if (appear.empty()) // nothing found for lookup
{
appear = getRandNameString("general appearance");
if (appear.empty()) // still nothing found?
appear = "non-descript";
}
result += appear;
result += (jewellery_is_amulet(item) ? "amulet" : "ring");
result += RANDOM_ELEMENT(rand_armour_names);
result += item_base_name(item) + " ";
std::string name = getRandNameString(lookup);
if (name.empty() && god_gift) // if nothing found, try god name alone
{
name = getRandNameString(god_name(static_cast<god_type>(item_orig), false));
if (name.empty()) // if still nothing found, try base type alone
name = getRandNameString(get_artefact_type(item.base_type).c_str());
}
if (name.empty()) // still nothing found?
result += "of Bugginess";
else
result += replace_name_parts(name, item);
// not using {tried} here because there are some confusing
// issues to work out with how we want to handle jewellery
// artefacts and base type id. -- bwr
const bool is_randart = is_random_artefact( *this );
}
if (!randartDB)
{
std::string randartPath = get_savedir_path(RANDART_DB);
std::vector<std::string> textPaths = randart_txt_paths();
// If any of the randart text files are newer then
// aggregated randart db, then regenerate the whole db
for (int i = 0, size = textPaths.size(); i < size; i++)
if (is_newer(textPaths[i], randartPath))
{
generate_randart_db();
break;
}
randartPath.erase(randartPath.length() - 3);
if (!(randartDB = openDB(randartPath.c_str())))
end(1, true, "Failed to open DB: %s", randartPath.c_str());
unlink( full_db_path.c_str() );
for (int i = 0, size = txt_paths.size(); i < size; i++)
store_text_db(txt_paths[i], db_path);
DO_CHMOD_PRIVATE(full_db_path.c_str());
}
static std::vector<std::string> randart_txt_paths()
{
std::vector<std::string> txt_file_names;
std::vector<std::string> paths;
txt_file_names.push_back("randname");
txt_file_names.push_back("rand_wpn"); // mostly weapons
txt_file_names.push_back("rand_arm"); // mostly armour
txt_file_names.push_back("rand_all"); // jewellery and general
for (int i = 0, size = txt_file_names.size(); i < size; i++)
{
std::string name = DATABASE_TXT_DIR;
name += FILE_SEPARATOR;
name += txt_file_names[i];
name += ".txt";
std::string txt_path = datafile_path(name);
if (!txt_path.empty())
paths.push_back(txt_path);
}
return (paths);
}
static void generate_randart_db()
{
std::string db_path = get_savedir_path(RANDART_BASE_NAME);
std::string full_db_path = get_savedir_path(RANDART_DB);
std::vector<std::string> txt_paths = randart_txt_paths();
file_lock lock(get_savedir_path(RANDART_BASE_NAME ".lk"), "wb");
}
/////////////////////////////////////////////////////////////////////////////
// Randname DB specific functions.
std::string getRandNameString(const std::string &itemtype,
const std::string &suffix)
{
if (!randartDB)
return ("");
int num_replacements = 0;
return getRandomizedStr(randartDB, itemtype, suffix,
num_replacements);
######################################################
# Randart Names
# -------------
# rand_wpn.txt: keywords for randart WEAPONS
#
# This file contains the lists of keywords (and their
# weights) for most of the keywords used for randart
# weapons. You will find other ones in rand_all.txt.
# See the explanation in the main file, randname.txt,
# for more details.
######################################################
%%%%
power_or_anger
@power_name@
w:7
@conflict_name@
w:7
@anger_name@
%%%%
power_name
Power
Might
Wondrous Power
Invincibility
Glory
Success
Triumph
Domination
Dominance
Victory
Intimidation
%%%%
conflict_name
Conflict
Tension
Dischord
Division
Doubt
Internal Strife
%%%%
anger_name
Anger
Fury
Righteous Anger
Righteous Fury
Wrath
Brutal Revenge
Vengeance
%%%%
battle_or_war
Battle
Crusades
War
Eternal War
Eternal Warrior
# Lemuel's Suggestions
Warrior
Doomed Warrior
# akrasiac patch
the Pyrrhic Victory
#killing
Blood-Lust
Joyful Slaughter
Wounding
Blood
Fear
Pain
Agony
# Lemuel's suggestion
Hacking and Slashing
# related to cutting
Truncation
Severance
Dullness
Precise Incision
#collateral effects
Mourning
Death's Door
the Grave
%%%%
death_or_doom
# death
Death
Bloody Death
Painful Death
Quick Death
Instant Death
Imminent Death
Sudden Death
Slow Death
Certain Death
Uncertain Death
Pain and Death
# doom
Doom
Premature Burial
Peril
Execution
Destruction
Evisceration
Extermination
# pain and misery
Infinite Pain
Eternal Torment
Dismemberment
Terror
Misery
%%%%
strategy_or_justice
w:2
@strategy_name@
w:4
@valour_name@
w:3
@justice_name@
%%%%
strategy_name
#strategy
Defence
Defence by Offence
Offence
Protection
Reinforcement
Expedience
Optimality
%%%%
valour_name
Honour
Integrity
Responsibility
Watchfulness
Duty
Prudence
Courage
Valour
Ressourcefulness
Action
Purpose
Fortitude
Defiance
Valiance
Courage
Eternal Vigilance
%%%%
justice_name
Tender Mercy
Cruel Justice
Punishment
Innocence
Guilt
Tortfeasance
Extenuating Circumstances
Absolution
False Accusations
Wrongful Imprisonment
Corporal Punishment
Capital Punishment
%%%%
diviner_name
Augurer
Water Diviner
Soothsayer
Seeker
%%%%
people_name
King
Queen
Jester
Fool
Ancients
Saviour
Messenger
Genius
Coward
@diviner_name@
%%%%
weapon_animal
# insects
Pill-Bug
Butterfly
Wasp
Moth
Mosquito
Gnat
Blowfly
# arachnides
Spider
Scorpion
# amphibes and reptiles
Rattle-Snake
# birds
Penguin
Puffin
Lamprey
# mammals
Weasel
Goat
Whale
%%%%
# plants and fungi
plant_name
Eggplant
Turnip
Whelk
#fungi
Mushroom
Toadstool
# ???
Puffball
%%%%
# undead and evil beings
evil_stuff
Curses
Hell's Wrath
the Undead
Ancient Evil
Evil
the Beast
Shrieking Terror
the Lurker
the Crawling Thing
the Thing
Abomination
Mutilation
Deformation
Infection
Demonkind
%%%%
# catastrophes etc.
catastrophe_name
the Inferno
Earthquakes
# the Apocalypse
the Apocalypse
Armageddon
World's End
Ragnarok
# the Apocalyptic Riders (except Death)
Pestilence
Plague
Famine
%%%%
chaos_name
Chaos
Chance
Mayhem
Havoc
Turmoil
Calamity
Arbitration
the Extremes
Disorder
Disaster
Unbalance
Disharmony
Ambiguity
Change
Extremism
%%%%
balance_or_order
the Middle
the Median
Departure
Arrival
Ascent
Descent
Stasis
Bodily Harmony
Moderation
Eternal Harmony
Peace
Equivalence
Balance
Harmony
Fragile Peace
Circularity
Linearity
Law
Order
%%%%%
economics_or_politics
# economics
Inflation
Deflation
Supply
Demand
# politics
the Imperium
Greatest Utility
the Revolution
Defenestration
the People
the Little People
Wealth
Poverty
Reapportionment
# akrasiac patch
Impeachment
# umm, quoi?
Freehold
Attainder
Fee Simple
Mandamus
Breach
Fundamental Breach
Termination
Sequestration
%%%%
place_name
Earth
the World
the Sea
the Forest
the Trees
the Volcano
the Equator
the Old World
the New World
Distant Worlds
the Unseen Realm
the Spheres
Proximity
the Wilderness
the Maze
the Pit
the Eternal Void
%%%%
discomfort_weapon
Unpleasantness
Discomfort
Disgust
Frustration
Chagrin
Dismay
Desperation
Shame
Embarrassment
Annoyance
Anxiety
Urgency
%%%%
mental_illness_weapon
Psychosis
Neurosis
Fixation
Megalomania
Egomania
Compulsion
Fatigue
%%%%
philosophy_or_science
@philosophy_name@
@science_name@
%%%%
philosophy_name
Monotheism
Atheism
Agnosticism
Existentialism
Relativism
Absolutism
Abstinence
Orthodoxy
Heresy
Free Expression
the Ego
Optimism
Pessimism
Serendipity
Limitation
Levity
%%%%
science_name
Reason
Unreason
Calculation
Instinct
Intuition
Circular Logic
Context
Articulation
the Mind
the Nexus
the Beginning
the End
Analysis
Infinity
Quantum Leap
Gravity
Rotation
%%%%
item_name
# items
Orb
Egg
Globe
Candle
Candelabrum
Key
Ring
# body parts
Heart
Brain
Tooth
%%%%
magic_name
the Magi
the Archmagi
the Warrior-Mage
%%%%
# substances
substance_name
Bread
Sulphur
Crystal
Bloodstone
Oozing Pus
Ash
Slime
Bile
# these don't really fit
Mana
Yeast
Spores
Dust
%%%%
# non-groupables
other_weapon_name
the Omega Point
Crawling
Conversion
Prescription
the Open Hand
Spontaneous Combustion
Res Nullius
Terra Nullius
Desertification
the Spinneret
Grontol
# akrasiac patch
Irrepressible Laughter
%%%%
# single word monster names, to allow for combinations like <Monster>slayer
short_monster_name
Dragon
Hydra
Ogre
Spider
Newt
Giant
Beetle
Jelly
%%%%
monster_name
@short_monster_name@
@player_name@
@player_species@
Killer Bee
Killer Klown
Orb Guardian
%%%%
short_killer_name
bane
slayer
%%%%
killer_name
's Bane
's Death
's Death Toll
's Doom
's Foe
's Funeral
's Harbinger of Death
's Nightmare
's Regret
%%%%
real_weapon_name
Grim Tooth
w:5
Widowmaker
w:5
Widowermaker
Lifebane
Conservator
Banisher
Tormentor
Pendulum
Murmur
Sarcophage
Concordance
Dragon's Tongue
Arbiter
Death Rattle
Arcanum
Transmigrator
Ultimatum
Earthworm
Worm
Worm's Wrath
Leviticus
Grim
# Lemuel's suggestions
Eviscerator
Undertaker
Embalmer
Trog's @anger_name@
Hellblazer
Hell-Harrower
%%%%
joke_weapon_name
Secret Weapon
Thing
Mud Pie of Death
Xom's @xom_esteem@
String
Stringbean
Blob
Globulus
Hulk
Raisin
Starlight
Giant's Toothpick
Backscratcher
Brush
Gram
Grom
Grum
Rummage
Omelette
Egg
Aubergine
Z
X
Q
Ox
Tattletale
Fish
Bung
Bingo
# from the crawl.akrasiac.org patch
Cookie Cutter
%%%%
plain_weapon_name
w:15
@short_monster_name@@short_killer_name@
@monster_name@@killer_name@
w:15
@real_weapon_name@
w:5
@joke_weapon_name@
%%%%
######################################################
# Randart Names
# -------------
# rand_arm.txt: keywords for randart ARMOUR
#
# This file contains the lists of keywords (and their
# weights) for most of the keywords used for randart
# armour. You will find others in rand_wpn.txt and
# rand_all.txt, respectively.
#
# See the explanation in the main file, randname.txt,
# for more details.
######################################################
%%%%
armour_animal
# bacteria
Amoeba
# insects
Butterfly
Cricket
Echidna
Ladybird
# invertebrates
Slug
Snail
Gastropod
# arachnides and clams
Tarantula
Clam
Barnacle
Lobster
# amphibia and reptiles
Tortoise
Turtle
Frog
Komodo Dragon
Dragon
# birds
Turtledove
Nightingale
Meadowlark
# mammals
Hare
Kangaroo
Elephant
Zebra
Hippo
Monkey
# not strictly an animal... :)
Monkey's Uncle
%%%%
flower_name
Lilacs
Daffodils
the Rose
the Garden
%%%%
# non-Crawl critters
critter_name
the Slorg
the Alphagorgon
# from the crawl.akrasiac.org patch.
the Hot Ocelot
Eight Boll Weevils
%%%%
discomfort_and_inaction
# discomfort
Minor Irritation
Bitterness
Negation
Failure
Servitude
Submission
# inaction
Lifelessness
Boredom
Ennui
Restlessness
Omission
Negligence
Inaction
%%%%
mental_illness_armour
Paranoia
Claustrophobia
Agoraphobia
Dyspraxia
Mental Paralysis
%%%%
good_or_divine
# good things
the Good
the Leaf
Leaves
Music
Birdsong
Brilliance
Satisfaction
Fun
Joy
Happiness
Wonder
Surprise
Curiosity
Creativity
Beauty
Life
Liberty
Freedom
Amelioration
# divine events
Divine Compulsion
the Invisible Hand
Divine Intervention
%%%%
# in contrast to "wacky_armour_name" these do have some connection to armour and protection
armour_name_shielding
Shielding
Impermeability
Defence
Death's Door
the Gate
the Saviour
the Untouchables
the Armoured One
Exclusion
Repulsion
Preservation
Conservation
Inviolability
%%%%
# other armour properties (beside protection)
armour_property_name
Supple Strength
Resist Death
Grace
Weightlessness
Shadows and Fog
Disguise
Least Resistance
Protective Custody
%%%%
wacky_armour_name
the Onion
Vlad
the Eternal Fruit
Plasticity
Baldness
Terror
Good Intentions
the Arcane
Anaesthesia
the Armadillo
Weirdness
Pathos
Loss
Hedging
Indemnity
Untold Secrets
the Earth
Limited Liability
Hadjma
Hairiness
Space
the Vacuum
Compression
Decompression
the Loofah
Love and Death
%%%%
# Lemuel's suggestions
celestial_bodies
Sun
Moon
Stars
Planets
Pleiades
Morning Star
Evening Star
%%%%
instrument_name
Trumpets
the Kettle-Drum
the Accordion
the Bagpipe
the Lute
%%%%
evil_being
the Devil
Demons
Lesser Demons
Greater Demons
the Iron Devil
the Devil's Advocate
%%%%
# um, reeeeally bad weather...
weather_name
the First Snow
Boiling Hail
Perpetual Drought
the Thunderstorm
%%%%
profession_name
Guilds
Guild-Master
Apprentice
Blacksmith
Carpenter
Wheelwright
Cooper
Fisher
Hunter
Ditch-Digger
Guardian
Beekeeper
Gardener
%%%%
# something for Xom
game_name
# general games
Fun and Games
the Great Game
# children's games
Peek-a-Boo
Hide-and-Seek
Leapfrog
# board games etc.
the Game of Life
Card Tricks
Hangman
the Dice
Jigsaw
Whack-A-Mole
Ladders and Snakes
%%%%
politics_name_armour
the King
the Queen
Royalty
Nobility
the Republic
the Empire
Coronation
Commoners
Peasants
Townfolk
the City
the Country
the Suburbs
the Mutiny
%%%%
other_armour_name
w:5
Grot
w:5
Grottiness
Filth
# magic
Magic
Sorcery
# other
Crawling
the Orb
the Orb Guardian
the Storm King
the Hanged Man
Hedge Wizardry
Feasting
Insatiable Hunger
Imperfection
Trial and Error
Misfortune
Wrong Decisions
Unambiguity
the Lost Path
Misanthrophy
%%%%
plain_armour_name
Forget-Me-Not
Hero's Friend
%%%%
######################################################
# Randart Names
# -------------
# rand_all.txt: keywords for randart JEWELLERY and
# those used for ALL randart types
#
# This file contains the lists of keywords (and their
# weights) for keywords specific to randart jewellery
# as well as those used for all three types of
# randarts (weapons, armour, jewellery). You will find
# other ones in rand_wpn.txt and rand_arm.txt.
# See the explanation in the main file, randname.txt,
# for more details.
######################################################
%%%%
######################################################
# Library of keywords used (mostly) for randart jewellery.
######################################################
jewellery_animal
Magpie
Firefly
Scarab
%%%%
jewellery_special_name
Misfortune
Ephemeral Luck
Wishful Thinking
Moodiness
Reimbursement
the Tempest
Finality
Attitude
Lady Luck
Temptation
False Pretenses
%%%%
suspicion_name
Secrets
Suspicion
Mistrust
Jealousy
Incredulity
Doubts
Suspected Treachery
w:20
@conflict_name@
%%%%
######################################################
# Library of keywords used for all randart types.
######################################################
divine_esteem
# good
Esteem
Favour
Hope
Regard
Approval
Delight
Pride
Generosity
Supremacy
Benevolence
Whim
Favour
# bad
Displeasure
Envy
w:70
@anger_name@
%%%%
xom_esteem
# chosen 20% of the time
w:40
@divine_esteem@
Entertainment
Best Wishes
Amusement
Dangerous Boredom
Questionable Humour
Ringing Laughter
Bemusement
Passing Interest
Full Attention
Everchanging Rules
Whimsicality
Capriciousness
Sleight of Hands
Flight of Fancy
Premature Condolences
Absentmindedness
Malicious Joy
Psychedelic Visions
Fair Game
Experimental Loan
%%%%
time_name
Day
Night
Midnight
Twilight
Dawn
w:5
Spring
w:5
Springtime
w:5
Summer
w:5
Summertime
Autumn
Winter
Midsummer
Midwinter
the Solstice
the Harvest
Eternal Night
Eternity
%%%%
colour_name
Blue
Red
Orange
Purple
%%%%
sky_or_light
the Sun
the Moon
Light
Darkness
Dim Light
the Shining Light
Sunlight
Starshine
the Clouds
the Sky
the @colour_name@ Skies
%%%%
virtue_or_vice
w:5
@virtue_name@
@valour_name@
@vice_name@
%%%%
virtue_name
Virtue
Truth
Honesty
Faith
Hospitality
Charity
Patience
Modesty
%%%%
vice_name
# some of the deadly sins
Sloth
Vanity
Gluttony
Pride
Greed
# general immorality
Sin
the Original Sin
Lies
Dishonesty
Cowardice
Dishonour
Impatience
Immorality
Amorality
Untruth
%%%%
number_or_qualifier
# exact numbers
the Three
the Four
the Five
the Six
the Seven
the Eight
the Nine
the Ten
the Eleven
the Twelve
the Thirteen
the Fifty
a Hundred
a Thousand
# vague numbers
the
the Many
the Countless
# other qualifiers
the Lost
the Forgotten
the Forsaken
the Hidden
the Last
the Lonely
the Jolly
the Ancient
%%%%
thing_names
Suns
Moons
Stars
Planets
Hells
Lives
Deaths
Curses
Blessings
Gods
Spirits
Demons
Wars
Mice
Eyes
Nights
Orbs
Runes
Seas
Places
Wishes
Wonders
%%%%
{ BRANCH_HALL_OF_ZOT, BRANCH_MAIN_DUNGEON, 5, 27, BFLAG_HAS_ORB, 0,
DNGN_ENTER_ZOT, DNGN_RETURN_FROM_ZOT,
"Zot", "the Realm of Zot", "Zot",
NULL,
false, true, BLACK, BLACK,
mons_hallzot_rare, mons_hallzot_level,
NULL, NULL, NULL, NULL,
1, 'Z', false, true },