diff options
Diffstat (limited to 'stone_soup/crawl-ref/source/randart.cc')
-rw-r--r-- | stone_soup/crawl-ref/source/randart.cc | 1995 |
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() |