summaryrefslogtreecommitdiffstats
path: root/stone_soup/crawl-ref/source/randart.cc
diff options
context:
space:
mode:
Diffstat (limited to 'stone_soup/crawl-ref/source/randart.cc')
-rw-r--r--stone_soup/crawl-ref/source/randart.cc1995
1 files changed, 0 insertions, 1995 deletions
diff --git a/stone_soup/crawl-ref/source/randart.cc b/stone_soup/crawl-ref/source/randart.cc
deleted file mode 100644
index 5d2ef93188..0000000000
--- a/stone_soup/crawl-ref/source/randart.cc
+++ /dev/null
@@ -1,1995 +0,0 @@
-/*
- * File: randart.cc
- * Summary: Random and unrandom artifact functions.
- * Written by: Linley Henzell
- *
- * Change History (most recent first):
- *
- * <8> 19 Jun 99 GDL added IBMCPP support
- * <7> 14/12/99 LRH random2 -> random5
- * <6> 11/06/99 cdl random4 -> random2
- *
- * <1> -/--/-- LRH Created
- */
-
-#include "AppHdr.h"
-#include "randart.h"
-
-#include <string.h>
-#include <stdio.h>
-
-#include "externs.h"
-#include "itemname.h"
-#include "itemprop.h"
-#include "stuff.h"
-#include "wpn-misc.h"
-
-/*
- The initial generation of a randart is very simple - it occurs
- in dungeon.cc and consists of giving it a few random things - plus & plus2
- mainly.
-*/
-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\"",
-// Not yet possible...
-/* 390: */
- " of Joyful Slaughter",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
-
-/* 390: */
- "\"\"",
- "\"\"",
- "\"\"",
- "\"\"",
- "\"\"",
- "\"\"",
- "\"\"",
- "\"\"",
- "\"\"",
- "\"\"",
-
-/* 340: */
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
-
-/* 200: */
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-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",
-/* 10: */
- " 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",
-/* 20: */
- " 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",
-/* 30: */
- " 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",
-/* 40: */
- " of the Echidna",
- " of the Armoured One",
- " of Weirdness",
- " of Pathos",
- " of Serendipity",
- " of Loss",
- " of Hedging",
- " of Indemnity",
- " of Limitation",
- " of Exclusion",
-/* 50: */
- " of Repulsion",
- " of Untold Secrets",
- " of the Earth",
- " of the Turtledove",
- " of Limited Liability",
- " of Responsibility",
- " of Hadjma",
- " of Glory",
- " of Preservation",
- " of Conservation",
-/* 60: */
- " 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",
-
-/* 70: */
- " of the Loofah",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
- " of ",
-// Sarcophagus
-};
-
-// Remember: disallow unrandart creation in abyss/pan
-
-/*
- The following unrandart bits were taken from $pellbinder's mon-util code
- (see mon-util.h & mon-util.cc) and modified (LRH). They're in randart.cc and
- not randart.h because they're only used in this code module.
-*/
-
-#if defined(MAC) || defined(__IBMCPP__) || defined(__BCPLUSPLUS__)
-#define PACKED
-#else
-#ifndef PACKED
-#define PACKED __attribute__ ((packed))
-#endif
-#endif
-
-//int unranddatasize;
-
-#ifdef __IBMCPP__
-#pragma pack(push)
-#pragma pack(1)
-#endif
-
-struct unrandart_entry
-{
- const char *name; // true name of unrandart (max 31 chars)
- const char *unid_name; // un-id'd name of unrandart (max 31 chars)
-
- int ura_cl; // class of ura
- int ura_ty; // type of ura
- int ura_pl; // plus of ura
- int ura_pl2; // plus2 of ura
- int ura_col; // colour of ura
- short prpty[RA_PROPERTIES];
-
- // special description added to 'v' command output (max 31 chars)
- const char *spec_descrip1;
- // special description added to 'v' command output (max 31 chars)
- const char *spec_descrip2;
- // special description added to 'v' command output (max 31 chars)
- const char *spec_descrip3;
-};
-
-#ifdef __IBMCPP__
-#pragma pack(pop)
-#endif
-
-static struct unrandart_entry unranddata[] = {
-#include "unrand.h"
-};
-
-char *art_n;
-static FixedVector < char, NO_UNRANDARTS > unrandart_exist;
-
-// static int random5( int randmax );
-static struct unrandart_entry *seekunrandart( const item_def &item );
-
-static inline int random5( int randmax )
-{
- return random2(randmax);
-}
-
-void set_unrandart_exist(int whun, char is_exist)
-{
- unrandart_exist[whun] = is_exist;
-}
-
-char does_unrandart_exist(int whun)
-{
- return (unrandart_exist[whun]);
-}
-
-// returns true is item is a pure randart or an unrandart
-bool is_random_artefact( const item_def &item )
-{
- return (item.flags & ISFLAG_ARTEFACT_MASK);
-}
-
-// returns true if item in an unrandart
-bool is_unrandom_artefact( const item_def &item )
-{
- return (item.flags & ISFLAG_UNRANDART);
-}
-
-// returns true if item is one of the origional fixed artefacts
-bool is_fixed_artefact( const item_def &item )
-{
- if (!is_random_artefact( item )
- && item.base_type == OBJ_WEAPONS
- && item.special >= SPWPN_SINGING_SWORD)
- {
- return (true);
- }
-
- return (false);
-}
-
-int get_unique_item_status( int base_type, int art )
-{
- // Note: for weapons "art" is in item.special,
- // for orbs it's the sub_type.
- if (base_type == OBJ_WEAPONS)
- {
- if (art >= SPWPN_SINGING_SWORD && art <= SPWPN_SWORD_OF_ZONGULDROK)
- return (you.unique_items[ art - SPWPN_SINGING_SWORD ]);
- else if (art >= SPWPN_SWORD_OF_POWER && art <= SPWPN_STAFF_OF_WUCAD_MU)
- return (you.unique_items[ art - SPWPN_SWORD_OF_POWER + 24 ]);
- }
- else if (base_type == OBJ_ORBS)
- {
- if (art >= 4 && art <= 19)
- return (you.unique_items[ art + 3 ]);
-
- }
-
- return (UNIQ_NOT_EXISTS);
-}
-
-void set_unique_item_status( int base_type, int art, int status )
-{
- // Note: for weapons "art" is in item.special,
- // for orbs it's the sub_type.
- if (base_type == OBJ_WEAPONS)
- {
- if (art >= SPWPN_SINGING_SWORD && art <= SPWPN_SWORD_OF_ZONGULDROK)
- you.unique_items[ art - SPWPN_SINGING_SWORD ] = status;
- else if (art >= SPWPN_SWORD_OF_POWER && art <= SPWPN_STAFF_OF_WUCAD_MU)
- you.unique_items[ art - SPWPN_SWORD_OF_POWER + 24 ] = status;
- }
- else if (base_type == OBJ_ORBS)
- {
- if (art >= 4 && art <= 19)
- you.unique_items[ art + 3 ] = status;
-
- }
-}
-
-static long calc_seed( const item_def &item )
-{
- return (item.special & RANDART_SEED_MASK);
-}
-
-void randart_wpn_properties( const item_def &item,
- FixedVector< char, RA_PROPERTIES > &proprt )
-{
- ASSERT( is_random_artefact( item ) );
-
- const int aclass = item.base_type;
- const int atype = item.sub_type;
-
- int i = 0;
- int power_level = 0;
-
- if (is_unrandom_artefact( item ))
- {
- struct unrandart_entry *unrand = seekunrandart( item );
-
- for (i = 0; i < RA_PROPERTIES; i++)
- proprt[i] = unrand->prpty[i];
-
- return;
- }
-
- // long seed = aclass * adam + atype * (aplus % 100) + aplus2 * 100;
- long seed = calc_seed( item );
- push_rng_state();
- seed_rng( seed );
-
- if (aclass == OBJ_ARMOUR)
- power_level = item.plus / 2 + 2;
- else if (aclass == OBJ_JEWELLERY)
- power_level = 1 + random5(3) + random5(2);
- else // OBJ_WEAPON
- power_level = item.plus / 3 + item.plus2 / 3;
-
- if (power_level < 0)
- power_level = 0;
-
- for (i = 0; i < RA_PROPERTIES; i++)
- proprt[i] = 0;
-
- if (aclass == OBJ_WEAPONS) /* Only weapons get brands, of course */
- {
- proprt[RAP_BRAND] = SPWPN_FLAMING + random5(15); /* brand */
-
- if (random5(6) == 0)
- proprt[RAP_BRAND] = SPWPN_FLAMING + random5(2);
-
- if (random5(6) == 0)
- proprt[RAP_BRAND] = SPWPN_ORC_SLAYING + random5(4);
-
- if (random5(6) == 0)
- proprt[RAP_BRAND] = SPWPN_VORPAL;
-
- if (proprt[RAP_BRAND] == SPWPN_FLAME
- || proprt[RAP_BRAND] == SPWPN_FROST)
- {
- proprt[RAP_BRAND] = 0; /* missile wpns */
- }
-
- if (proprt[RAP_BRAND] == SPWPN_PROTECTION)
- proprt[RAP_BRAND] = 0; /* no protection */
-
- if (proprt[RAP_BRAND] == SPWPN_DISRUPTION
- && !(atype == WPN_MACE || atype == WPN_GREAT_MACE
- || atype == WPN_HAMMER))
- {
- proprt[RAP_BRAND] = SPWPN_NORMAL;
- }
-
- // is this happens, things might get broken -- bwr
- if (proprt[RAP_BRAND] == SPWPN_SPEED && atype == WPN_QUICK_BLADE)
- proprt[RAP_BRAND] = SPWPN_NORMAL;
-
- if (launches_things(atype))
- {
- proprt[RAP_BRAND] = SPWPN_NORMAL;
-
- if (random5(3) == 0)
- {
- int tmp = random5(20);
-
- proprt[RAP_BRAND] = (tmp >= 18) ? SPWPN_SPEED :
- (tmp >= 14) ? SPWPN_PROTECTION :
- (tmp >= 10) ? SPWPN_VENOM
- : SPWPN_VORPAL + random2(3);
- if (proprt[RAP_BRAND] == SPWPN_VORPAL && atype == WPN_BLOWGUN)
- proprt[RAP_BRAND] = SPWPN_VENOM;
- }
- }
-
-
- if (is_demonic(atype))
- {
- switch (random5(9))
- {
- case 0:
- proprt[RAP_BRAND] = SPWPN_DRAINING;
- break;
- case 1:
- proprt[RAP_BRAND] = SPWPN_FLAMING;
- break;
- case 2:
- proprt[RAP_BRAND] = SPWPN_FREEZING;
- break;
- case 3:
- proprt[RAP_BRAND] = SPWPN_ELECTROCUTION;
- break;
- case 4:
- proprt[RAP_BRAND] = SPWPN_VAMPIRICISM;
- break;
- case 5:
- proprt[RAP_BRAND] = SPWPN_PAIN;
- break;
- case 6:
- proprt[RAP_BRAND] = SPWPN_VENOM;
- break;
- default:
- power_level -= 2;
- }
- power_level += 2;
- }
- else if (random5(3) == 0)
- proprt[RAP_BRAND] = SPWPN_NORMAL;
- else
- power_level++;
- }
-
- if (random5(5) == 0)
- goto skip_mods;
-
- /* AC mod - not for armours or rings of protection */
- if (random5(4 + power_level) == 0
- && aclass != OBJ_ARMOUR
- && (aclass != OBJ_JEWELLERY || atype != RING_PROTECTION))
- {
- proprt[RAP_AC] = 1 + random5(3) + random5(3) + random5(3);
- power_level++;
- if (random5(4) == 0)
- {
- proprt[RAP_AC] -= 1 + random5(3) + random5(3) + random5(3);
- power_level--;
- }
- }
-
- /* ev mod - not for rings of evasion */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_EVASION))
- {
- proprt[RAP_EVASION] = 1 + random5(3) + random5(3) + random5(3);
- power_level++;
- if (random5(4) == 0)
- {
- proprt[RAP_EVASION] -= 1 + random5(3) + random5(3) + random5(3);
- power_level--;
- }
- }
-
- /* str mod - not for rings of strength */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_STRENGTH))
- {
- proprt[RAP_STRENGTH] = 1 + random5(3) + random5(2);
- power_level++;
- if (random5(4) == 0)
- {
- proprt[RAP_STRENGTH] -= 1 + random5(3) + random5(3) + random5(3);
- power_level--;
- }
- }
-
- /* int mod - not for rings of intelligence */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_INTELLIGENCE))
- {
- proprt[RAP_INTELLIGENCE] = 1 + random5(3) + random5(2);
- power_level++;
- if (random5(4) == 0)
- {
- proprt[RAP_INTELLIGENCE] -= 1 + random5(3) + random5(3) + random5(3);
- power_level--;
- }
- }
-
- /* dex mod - not for rings of dexterity */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_DEXTERITY))
- {
- proprt[RAP_DEXTERITY] = 1 + random5(3) + random5(2);
- power_level++;
- if (random5(4) == 0)
- {
- proprt[RAP_DEXTERITY] -= 1 + random5(3) + random5(3) + random5(3);
- power_level--;
- }
- }
-
- skip_mods:
- if (random5(15) < power_level
- || aclass == OBJ_WEAPONS
- || (aclass == OBJ_JEWELLERY && atype == RING_SLAYING))
- {
- goto skip_combat;
- }
-
- /* Weapons and rings of slaying can't get these */
- if (random5(4 + power_level) == 0) /* to-hit */
- {
- proprt[RAP_ACCURACY] = 1 + random5(3) + random5(2);
- power_level++;
- if (random5(4) == 0)
- {
- proprt[RAP_ACCURACY] -= 1 + random5(3) + random5(3) + random5(3);
- power_level--;
- }
- }
-
- if (random5(4 + power_level) == 0) /* to-dam */
- {
- proprt[RAP_DAMAGE] = 1 + random5(3) + random5(2);
- power_level++;
- if (random5(4) == 0)
- {
- proprt[RAP_DAMAGE] -= 1 + random5(3) + random5(3) + random5(3);
- power_level--;
- }
- }
-
- skip_combat:
- if (random5(12) < power_level)
- goto finished_powers;
-
-/* res_fire */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY
- || (atype != RING_PROTECTION_FROM_FIRE
- && atype != RING_FIRE
- && atype != RING_ICE))
- && (aclass != OBJ_ARMOUR
- || (atype != ARM_DRAGON_ARMOUR
- && atype != ARM_ICE_DRAGON_ARMOUR
- && atype != ARM_GOLD_DRAGON_ARMOUR)))
- {
- proprt[RAP_FIRE] = 1;
- if (random5(5) == 0)
- proprt[RAP_FIRE]++;
- power_level++;
- }
-
- /* res_cold */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY
- || (atype != RING_PROTECTION_FROM_COLD
- && atype != RING_FIRE
- && atype != RING_ICE))
- && (aclass != OBJ_ARMOUR
- || (atype != ARM_DRAGON_ARMOUR
- && atype != ARM_ICE_DRAGON_ARMOUR
- && atype != ARM_GOLD_DRAGON_ARMOUR)))
- {
- proprt[RAP_COLD] = 1;
- if (random5(5) == 0)
- proprt[RAP_COLD]++;
- power_level++;
- }
-
- if (random5(12) < power_level || power_level > 7)
- goto finished_powers;
-
- /* res_elec */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_ARMOUR || atype != ARM_STORM_DRAGON_ARMOUR))
- {
- proprt[RAP_ELECTRICITY] = 1;
- power_level++;
- }
-
-/* res_poison */
- if (random5(5 + power_level) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_POISON_RESISTANCE)
- && (aclass != OBJ_ARMOUR
- || atype != ARM_GOLD_DRAGON_ARMOUR
- || atype != ARM_SWAMP_DRAGON_ARMOUR))
- {
- proprt[RAP_POISON] = 1;
- power_level++;
- }
-
- /* prot_life - no necromantic brands on weapons allowed */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_TELEPORTATION)
- && proprt[RAP_BRAND] != SPWPN_DRAINING
- && proprt[RAP_BRAND] != SPWPN_VAMPIRICISM
- && proprt[RAP_BRAND] != SPWPN_PAIN)
- {
- proprt[RAP_NEGATIVE_ENERGY] = 1;
- power_level++;
- }
-
- /* res magic */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_PROTECTION_FROM_MAGIC))
- {
- proprt[RAP_MAGIC] = 20 + random5(40);
- power_level++;
- }
-
- /* see_invis */
- if (random5(4 + power_level) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_INVISIBILITY))
- {
- proprt[RAP_EYESIGHT] = 1;
- power_level++;
- }
-
- if (random5(12) < power_level || power_level > 10)
- goto finished_powers;
-
- /* turn invis */
- if (random5(10) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_INVISIBILITY))
- {
- proprt[RAP_INVISIBLE] = 1;
- power_level++;
- }
-
- /* levitate */
- if (random5(10) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_LEVITATION))
- {
- proprt[RAP_LEVITATE] = 1;
- power_level++;
- }
-
- if (random5(10) == 0) /* blink */
- {
- proprt[RAP_BLINK] = 1;
- power_level++;
- }
-
- /* teleport */
- if (random5(10) == 0
- && (aclass != OBJ_JEWELLERY || atype != RING_TELEPORTATION))
- {
- proprt[RAP_CAN_TELEPORT] = 1;
- power_level++;
- }
-
- /* go berserk */
- if (random5(10) == 0 && (aclass != OBJ_JEWELLERY || atype != AMU_RAGE))
- {
- proprt[RAP_BERSERK] = 1;
- power_level++;
- }
-
- if (random5(10) == 0) /* sense surr */
- {
- proprt[RAP_MAPPING] = 1;
- power_level++;
- }
-
-
- finished_powers:
- /* Armours get less powers, and are also less likely to be
- cursed that wpns */
- if (aclass == OBJ_ARMOUR)
- power_level -= 4;
-
- if (random5(17) >= power_level || power_level < 2)
- goto finished_curses;
-
- switch (random5(9))
- {
- case 0: /* makes noise */
- if (aclass != OBJ_WEAPONS)
- break;
- proprt[RAP_NOISES] = 1 + random5(4);
- break;
- case 1: /* no magic */
- proprt[RAP_PREVENT_SPELLCASTING] = 1;
- break;
- case 2: /* random teleport */
- if (aclass != OBJ_WEAPONS)
- break;
- proprt[RAP_CAUSE_TELEPORTATION] = 5 + random5(15);
- break;
- case 3: /* no teleport - doesn't affect some instantaneous teleports */
- if (aclass == OBJ_JEWELLERY && atype == RING_TELEPORTATION)
- break; /* already is a ring of tport */
- if (aclass == OBJ_JEWELLERY && atype == RING_TELEPORT_CONTROL)
- break; /* already is a ring of tport ctrl */
- proprt[RAP_BLINK] = 0;
- proprt[RAP_CAN_TELEPORT] = 0;
- proprt[RAP_PREVENT_TELEPORTATION] = 1;
- break;
- case 4: /* berserk on attack */
- if (aclass != OBJ_WEAPONS)
- break;
- proprt[RAP_ANGRY] = 1 + random5(8);
- break;
- case 5: /* susceptible to fire */
- if (aclass == OBJ_JEWELLERY
- && (atype == RING_PROTECTION_FROM_FIRE || atype == RING_FIRE
- || atype == RING_ICE))
- break; /* already does this or something */
- if (aclass == OBJ_ARMOUR
- && (atype == ARM_DRAGON_ARMOUR || atype == ARM_ICE_DRAGON_ARMOUR
- || atype == ARM_GOLD_DRAGON_ARMOUR))
- break;
- proprt[RAP_FIRE] = -1;
- break;
- case 6: /* susceptible to cold */
- if (aclass == OBJ_JEWELLERY
- && (atype == RING_PROTECTION_FROM_COLD || atype == RING_FIRE
- || atype == RING_ICE))
- break; /* already does this or something */
- if (aclass == OBJ_ARMOUR
- && (atype == ARM_DRAGON_ARMOUR || atype == ARM_ICE_DRAGON_ARMOUR
- || atype == ARM_GOLD_DRAGON_ARMOUR))
- break;
- proprt[RAP_COLD] = -1;
- break;
- case 7: /* speed metabolism */
- if (aclass == OBJ_JEWELLERY && atype == RING_HUNGER)
- break; /* already is a ring of hunger */
- if (aclass == OBJ_JEWELLERY && atype == RING_SUSTENANCE)
- break; /* already is a ring of sustenance */
- proprt[RAP_METABOLISM] = 1 + random5(3);
- break;
- case 8: /* emits mutagenic radiation - increases magic_contamination */
- /* property is chance (1 in ...) of increasing magic_contamination */
- proprt[RAP_MUTAGENIC] = 2 + random5(4);
- break;
- }
-
-/*
- 26 - +to-hit (no wpns)
- 27 - +to-dam (no wpns)
- */
-
-finished_curses:
- if (random5(10) == 0
- && (aclass != OBJ_ARMOUR
- || atype != ARM_CLOAK
- || get_equip_race(item) != ISFLAG_ELVEN)
- && (aclass != OBJ_ARMOUR
- || atype != ARM_BOOTS
- || get_equip_race(item) != ISFLAG_ELVEN)
- && get_armour_ego_type( item ) != SPARM_STEALTH)
- {
- power_level++;
- proprt[RAP_STEALTH] = 10 + random5(70);
-
- if (random5(4) == 0)
- {
- proprt[RAP_STEALTH] = -proprt[RAP_STEALTH] - random5(20);
- power_level--;
- }
- }
-
- if ((power_level < 2 && random5(5) == 0) || random5(30) == 0)
- proprt[RAP_CURSED] = 1;
-
- pop_rng_state();
-
-}
-
-int randart_wpn_property( const item_def &item, char prop )
-{
- FixedVector< char, RA_PROPERTIES > proprt;
-
- randart_wpn_properties( item, proprt );
-
- return (proprt[prop]);
-}
-
-const char *randart_name( const item_def &item )
-{
- ASSERT( item.base_type == OBJ_WEAPONS );
-
- if (is_unrandom_artefact( item ))
- {
- struct unrandart_entry *unrand = seekunrandart( item );
-
- return (item_ident(item, ISFLAG_KNOW_TYPE) ? unrand->name
- : unrand->unid_name);
- }
-
- free(art_n);
- art_n = (char *) malloc(sizeof(char) * 80);
-
- if (art_n == NULL)
- return ("Malloc Failed Error");
-
- strcpy(art_n, "");
-
- // long seed = aclass + adam * (aplus % 100) + atype * aplus2;
- long seed = calc_seed( item );
- push_rng_state();
- seed_rng( seed );
-
- if (!item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- switch (random5(21))
- {
- case 0: strcat(art_n, "brightly glowing "); break;
- case 1: strcat(art_n, "runed "); break;
- case 2: strcat(art_n, "smoking "); break;
- case 3: strcat(art_n, "bloodstained "); break;
- case 4: strcat(art_n, "twisted "); break;
- case 5: strcat(art_n, "shimmering "); break;
- case 6: strcat(art_n, "warped "); break;
- case 7: strcat(art_n, "crystal "); break;
- case 8: strcat(art_n, "jewelled "); break;
- case 9: strcat(art_n, "transparent "); break;
- case 10: strcat(art_n, "encrusted "); break;
- case 11: strcat(art_n, "pitted "); break;
- case 12: strcat(art_n, "slimy "); break;
- case 13: strcat(art_n, "polished "); break;
- case 14: strcat(art_n, "fine "); break;
- case 15: strcat(art_n, "crude "); break;
- case 16: strcat(art_n, "ancient "); break;
- case 17: strcat(art_n, "ichor-stained "); break;
- case 18: strcat(art_n, "faintly glowing "); break;
- case 19: strcat(art_n, "steaming "); break;
- case 20: strcat(art_n, "shiny "); break;
- }
-
- char st_p3[ITEMNAME_SIZE];
-
- standard_name_weap( item.sub_type, st_p3 );
- strcat(art_n, st_p3);
- pop_rng_state();
- return (art_n);
- }
-
- char st_p[ITEMNAME_SIZE];
-
- if (random5(2) == 0)
- {
- standard_name_weap( item.sub_type, st_p );
- strcat(art_n, st_p);
- strcat(art_n, rand_wpn_names[random5(390)]);
- }
- else
- {
- char st_p2[ITEMNAME_SIZE];
-
- make_name(random_int(), false, st_p);
- standard_name_weap( item.sub_type, st_p2 );
- strcat(art_n, st_p2);
-
- if (random5(3) == 0)
- {
- strcat(art_n, " of ");
- strcat(art_n, st_p);
- }
- else
- {
- strcat(art_n, " \"");
- strcat(art_n, st_p);
- strcat(art_n, "\"");
- }
- }
-
- pop_rng_state();
-
- return (art_n);
-}
-
-const char *randart_armour_name( const item_def &item )
-{
- ASSERT( item.base_type == OBJ_ARMOUR );
-
- if (is_unrandom_artefact( item ))
- {
- struct unrandart_entry *unrand = seekunrandart( item );
-
- return (item_ident(item, ISFLAG_KNOW_TYPE) ? unrand->name
- : unrand->unid_name);
- }
-
- free(art_n);
- art_n = (char *) malloc(sizeof(char) * 80);
-
- if (art_n == NULL)
- {
- return ("Malloc Failed Error");
- }
-
- strcpy(art_n, "");
-
- // long seed = aclass + adam * (aplus % 100) + atype * aplus2;
- long seed = calc_seed( item );
-
- push_rng_state();
- seed_rng( seed );
-
- if (!item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- switch (random5(21))
- {
- case 0: strcat(art_n, "brightly glowing "); break;
- case 1: strcat(art_n, "runed "); break;
- case 2: strcat(art_n, "smoking "); break;
- case 3: strcat(art_n, "bloodstained "); break;
- case 4: strcat(art_n, "twisted "); break;
- case 5: strcat(art_n, "shimmering "); break;
- case 6: strcat(art_n, "warped "); break;
- case 7: strcat(art_n, "heavily runed "); break;
- case 8: strcat(art_n, "jeweled "); break;
- case 9: strcat(art_n, "transparent "); break;
- case 10: strcat(art_n, "encrusted "); break;
- case 11: strcat(art_n, "pitted "); break;
- case 12: strcat(art_n, "slimy "); break;
- case 13: strcat(art_n, "polished "); break;
- case 14: strcat(art_n, "fine "); break;
- case 15: strcat(art_n, "crude "); break;
- case 16: strcat(art_n, "ancient "); break;
- case 17: strcat(art_n, "ichor-stained "); break;
- case 18: strcat(art_n, "faintly glowing "); break;
- case 19: strcat(art_n, "steaming "); break;
- case 20: strcat(art_n, "shiny "); break;
- }
- char st_p3[ITEMNAME_SIZE];
-
- standard_name_armour(item, st_p3);
- strcat(art_n, st_p3);
- pop_rng_state();
- return (art_n);
- }
-
- char st_p[ITEMNAME_SIZE];
-
- if (random5(2) == 0)
- {
- standard_name_armour(item, st_p);
- strcat(art_n, st_p);
- strcat(art_n, rand_armour_names[random5(71)]);
- }
- else
- {
- char st_p2[ITEMNAME_SIZE];
-
- make_name(random_int(), false, st_p);
- standard_name_armour(item, st_p2);
- strcat(art_n, st_p2);
- if (random5(3) == 0)
- {
- strcat(art_n, " of ");
- strcat(art_n, st_p);
- }
- else
- {
- strcat(art_n, " \"");
- strcat(art_n, st_p);
- strcat(art_n, "\"");
- }
- }
-
- pop_rng_state();
-
- return (art_n);
-}
-
-const char *randart_ring_name( const item_def &item )
-{
- ASSERT( item.base_type == OBJ_JEWELLERY );
-
- int temp_rand = 0; // probability determination {dlb}
-
- if (is_unrandom_artefact( item ))
- {
- struct unrandart_entry *unrand = seekunrandart( item );
-
- return (item_ident(item, ISFLAG_KNOW_TYPE) ? unrand->name
- : unrand->unid_name);
- }
-
- char st_p[ITEMNAME_SIZE];
-
- free(art_n);
- art_n = (char *) malloc(sizeof(char) * 80);
-
- if (art_n == NULL)
- return ("Malloc Failed Error");
-
- strcpy(art_n, "");
-
- // long seed = aclass + adam * (aplus % 100) + atype * aplus2;
- long seed = calc_seed( item );
- push_rng_state();
- seed_rng( seed );
-
- if (!item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- temp_rand = random5(21);
-
- strcat(art_n, (temp_rand == 0) ? "brightly glowing" :
- (temp_rand == 1) ? "runed" :
- (temp_rand == 2) ? "smoking" :
- (temp_rand == 3) ? "ruby" :
- (temp_rand == 4) ? "twisted" :
- (temp_rand == 5) ? "shimmering" :
- (temp_rand == 6) ? "warped" :
- (temp_rand == 7) ? "crystal" :
- (temp_rand == 8) ? "diamond" :
- (temp_rand == 9) ? "transparent" :
- (temp_rand == 10) ? "encrusted" :
- (temp_rand == 11) ? "pitted" :
- (temp_rand == 12) ? "slimy" :
- (temp_rand == 13) ? "polished" :
- (temp_rand == 14) ? "fine" :
- (temp_rand == 15) ? "crude" :
- (temp_rand == 16) ? "ancient" :
- (temp_rand == 17) ? "emerald" :
- (temp_rand == 18) ? "faintly glowing" :
- (temp_rand == 19) ? "steaming"
- : "shiny");
-
- strcat(art_n, " ");
- strcat(art_n, (item.sub_type < AMU_RAGE) ? "ring" : "amulet");
-
- pop_rng_state();
-
- return (art_n);
- }
-
- if (random5(5) == 0)
- {
- strcat(art_n, (item.sub_type < AMU_RAGE) ? "ring" : "amulet");
- strcat(art_n, rand_armour_names[random5(71)]);
- }
- else
- {
- make_name(random_int(), false, st_p);
-
- strcat(art_n, (item.sub_type < AMU_RAGE) ? "ring" : "amulet");
-
- if (random5(3) == 0)
- {
- strcat(art_n, " of ");
- strcat(art_n, st_p);
- }
- else
- {
- strcat(art_n, " \"");
- strcat(art_n, st_p);
- strcat(art_n, "\"");
- }
- }
-
- pop_rng_state();
-
- return (art_n);
-} // end randart_ring_name()
-
-static struct unrandart_entry *seekunrandart( const item_def &item )
-{
- int x = 0;
-
- while (x < NO_UNRANDARTS)
- {
- if (unranddata[x].ura_cl == item.base_type
- && unranddata[x].ura_ty == item.sub_type
- && unranddata[x].ura_pl == item.plus
- && unranddata[x].ura_pl2 == item.plus2)
- {
- return (&unranddata[x]);
- }
-
- x++;
- }
-
- return (&unranddata[0]); // Dummy object
-} // end seekunrandart()
-
-int find_unrandart_index(int item_number)
-{
- int x;
-
- for(x=0; x < NO_UNRANDARTS; x++)
- {
- if (unranddata[x].ura_cl == mitm[item_number].base_type
- && unranddata[x].ura_ty == mitm[item_number].sub_type
- && unranddata[x].ura_pl == mitm[item_number].plus
- && unranddata[x].ura_pl2 == mitm[item_number].plus2)
- {
- return (x);
- }
- }
-
- return (-1);
-}
-
-int find_okay_unrandart(unsigned char aclass, unsigned char atype)
-{
- int x, count;
- int ret = -1;
-
- for (x = 0, count = 0; x < NO_UNRANDARTS; x++)
- {
- if (unranddata[x].ura_cl == aclass
- && does_unrandart_exist(x) == 0
- && (atype == OBJ_RANDOM || unranddata[x].ura_ty == atype))
- {
- count++;
-
- if (random5(count) == 0)
- ret = x;
- }
- }
-
- return (ret);
-} // end find_okay_unrandart()
-
-// which == 0 (default) gives random fixed artefact.
-// Returns true if successful.
-bool make_item_fixed_artefact( item_def &item, bool in_abyss, int which )
-{
- bool force = true; // we force any one asked for specifically
-
- if (!which)
- {
- // using old behaviour... try only once. -- bwr
- force = false;
-
- which = SPWPN_SINGING_SWORD + random2(12);
- if (which >= SPWPN_SWORD_OF_CEREBOV)
- which += 3; // skip over Cerebov's, Dispater's, and Asmodeus' weapons
- }
-
- int status = get_unique_item_status( OBJ_WEAPONS, which );
-
- if ((status == UNIQ_EXISTS
- || (in_abyss && status == UNIQ_NOT_EXISTS)
- || (!in_abyss && status == UNIQ_LOST_IN_ABYSS))
- && !force)
- {
- return (false);
- }
-
- switch (which)
- {
- case SPWPN_SINGING_SWORD:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_LONG_SWORD;
- item.plus = 7;
- item.plus2 = 6;
- break;
-
- case SPWPN_WRATH_OF_TROG:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_BATTLEAXE;
- item.plus = 3;
- item.plus2 = 11;
- break;
-
- case SPWPN_SCYTHE_OF_CURSES:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_SCYTHE;
- item.plus = 13;
- item.plus2 = 13;
- break;
-
- case SPWPN_MACE_OF_VARIABILITY:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_MACE;
- item.plus = random2(16) - 4;
- item.plus2 = random2(16) - 4;
- break;
-
- case SPWPN_GLAIVE_OF_PRUNE:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_GLAIVE;
- item.plus = 0;
- item.plus2 = 12;
- break;
-
- case SPWPN_SCEPTRE_OF_TORMENT:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_MACE;
- item.plus = 7;
- item.plus2 = 6;
- break;
-
- case SPWPN_SWORD_OF_ZONGULDROK:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_LONG_SWORD;
- item.plus = 9;
- item.plus2 = 9;
- break;
-
- case SPWPN_SWORD_OF_POWER:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_GREAT_SWORD;
- item.plus = 0; // set on wield
- item.plus2 = 0; // set on wield
- break;
-
- case SPWPN_KNIFE_OF_ACCURACY:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_DAGGER;
- item.plus = 27;
- item.plus2 = -1;
- break;
-
- case SPWPN_STAFF_OF_OLGREB:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_QUARTERSTAFF;
- item.plus = 0; // set on wield
- item.plus2 = 0; // set on wield
- break;
-
- case SPWPN_VAMPIRES_TOOTH:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_DAGGER;
- item.plus = 3;
- item.plus2 = 4;
- break;
-
- case SPWPN_STAFF_OF_WUCAD_MU:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_QUARTERSTAFF;
- item.plus = 0; // set on wield
- item.plus2 = 0; // set on wield
- break;
-
- case SPWPN_SWORD_OF_CEREBOV:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_GREAT_SWORD;
- item.plus = 6;
- item.plus2 = 6;
- item.colour = YELLOW;
- do_curse_item( item );
- break;
-
- case SPWPN_STAFF_OF_DISPATER:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_QUARTERSTAFF;
- item.plus = 4;
- item.plus2 = 4;
- item.colour = YELLOW;
- break;
-
- case SPWPN_SCEPTRE_OF_ASMODEUS:
- item.base_type = OBJ_WEAPONS;
- item.sub_type = WPN_QUARTERSTAFF;
- item.plus = 7;
- item.plus2 = 7;
- item.colour = RED;
- break;
-
- default:
- DEBUGSTR( "Trying to create illegal fixed artefact!" );
- return (false);
- }
-
- // If we get here, we've made the artefact
- item.special = which;
- item.quantity = 1;
-
- // Items originally generated in the abyss and not found will be
- // shifted to "lost in abyss", and will only be found there. -- bwr
- set_unique_item_status( OBJ_WEAPONS, which, UNIQ_EXISTS );
-
- return (true);
-}
-
-bool make_item_randart( item_def &item )
-{
- if (item.base_type != OBJ_WEAPONS
- && item.base_type != OBJ_ARMOUR
- && item.base_type != OBJ_JEWELLERY)
- {
- return (false);
- }
-
- item.flags |= ISFLAG_RANDART;
- item.special = (random_int() & RANDART_SEED_MASK);
-
- return (true);
-}
-
-// void make_item_unrandart( int x, int ura_item )
-bool make_item_unrandart( item_def &item, int unrand_index )
-{
- item.base_type = unranddata[unrand_index].ura_cl;
- item.sub_type = unranddata[unrand_index].ura_ty;
- item.plus = unranddata[unrand_index].ura_pl;
- item.plus2 = unranddata[unrand_index].ura_pl2;
- item.colour = unranddata[unrand_index].ura_col;
-
- item.flags |= ISFLAG_UNRANDART;
- item.special = unranddata[ unrand_index ].prpty[ RAP_BRAND ];
-
- if (unranddata[ unrand_index ].prpty[ RAP_CURSED ])
- do_curse_item( item );
-
- set_unrandart_exist( unrand_index, 1 );
-
- return (true);
-} // end make_item_unrandart()
-
-const char *unrandart_descrip( char which_descrip, const item_def &item )
-{
-/* Eventually it would be great to have randomly generated descriptions for
- randarts. */
- struct unrandart_entry *unrand = seekunrandart( item );
-
- return ((which_descrip == 0) ? unrand->spec_descrip1 :
- (which_descrip == 1) ? unrand->spec_descrip2 :
- (which_descrip == 2) ? unrand->spec_descrip3 : "Unknown.");
-
-} // end unrandart_descrip()
-
-void standard_name_weap(unsigned char item_typ, char glorg[ITEMNAME_SIZE])
-{
- strcpy(glorg, (item_typ == WPN_CLUB) ? "club" :
- (item_typ == WPN_MACE) ? "mace" :
- (item_typ == WPN_FLAIL) ? "flail" :
- (item_typ == WPN_KNIFE) ? "knife" :
- (item_typ == WPN_DAGGER) ? "dagger" :
- (item_typ == WPN_MORNINGSTAR) ? "morningstar" :
- (item_typ == WPN_SHORT_SWORD) ? "short sword" :
- (item_typ == WPN_LONG_SWORD) ? "long sword" :
- (item_typ == WPN_GREAT_SWORD) ? "great sword" :
- (item_typ == WPN_SCIMITAR) ? "scimitar" :
- (item_typ == WPN_HAND_AXE) ? "hand axe" :
- (item_typ == WPN_BATTLEAXE) ? "battleaxe" :
- (item_typ == WPN_SPEAR) ? "spear" :
- (item_typ == WPN_TRIDENT) ? "trident" :
- (item_typ == WPN_HALBERD) ? "halberd" :
- (item_typ == WPN_SLING) ? "sling" :
- (item_typ == WPN_BOW) ? "bow" :
- (item_typ == WPN_LONGBOW) ? "longbow" :
- (item_typ == WPN_BLOWGUN) ? "blowgun" :
- (item_typ == WPN_CROSSBOW) ? "crossbow" :
- (item_typ == WPN_HAND_CROSSBOW) ? "hand crossbow" :
- (item_typ == WPN_GLAIVE) ? "glaive" :
- (item_typ == WPN_QUARTERSTAFF) ? "quarterstaff" :
- (item_typ == WPN_SCYTHE) ? "scythe" :
- (item_typ == WPN_EVENINGSTAR) ? "eveningstar" :
- (item_typ == WPN_QUICK_BLADE) ? "quick blade" :
- (item_typ == WPN_KATANA) ? "katana" :
- (item_typ == WPN_LAJATANG) ? "lajatang" :
- (item_typ == WPN_EXECUTIONERS_AXE) ? "executioner's axe" :
- (item_typ == WPN_DOUBLE_SWORD) ? "double sword" :
- (item_typ == WPN_TRIPLE_SWORD) ? "triple sword" :
- (item_typ == WPN_HAMMER) ? "hammer" :
- (item_typ == WPN_ANCUS) ? "ancus" :
- (item_typ == WPN_WHIP) ? "whip" :
- (item_typ == WPN_SABRE) ? "sabre" :
- (item_typ == WPN_DEMON_BLADE) ? "demon blade" :
- (item_typ == WPN_BLESSED_BLADE)? "blessed blade" :
- (item_typ == WPN_LOCHABER_AXE) ? "lochaber axe" :
- (item_typ == WPN_DEMON_WHIP) ? "demon whip" :
- (item_typ == WPN_DEMON_TRIDENT) ? "demon trident" :
- (item_typ == WPN_BROAD_AXE) ? "broad axe" :
- (item_typ == WPN_WAR_AXE) ? "war axe" :
- (item_typ == WPN_SPIKED_FLAIL) ? "spiked flail" :
- (item_typ == WPN_GREAT_MACE) ? "great mace" :
- (item_typ == WPN_DIRE_FLAIL) ? "dire flail" :
- (item_typ == WPN_FALCHION) ? "falchion" :
-
- (item_typ == WPN_GIANT_CLUB)
- ? (SysEnv.board_with_nail ? "two-by-four"
- : "giant club") :
-
- (item_typ == WPN_GIANT_SPIKED_CLUB)
- ? (SysEnv.board_with_nail ? "board with nail"
- : "giant spiked club")
-
- : "unknown weapon");
-} // end standard_name_weap()
-
-void standard_name_armour( const item_def &item, char glorg[ITEMNAME_SIZE] )
-{
- short helm_type;
-
- glorg[0] = '\0';
-
- switch (item.sub_type)
- {
- case ARM_ROBE:
- strcat(glorg, "robe");
- break;
-
- case ARM_LEATHER_ARMOUR:
- strcat(glorg, "leather armour");
- break;
-
- case ARM_RING_MAIL:
- strcat(glorg, "ring mail");
- break;
-
- case ARM_SCALE_MAIL:
- strcat(glorg, "scale mail");
- break;
-
- case ARM_CHAIN_MAIL:
- strcat(glorg, "chain mail");
- break;
-
- case ARM_SPLINT_MAIL:
- strcat(glorg, "splint mail");
- break;
-
- case ARM_BANDED_MAIL:
- strcat(glorg, "banded mail");
- break;
-
- case ARM_PLATE_MAIL:
- strcat(glorg, "plate mail");
- break;
-
- case ARM_SHIELD:
- strcat(glorg, "shield");
- break;
-
- case ARM_CLOAK:
- strcat(glorg, "cloak");
- break;
-
- case ARM_HELMET:
- if (get_helmet_type(item) == THELM_HELM
- || get_helmet_type(item) == THELM_HELMET)
- {
- short dhelm = get_helmet_desc( item );
-
- if (dhelm != THELM_DESC_PLAIN)
- {
- strcat( glorg,
- (dhelm == THELM_DESC_WINGED) ? "winged " :
- (dhelm == THELM_DESC_HORNED) ? "horned " :
- (dhelm == THELM_DESC_CRESTED) ? "crested " :
- (dhelm == THELM_DESC_PLUMED) ? "plumed " :
- (dhelm == THELM_DESC_SPIKED) ? "spiked " :
- (dhelm == THELM_DESC_VISORED) ? "visored " :
- (dhelm == THELM_DESC_JEWELLED) ? "jeweled "
- : "buggy " );
- }
- }
-
- helm_type = get_helmet_type( item );
- if (helm_type == THELM_HELM)
- strcat(glorg, "helm");
- else if (helm_type == THELM_CAP)
- strcat(glorg, "cap");
- else if (helm_type == THELM_WIZARD_HAT)
- strcat(glorg, "wizard's hat");
- else
- strcat(glorg, "helmet");
- break;
-
- case ARM_GLOVES:
- strcat(glorg, "gloves");
- break;
-
- case ARM_NAGA_BARDING:
- strcat(glorg, "naga barding");
- break;
-
- case ARM_CENTAUR_BARDING:
- strcat(glorg, "centaur barding");
- break;
-
- case ARM_BOOTS:
- strcat(glorg, "boots");
- break;
-
- case ARM_BUCKLER:
- strcat(glorg, "buckler");
- break;
-
- case ARM_LARGE_SHIELD:
- strcat(glorg, "large shield");
- break;
-
- case ARM_DRAGON_HIDE:
- strcat(glorg, "dragon hide");
- break;
-
- case ARM_TROLL_HIDE:
- strcat(glorg, "troll hide");
- break;
-
- case ARM_CRYSTAL_PLATE_MAIL:
- strcat(glorg, "crystal plate mail");
- break;
-
- case ARM_DRAGON_ARMOUR:
- strcat(glorg, "dragon armour");
- break;
-
- case ARM_TROLL_LEATHER_ARMOUR:
- strcat(glorg, "troll leather armour");
- break;
-
- case ARM_ICE_DRAGON_HIDE:
- strcat(glorg, "ice dragon hide");
- break;
-
- case ARM_ICE_DRAGON_ARMOUR:
- strcat(glorg, "ice dragon armour");
- break;
-
- case ARM_STEAM_DRAGON_HIDE:
- strcat(glorg, "steam dragon hide");
- break;
-
- case ARM_STEAM_DRAGON_ARMOUR:
- strcat(glorg, "steam dragon armour");
- break;
-
- case ARM_MOTTLED_DRAGON_HIDE:
- strcat(glorg, "mottled dragon hide");
- break;
-
- case ARM_MOTTLED_DRAGON_ARMOUR:
- strcat(glorg, "mottled dragon armour");
- break;
-
- case ARM_STORM_DRAGON_HIDE:
- strcat(glorg, "storm dragon hide");
- break;
-
- case ARM_STORM_DRAGON_ARMOUR:
- strcat(glorg, "storm dragon armour");
- break;
-
- case ARM_GOLD_DRAGON_HIDE:
- strcat(glorg, "gold dragon hide");
- break;
-
- case ARM_GOLD_DRAGON_ARMOUR:
- strcat(glorg, "gold dragon armour");
- break;
-
- case ARM_ANIMAL_SKIN:
- strcat(glorg, "animal skin");
- break;
-
- case ARM_SWAMP_DRAGON_HIDE:
- strcat(glorg, "swamp dragon hide");
- break;
-
- case ARM_SWAMP_DRAGON_ARMOUR:
- strcat(glorg, "swamp dragon armour");
- break;
- }
-} // end standard_name_armour()