diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2006-09-18 15:13:34 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2006-09-18 15:13:34 +0000 |
commit | 2f75c92ad79443e954d0167055c08decff3e41b2 (patch) | |
tree | 20bf394b6ae9e60e6f687ad881a2ef4e89d8e8d2 /stone_soup/crawl-ref/source/itemname.cc | |
parent | a4d4f3ecccb29c3f5fc1ce55579119106c399911 (diff) | |
parent | e5860798ba239a9f474ad97263094c6d50967137 (diff) | |
download | crawl-ref-0.1b1.tar.gz crawl-ref-0.1b1.zip |
Updated stone_soup-0.1b1 tag to include fix for Poison Arrow of Doom.0.1b1
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/tags/stone_soup-0.1b1@51 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'stone_soup/crawl-ref/source/itemname.cc')
-rw-r--r-- | stone_soup/crawl-ref/source/itemname.cc | 2421 |
1 files changed, 0 insertions, 2421 deletions
diff --git a/stone_soup/crawl-ref/source/itemname.cc b/stone_soup/crawl-ref/source/itemname.cc deleted file mode 100644 index 89c7441b45..0000000000 --- a/stone_soup/crawl-ref/source/itemname.cc +++ /dev/null @@ -1,2421 +0,0 @@ -/* - * File: itemname.cc - * Summary: Misc functions. - * Written by: Linley Henzell - * - * Modified for Crawl Reference by $Author$ on $Date$ - * - * Change History (most recent first): - * - * <4> 9/09/99 BWR Added hands_required function - * <3> 6/13/99 BWR Upped the base AC for heavy armour - * <2> 5/20/99 BWR Extended screen lines support - * <1> -/--/-- LRH Created - */ - -#include "AppHdr.h" -#include "itemname.h" - -#include <ctype.h> -#include <string.h> -#include <stdlib.h> -#include <stdio.h> - -#ifdef DOS -#include <conio.h> -#endif - -#include "externs.h" - -#include "invent.h" -#include "itemprop.h" -#include "macro.h" -#include "mon-util.h" -#include "randart.h" -#include "skills2.h" -#include "stuff.h" -#include "wpn-misc.h" -#include "view.h" - - -char id[NUM_IDTYPE][MAX_SUBTYPES]; - -static bool is_random_name_space( char let ); -static bool is_random_name_vowel( char let); -static char item_name_2( const item_def &item, char buff[ ITEMNAME_SIZE ], bool terse ); - -static char retvow(int sed); -static char retlet(int sed ); - -bool is_vowel( const char chr ) -{ - const char low = tolower( chr ); - - return (low == 'a' || low == 'e' || low == 'i' || low == 'o' || low == 'u'); -} - -bool item_type_known( const item_def &item ) -{ - return item_ident(item, ISFLAG_KNOW_TYPE) - || (item.base_type == OBJ_JEWELLERY - && id[IDTYPE_JEWELLERY][item.sub_type] == ID_KNOWN_TYPE); -} - -// it_name() and in_name() are now somewhat obsolete now that itemname -// takes item_def, so consider them depricated. -void it_name( int itn, char des, char buff[ ITEMNAME_SIZE ], bool terse ) -{ - item_name( mitm[itn], des, buff, terse ); -} // end it_name() - - -void in_name( int inn, char des, char buff[ ITEMNAME_SIZE ], bool terse ) -{ - item_name( you.inv[inn], des, buff, terse ); -} // end in_name() - -// quant_name is usful since it prints out a different number of items -// than the item actually contains. -void quant_name( const item_def &item, int quant, char des, - char buff[ ITEMNAME_SIZE ], bool terse ) -{ - // item_name now requires a "real" item, so we'll mangle a tmp - item_def tmp = item; - tmp.quantity = quant; - - item_name( tmp, des, buff, terse ); -} // end quant_name() - -char item_name( const item_def &item, char descrip, char buff[ ITEMNAME_SIZE ], - bool terse ) -{ - const int item_clas = item.base_type; - const int item_typ = item.sub_type; - const int it_quant = item.quantity; - - char tmp_quant[20]; - char itm_name[ ITEMNAME_SIZE ] = ""; - - item_name_2( item, itm_name, terse ); - - buff[0] = '\0'; - - if (descrip == DESC_INVENTORY_EQUIP || descrip == DESC_INVENTORY) - { - if (in_inventory(item)) // actually in inventory - snprintf( buff, ITEMNAME_SIZE, (terse) ? "%c) " : "%c - ", - index_to_letter( item.link ) ); - else - descrip = DESC_CAP_A; - } - - if (terse) - descrip = DESC_PLAIN; - - if (item_clas == OBJ_ORBS - || (item_ident( item, ISFLAG_KNOW_TYPE ) - && ((item_clas == OBJ_MISCELLANY - && item_typ == MISC_HORN_OF_GERYON) - || (is_fixed_artefact( item ) - || (is_random_artefact( item )))))) - { - // artefacts always get "the" unless we just want the plain name - switch (descrip) - { - case DESC_CAP_A: - case DESC_CAP_YOUR: - case DESC_CAP_THE: - strncat(buff, "The ", ITEMNAME_SIZE ); - break; - case DESC_NOCAP_A: - case DESC_NOCAP_YOUR: - case DESC_NOCAP_THE: - case DESC_NOCAP_ITS: - case DESC_INVENTORY_EQUIP: - case DESC_INVENTORY: - strncat(buff, "the ", ITEMNAME_SIZE ); - break; - default: - case DESC_PLAIN: - break; - } - } - else if (it_quant > 1) - { - switch (descrip) - { - case DESC_CAP_THE: - strncat(buff, "The ", ITEMNAME_SIZE ); - break; - case DESC_NOCAP_THE: - strncat(buff, "the ", ITEMNAME_SIZE ); - break; - case DESC_CAP_A: - case DESC_NOCAP_A: - case DESC_INVENTORY_EQUIP: - case DESC_INVENTORY: - break; - case DESC_CAP_YOUR: - strncat(buff, "Your ", ITEMNAME_SIZE ); - break; - case DESC_NOCAP_YOUR: - strncat(buff, "your ", ITEMNAME_SIZE ); - break; - case DESC_NOCAP_ITS: - strncat(buff, "its ", ITEMNAME_SIZE ); - break; - case DESC_PLAIN: - default: - break; - } - - itoa(it_quant, tmp_quant, 10); - strncat(buff, tmp_quant, ITEMNAME_SIZE ); - strncat(buff, " ", ITEMNAME_SIZE ); - } - else - { - switch (descrip) - { - case DESC_CAP_THE: - strncat(buff, "The ", ITEMNAME_SIZE ); - break; - case DESC_NOCAP_THE: - strncat(buff, "the ", ITEMNAME_SIZE ); - break; - case DESC_CAP_A: - strncat(buff, "A", ITEMNAME_SIZE ); - - if (itm_name[0] == 'a' || itm_name[0] == 'e' || itm_name[0] == 'i' - || itm_name[0] == 'o' || itm_name[0] == 'u') - { - strncat(buff, "n", ITEMNAME_SIZE ); - } - - strncat(buff, " ", ITEMNAME_SIZE ); - break; // A/An - - case DESC_NOCAP_A: - case DESC_INVENTORY_EQUIP: - case DESC_INVENTORY: - strncat(buff, "a", ITEMNAME_SIZE ); - - if (itm_name[0] == 'a' || itm_name[0] == 'e' || itm_name[0] == 'i' - || itm_name[0] == 'o' || itm_name[0] == 'u') - { - strncat(buff, "n", ITEMNAME_SIZE ); - } - - strncat(buff, " ", ITEMNAME_SIZE ); - break; // a/an - - case DESC_CAP_YOUR: - strncat(buff, "Your ", ITEMNAME_SIZE ); - break; - case DESC_NOCAP_YOUR: - strncat(buff, "your ", ITEMNAME_SIZE ); - break; - case DESC_NOCAP_ITS: - strncat(buff, "its ", ITEMNAME_SIZE ); - break; - case DESC_PLAIN: - default: - break; - } - } // end of else - - strncat(buff, itm_name, ITEMNAME_SIZE ); - - if (descrip == DESC_INVENTORY_EQUIP && item.x == -1 && item.y == -1) - { - ASSERT( item.link != -1 ); - - if (item.link == you.equip[EQ_WEAPON]) - { - if (you.inv[ you.equip[EQ_WEAPON] ].base_type == OBJ_WEAPONS - || item_is_staff( you.inv[ you.equip[EQ_WEAPON] ] )) - { - strncat( buff, " (weapon)", ITEMNAME_SIZE ); - } - else - { - strncat( buff, " (in hand)", ITEMNAME_SIZE ); - } - } - else if (item.link == you.equip[EQ_CLOAK] - || item.link == you.equip[EQ_HELMET] - || item.link == you.equip[EQ_GLOVES] - || item.link == you.equip[EQ_BOOTS] - || item.link == you.equip[EQ_SHIELD] - || item.link == you.equip[EQ_BODY_ARMOUR]) - { - strncat( buff, " (worn)", ITEMNAME_SIZE ); - } - else if (item.link == you.equip[EQ_LEFT_RING]) - { - strncat( buff, " (left hand)", ITEMNAME_SIZE ); - } - else if (item.link == you.equip[EQ_RIGHT_RING]) - { - strncat( buff, " (right hand)", ITEMNAME_SIZE ); - } - else if (item.link == you.equip[EQ_AMULET]) - { - strncat( buff, " (around neck)", ITEMNAME_SIZE ); - } - } - - return (1); -} // end item_name() - - -// Note that "terse" is only currently used for the "in hand" listing on -// the game screen. -static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE], - bool terse ) -{ - const int item_clas = item.base_type; - const int item_typ = item.sub_type; - const int it_plus = item.plus; - const int item_plus2 = item.plus2; - const int it_quant = item.quantity; - - char tmp_quant[20]; - char tmp_buff[ITEMNAME_SIZE]; - int brand; - unsigned char sparm; - - buff[0] = '\0'; - - switch (item_clas) - { - case OBJ_WEAPONS: - if (item_ident( item, ISFLAG_KNOW_CURSE ) && !terse) - { - // We don't bother printing "uncursed" if the item is identified - // for pluses (it's state should be obvious), this is so that - // the weapon name is kept short (there isn't a lot of room - // for the name on the main screen). If you're going to change - // this behaviour, *please* make it so that there is an option - // that maintains this behaviour. -- bwr - if (item_cursed( item )) - strncat(buff, "cursed ", ITEMNAME_SIZE ); - else if (Options.show_uncursed - && !item_ident( item, ISFLAG_KNOW_PLUSES )) - { - strncat(buff, "uncursed ", ITEMNAME_SIZE ); - } - } - - if (item_ident( item, ISFLAG_KNOW_PLUSES )) - { - if (it_plus == 0 && item_plus2 == 0) - strncat(buff, "+0 ", ITEMNAME_SIZE ); - else - { - if (it_plus >= 0) - strncat( buff, "+" , ITEMNAME_SIZE ); - - itoa( it_plus, tmp_quant, 10 ); - strncat( buff, tmp_quant , ITEMNAME_SIZE ); - - if (it_plus != item_plus2 || !terse) - { - strncat( buff, "," , ITEMNAME_SIZE ); - - if (item_plus2 >= 0) - strncat(buff, "+", ITEMNAME_SIZE ); - - itoa( item_plus2, tmp_quant, 10 ); - strncat( buff, tmp_quant , ITEMNAME_SIZE ); - } - - strncat( buff, " " , ITEMNAME_SIZE ); - } - } - - if (is_random_artefact( item )) - { - strncat( buff, randart_name(item), ITEMNAME_SIZE ); - break; - } - - if (is_fixed_artefact( item )) - { - if (item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat(buff, - (item.special == SPWPN_SINGING_SWORD) ? "Singing Sword" : - (item.special == SPWPN_WRATH_OF_TROG) ? "Wrath of Trog" : - (item.special == SPWPN_SCYTHE_OF_CURSES) ? "Scythe of Curses" : - (item.special == SPWPN_MACE_OF_VARIABILITY) ? "Mace of Variability" : - (item.special == SPWPN_GLAIVE_OF_PRUNE) ? "Glaive of Prune" : - (item.special == SPWPN_SCEPTRE_OF_TORMENT) ? "Sceptre of Torment" : - (item.special == SPWPN_SWORD_OF_ZONGULDROK) ? "Sword of Zonguldrok" : - (item.special == SPWPN_SWORD_OF_CEREBOV) ? "Sword of Cerebov" : - (item.special == SPWPN_STAFF_OF_DISPATER) ? "Staff of Dispater" : - (item.special == SPWPN_SCEPTRE_OF_ASMODEUS) ? "Sceptre of Asmodeus" : - (item.special == SPWPN_SWORD_OF_POWER) ? "Sword of Power" : - (item.special == SPWPN_KNIFE_OF_ACCURACY) ? "Knife of Accuracy" : - (item.special == SPWPN_STAFF_OF_OLGREB) ? "Staff of Olgreb" : - (item.special == SPWPN_VAMPIRES_TOOTH) ? "Vampire's Tooth" : - (item.special == SPWPN_STAFF_OF_WUCAD_MU) ? "Staff of Wucad Mu" - : "Brodale's Buggy Bola", - ITEMNAME_SIZE ); - } - else - { - strncat(buff, - (item.special == SPWPN_SINGING_SWORD) ? "golden long sword" : - (item.special == SPWPN_WRATH_OF_TROG) ? "bloodstained battleaxe" : - (item.special == SPWPN_SCYTHE_OF_CURSES) ? "warped scythe" : - (item.special == SPWPN_MACE_OF_VARIABILITY) ? "shimmering mace" : - (item.special == SPWPN_GLAIVE_OF_PRUNE) ? "purple glaive" : - (item.special == SPWPN_SCEPTRE_OF_TORMENT) ? "jeweled golden mace" : - (item.special == SPWPN_SWORD_OF_ZONGULDROK) ? "bone long sword" : - (item.special == SPWPN_SWORD_OF_CEREBOV) ? "great serpentine sword" : - (item.special == SPWPN_STAFF_OF_DISPATER) ? "golden staff" : - (item.special == SPWPN_SCEPTRE_OF_ASMODEUS) ? "ruby sceptre" : - (item.special == SPWPN_SWORD_OF_POWER) ? "chunky great sword" : - (item.special == SPWPN_KNIFE_OF_ACCURACY) ? "thin dagger" : - (item.special == SPWPN_STAFF_OF_OLGREB) ? "green glowing staff" : - (item.special == SPWPN_VAMPIRES_TOOTH) ? "ivory dagger" : - (item.special == SPWPN_STAFF_OF_WUCAD_MU) ? "ephemeral quarterstaff" - : "buggy bola", - ITEMNAME_SIZE ); - } - break; - } - - // Now that we can have "glowing elven" weapons, it's - // probably a good idea to cut out the descriptive - // term once it's become obsolete. -- bwr - if (!item_ident( item, ISFLAG_KNOW_PLUSES ) && !terse) - { - switch (get_equip_desc( item )) - { - case ISFLAG_RUNED: - strncat(buff, "runed ", ITEMNAME_SIZE ); - break; - case ISFLAG_GLOWING: - strncat(buff, "glowing ", ITEMNAME_SIZE ); - break; - } - } - - // always give racial type (it does have game effects) - - switch (get_equip_race( item )) - { - case ISFLAG_ORCISH: - strncat( buff, (terse) ? "orc " : "orcish ", ITEMNAME_SIZE ); - break; - case ISFLAG_ELVEN: - strncat( buff, (terse) ? "elf " : "elven ", ITEMNAME_SIZE ); - break; - case ISFLAG_DWARVEN: - strncat( buff, (terse) ? "dwarf " : "dwarven ", ITEMNAME_SIZE ); - break; - } - - brand = get_weapon_brand( item ); - - if (item_ident( item, ISFLAG_KNOW_TYPE ) && !terse) - { - if (brand == SPWPN_VAMPIRICISM) - strncat(buff, "vampiric ", ITEMNAME_SIZE ); - } // end if - - standard_name_weap( item_typ, tmp_buff ); - strncat( buff, tmp_buff, ITEMNAME_SIZE ); - - if (item_ident( item, ISFLAG_KNOW_TYPE )) - { - switch (brand) - { - case SPWPN_NORMAL: - break; - case SPWPN_FLAMING: - strncat(buff, (terse) ? " (flame)" : " of flaming", ITEMNAME_SIZE ); - break; - case SPWPN_FREEZING: - strncat(buff, (terse) ? " (freeze)" : " of freezing", ITEMNAME_SIZE ); - break; - case SPWPN_HOLY_WRATH: - strncat(buff, (terse) ? " (holy)" : " of holy wrath", ITEMNAME_SIZE ); - break; - case SPWPN_ELECTROCUTION: - strncat(buff, (terse) ? " (elec)" : " of electrocution", ITEMNAME_SIZE ); - break; - case SPWPN_ORC_SLAYING: - strncat(buff, (terse) ? " (slay orc)" : " of orc slaying", ITEMNAME_SIZE ); - break; - case SPWPN_VENOM: - strncat(buff, (terse) ? " (venom)" : " of venom", ITEMNAME_SIZE ); - break; - case SPWPN_PROTECTION: - strncat(buff, (terse) ? " (protect)" : " of protection", ITEMNAME_SIZE ); - break; - case SPWPN_DRAINING: - strncat(buff, (terse) ? " (drain)" : " of draining", ITEMNAME_SIZE ); - break; - case SPWPN_SPEED: - strncat(buff, (terse) ? " (speed)" : " of speed", ITEMNAME_SIZE ); - break; - case SPWPN_VORPAL: - if (is_range_weapon( item )) - { - strncat(buff, (terse) ? " (velocity)" : " of velocity", - ITEMNAME_SIZE ); - break; - } - - switch (get_vorpal_type(item)) - { - case DVORP_CRUSHING: - strncat(buff, (terse) ? " (crush)" : " of crushing", ITEMNAME_SIZE ); - break; - case DVORP_SLICING: - strncat(buff, (terse) ? " (slice)" : " of slicing", ITEMNAME_SIZE ); - break; - case DVORP_PIERCING: - strncat(buff, (terse) ? " (pierce)" : " of piercing", ITEMNAME_SIZE ); - break; - case DVORP_CHOPPING: - strncat(buff, (terse) ? " (chop)" : " of chopping", ITEMNAME_SIZE ); - break; - case DVORP_SLASHING: - strncat(buff, (terse) ? " (slash)" : " of slashing", ITEMNAME_SIZE ); - break; - case DVORP_STABBING: - strncat(buff, (terse) ? " (stab)" : " of stabbing", ITEMNAME_SIZE ); - break; - } - break; - - case SPWPN_FLAME: - strncat(buff, (terse) ? " (flame)" : " of flame", ITEMNAME_SIZE ); - break; // bows/xbows - - case SPWPN_FROST: - strncat(buff, (terse) ? " (frost)" : " of frost", ITEMNAME_SIZE ); - break; // bows/xbows - - case SPWPN_VAMPIRICISM: - if (terse) - strncat( buff, " (vamp)", ITEMNAME_SIZE ); - break; - - case SPWPN_DISRUPTION: - strncat(buff, (terse) ? " (disrupt)" : " of disruption", ITEMNAME_SIZE ); - break; - case SPWPN_PAIN: - strncat(buff, (terse) ? " (pain)" : " of pain", ITEMNAME_SIZE ); - break; - case SPWPN_DISTORTION: - strncat(buff, (terse) ? " (distort)" : " of distortion", ITEMNAME_SIZE ); - break; - - case SPWPN_REACHING: - strncat(buff, (terse) ? " (reach)" : " of reaching", ITEMNAME_SIZE ); - break; - - /* 25 - 29 are randarts */ - } - } - - if (item_ident(item, ISFLAG_KNOW_CURSE) && item_cursed(item) && terse) - strncat( buff, " (curse)", ITEMNAME_SIZE ); - break; - - case OBJ_MISSILES: - brand = get_ammo_brand( item ); - - if (brand == SPMSL_POISONED || brand == SPMSL_POISONED_II) - { - strncat( buff, (terse) ? "poison " : "poisoned ", ITEMNAME_SIZE ); - } - - if (brand == SPMSL_CURARE) - { - strncat( buff, (terse) ? "curare " : "curare-tipped ", ITEMNAME_SIZE); - } - - if (item_ident( item, ISFLAG_KNOW_PLUSES )) - { - if (it_plus >= 0) - strncat(buff, "+", ITEMNAME_SIZE ); - - itoa( it_plus, tmp_quant, 10 ); - - strncat(buff, tmp_quant, ITEMNAME_SIZE ); - strncat(buff, " ", ITEMNAME_SIZE ); - } - - if (get_equip_race( item )) - { - int dwpn = get_equip_race( item ); - - strncat(buff, - (dwpn == ISFLAG_ORCISH) ? ((terse) ? "orc " : "orcish ") : - (dwpn == ISFLAG_ELVEN) ? ((terse) ? "elf " : "elven ") : - (dwpn == ISFLAG_DWARVEN) ? ((terse) ? "dwarf " : "dwarven ") - : "buggy ", - ITEMNAME_SIZE); - } - - strncat(buff, (item_typ == MI_STONE) ? "stone" : - (item_typ == MI_ARROW) ? "arrow" : - (item_typ == MI_BOLT) ? "bolt" : - (item_typ == MI_DART) ? "dart" : - (item_typ == MI_NEEDLE) ? "needle" : - (item_typ == MI_LARGE_ROCK) ? "large rock" : - "hysterical raisin", ITEMNAME_SIZE); - // this should probably be "" {dlb} - - if (it_quant > 1) - strncat(buff, "s", ITEMNAME_SIZE ); - - if (item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat( buff, - (brand == SPMSL_FLAME) ? ((terse) ? " (flame)" : " of flame") : - (brand == SPMSL_ICE) ? ((terse) ? " (ice)" : " of ice") : - (brand == SPMSL_NORMAL) ? "" : - (brand == SPMSL_POISONED) ? "" : - (brand == SPMSL_POISONED_II) ? "" : - (brand == SPMSL_CURARE) ? "" : - " (buggy)", ITEMNAME_SIZE ); - } - break; - - case OBJ_ARMOUR: - if (item_ident( item, ISFLAG_KNOW_CURSE ) && !terse) - { - if (item_cursed( item )) - strncat(buff, "cursed ", ITEMNAME_SIZE ); - else if (Options.show_uncursed - && !item_ident( item, ISFLAG_KNOW_PLUSES )) - { - strncat(buff, "uncursed ", ITEMNAME_SIZE ); - } - } - - if (item_ident( item, ISFLAG_KNOW_PLUSES )) - { - if (it_plus >= 0) - strncat(buff, "+", ITEMNAME_SIZE ); - - itoa( it_plus, tmp_quant, 10 ); - - strncat(buff, tmp_quant, ITEMNAME_SIZE ); - strncat(buff, " ", ITEMNAME_SIZE ); - } - - if (item_typ == ARM_GLOVES || item_typ == ARM_BOOTS) - { - strncat( buff, "pair of ", ITEMNAME_SIZE ); - } - - if (is_random_artefact( item )) - { - strncat(buff, randart_armour_name(item), ITEMNAME_SIZE); - break; - } - - // Now that we can have "glowing elven" armour, it's - // probably a good idea to cut out the descriptive - // term once it's become obsolete. -- bwr - if (!item_ident( item, ISFLAG_KNOW_PLUSES ) && !terse) - { - switch (get_equip_desc( item )) - { - case ISFLAG_EMBROIDERED_SHINY: - if (item_typ == ARM_ROBE || item_typ == ARM_CLOAK - || item_typ == ARM_GLOVES || item_typ == ARM_BOOTS) - { - strncat(buff, "embroidered ", ITEMNAME_SIZE ); - } - else if (item_typ != ARM_LEATHER_ARMOUR - && item_typ != ARM_ANIMAL_SKIN) - { - strncat(buff, "shiny ", ITEMNAME_SIZE ); - } - break; - - case ISFLAG_RUNED: - strncat(buff, "runed ", ITEMNAME_SIZE ); - break; - - case ISFLAG_GLOWING: - strncat(buff, "glowing ", ITEMNAME_SIZE ); - break; - } - } - - // always give racial description (has game effects) - switch (get_equip_race( item )) - { - case ISFLAG_ELVEN: - strncat(buff, (terse) ? "elf " :"elven ", ITEMNAME_SIZE ); - break; - case ISFLAG_DWARVEN: - strncat(buff, (terse) ? "dwarf " : "dwarven ", ITEMNAME_SIZE ); - break; - case ISFLAG_ORCISH: - strncat(buff, (terse) ? "orc " : "orcish ", ITEMNAME_SIZE ); - break; - } // end switch - - standard_name_armour( item, tmp_buff ); // in randart.cc - strncat( buff, tmp_buff, ITEMNAME_SIZE ); - - sparm = get_armour_ego_type( item ); - - if (item_ident( item, ISFLAG_KNOW_TYPE ) && sparm != SPARM_NORMAL) - { - if (!terse) - { - strncat(buff, " of ", ITEMNAME_SIZE ); - - strncat(buff, (sparm == SPARM_RUNNING) ? "running" : - (sparm == SPARM_FIRE_RESISTANCE) ? "fire resistance" : - (sparm == SPARM_COLD_RESISTANCE) ? "cold resistance" : - (sparm == SPARM_POISON_RESISTANCE) ? "poison resistance" : - (sparm == SPARM_SEE_INVISIBLE) ? "see invisible" : - (sparm == SPARM_DARKNESS) ? "darkness" : - (sparm == SPARM_STRENGTH) ? "strength" : - (sparm == SPARM_DEXTERITY) ? "dexterity" : - (sparm == SPARM_INTELLIGENCE) ? "intelligence" : - (sparm == SPARM_PONDEROUSNESS) ? "ponderousness" : - (sparm == SPARM_LEVITATION) ? "levitation" : - (sparm == SPARM_MAGIC_RESISTANCE) ? "magic resistance" : - (sparm == SPARM_PROTECTION) ? "protection" : - (sparm == SPARM_STEALTH) ? "stealth" : - (sparm == SPARM_RESISTANCE) ? "resistance" : - (sparm == SPARM_POSITIVE_ENERGY) ? "positive energy" : - (sparm == SPARM_ARCHMAGI) ? "the Archmagi" : - (sparm == SPARM_PRESERVATION) ? "preservation" - : "bugginess", - ITEMNAME_SIZE); - } - else - { - strncat(buff, (sparm == SPARM_RUNNING) ? " (run)" : - (sparm == SPARM_FIRE_RESISTANCE) ? " (R-fire)" : - (sparm == SPARM_COLD_RESISTANCE) ? " (R-cold)" : - (sparm == SPARM_POISON_RESISTANCE) ? " (R-poison)" : - (sparm == SPARM_SEE_INVISIBLE) ? " (see invis)" : - (sparm == SPARM_DARKNESS) ? " (darkness)" : - (sparm == SPARM_STRENGTH) ? " (str)" : - (sparm == SPARM_DEXTERITY) ? " (dex)" : - (sparm == SPARM_INTELLIGENCE) ? " (int)" : - (sparm == SPARM_PONDEROUSNESS) ? " (ponderous)" : - (sparm == SPARM_LEVITATION) ? " (levitate)" : - (sparm == SPARM_MAGIC_RESISTANCE) ? " (R-magic)" : - (sparm == SPARM_PROTECTION) ? " (protect)" : - (sparm == SPARM_STEALTH) ? " (stealth)" : - (sparm == SPARM_RESISTANCE) ? " (resist)" : - (sparm == SPARM_POSITIVE_ENERGY) ? " (R-neg)" : // ha ha - (sparm == SPARM_ARCHMAGI) ? " (Archmagi)" : - (sparm == SPARM_PRESERVATION) ? " (preserve)" - : " (buggy)", - ITEMNAME_SIZE); - } - } - - if (item_ident(item, ISFLAG_KNOW_CURSE) && item_cursed(item) && terse) - strncat( buff, " (curse)", ITEMNAME_SIZE ); - break; - - // compacted 15 Apr 2000 {dlb}: - case OBJ_WANDS: - if (id[ IDTYPE_WANDS ][item_typ] == ID_KNOWN_TYPE - || item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat(buff, "wand of ", ITEMNAME_SIZE ); - strncat(buff, (item_typ == WAND_FLAME) ? "flame" : - (item_typ == WAND_FROST) ? "frost" : - (item_typ == WAND_SLOWING) ? "slowing" : - (item_typ == WAND_HASTING) ? "hasting" : - (item_typ == WAND_MAGIC_DARTS) ? "magic darts" : - (item_typ == WAND_HEALING) ? "healing" : - (item_typ == WAND_PARALYSIS) ? "paralysis" : - (item_typ == WAND_FIRE) ? "fire" : - (item_typ == WAND_COLD) ? "cold" : - (item_typ == WAND_CONFUSION) ? "confusion" : - (item_typ == WAND_INVISIBILITY) ? "invisibility" : - (item_typ == WAND_DIGGING) ? "digging" : - (item_typ == WAND_FIREBALL) ? "fireball" : - (item_typ == WAND_TELEPORTATION) ? "teleportation" : - (item_typ == WAND_LIGHTNING) ? "lightning" : - (item_typ == WAND_POLYMORPH_OTHER) ? "polymorph other" : - (item_typ == WAND_ENSLAVEMENT) ? "enslavement" : - (item_typ == WAND_DRAINING) ? "draining" : - (item_typ == WAND_RANDOM_EFFECTS) ? "random effects" : - (item_typ == WAND_DISINTEGRATION) ? "disintegration" - : "bugginess", - ITEMNAME_SIZE ); - } - else - { - char primary = (item.special % 12); - char secondary = (item.special / 12); - - strncat(buff,(secondary == 0) ? "" : // hope this works {dlb} - (secondary == 1) ? "jeweled" : - (secondary == 2) ? "curved" : - (secondary == 3) ? "long" : - (secondary == 4) ? "short" : - (secondary == 5) ? "twisted" : - (secondary == 6) ? "crooked" : - (secondary == 7) ? "forked" : - (secondary == 8) ? "shiny" : - (secondary == 9) ? "blackened" : - (secondary == 10) ? "tapered" : - (secondary == 11) ? "glowing" : - (secondary == 12) ? "worn" : - (secondary == 13) ? "encrusted" : - (secondary == 14) ? "runed" : - (secondary == 15) ? "sharpened" : "buggily", ITEMNAME_SIZE); - - if (secondary != 0) - strncat(buff, " ", ITEMNAME_SIZE ); - - strncat(buff, (primary == 0) ? "iron" : - (primary == 1) ? "brass" : - (primary == 2) ? "bone" : - (primary == 3) ? "wooden" : - (primary == 4) ? "copper" : - (primary == 5) ? "gold" : - (primary == 6) ? "silver" : - (primary == 7) ? "bronze" : - (primary == 8) ? "ivory" : - (primary == 9) ? "glass" : - (primary == 10) ? "lead" : - (primary == 11) ? "plastic" : "buggy", ITEMNAME_SIZE); - - strncat(buff, " wand", ITEMNAME_SIZE ); - - if (id[ IDTYPE_WANDS ][item_typ] == ID_TRIED_TYPE) - { - strncat( buff, " {tried}" , ITEMNAME_SIZE ); - } - } - - if (item_ident( item, ISFLAG_KNOW_PLUSES )) - { - strncat(buff, " (", ITEMNAME_SIZE ); - itoa( it_plus, tmp_quant, 10 ); - strncat(buff, tmp_quant, ITEMNAME_SIZE ); - strncat(buff, ")", ITEMNAME_SIZE); - } - break; - - // NB: potions, food, and scrolls stack on the basis of class and - // type ONLY !!! - - // compacted 15 Apr 2000 {dlb}: - case OBJ_POTIONS: - if (id[ IDTYPE_POTIONS ][item_typ] == ID_KNOWN_TYPE - || item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat(buff, "potion", ITEMNAME_SIZE ); - strncat(buff, (it_quant == 1) ? " " : "s ", ITEMNAME_SIZE); - strncat(buff, "of ", ITEMNAME_SIZE ); - strncat(buff, (item_typ == POT_HEALING) ? "healing" : - (item_typ == POT_HEAL_WOUNDS) ? "heal wounds" : - (item_typ == POT_SPEED) ? "speed" : - (item_typ == POT_MIGHT) ? "might" : - (item_typ == POT_GAIN_STRENGTH) ? "gain strength" : - (item_typ == POT_GAIN_DEXTERITY) ? "gain dexterity" : - (item_typ == POT_GAIN_INTELLIGENCE) ? "gain intelligence" : - (item_typ == POT_LEVITATION) ? "levitation" : - (item_typ == POT_POISON) ? "poison" : - (item_typ == POT_SLOWING) ? "slowing" : - (item_typ == POT_PARALYSIS) ? "paralysis" : - (item_typ == POT_CONFUSION) ? "confusion" : - (item_typ == POT_INVISIBILITY) ? "invisibility" : - (item_typ == POT_PORRIDGE) ? "porridge" : - (item_typ == POT_DEGENERATION) ? "degeneration" : - (item_typ == POT_DECAY) ? "decay" : - (item_typ == POT_WATER) ? "water" : - (item_typ == POT_EXPERIENCE) ? "experience" : - (item_typ == POT_MAGIC) ? "magic" : - (item_typ == POT_RESTORE_ABILITIES) ? "restore abilities" : - (item_typ == POT_STRONG_POISON) ? "strong poison" : - (item_typ == POT_BERSERK_RAGE) ? "berserk rage" : - (item_typ == POT_CURE_MUTATION) ? "cure mutation" : - (item_typ == POT_MUTATION) ? "mutation" : "bugginess", - ITEMNAME_SIZE); - } - else - { - char primary = item.special / 14; - char secondary = item.special % 14; - - strncat(buff, - (primary == 0) ? "" : - (primary == 1) ? "bubbling " : - (primary == 2) ? "lumpy " : - (primary == 3) ? "fuming " : - (primary == 4) ? "smoky " : - (primary == 5) ? "fizzy " : - (primary == 6) ? "glowing " : - (primary == 7) ? "sedimented " : - (primary == 8) ? "metallic " : - (primary == 9) ? "murky " : - (primary == 10) ? "gluggy " : - (primary == 11) ? "viscous " : - (primary == 12) ? "oily " : - (primary == 13) ? "slimy " : - (primary == 14) ? "emulsified " : "buggy ", ITEMNAME_SIZE); - - strncat(buff, - (secondary == 0) ? "clear" : - (secondary == 1) ? "blue" : - (secondary == 2) ? "black" : - (secondary == 3) ? "silvery" : - (secondary == 4) ? "cyan" : - (secondary == 5) ? "purple" : - (secondary == 6) ? "orange" : - (secondary == 7) ? "inky" : - (secondary == 8) ? "red" : - (secondary == 9) ? "yellow" : - (secondary == 10) ? "green" : - (secondary == 11) ? "brown" : - (secondary == 12) ? "pink" : - (secondary == 13) ? "white" : "buggy", ITEMNAME_SIZE); - - strncat(buff, " potion", ITEMNAME_SIZE ); - - if (it_quant > 1) - strncat(buff, "s", ITEMNAME_SIZE ); - - if (id[ IDTYPE_POTIONS ][item_typ] == ID_TRIED_TYPE) - { - strncat( buff, " {tried}" , ITEMNAME_SIZE ); - } - } - break; - - // NB: adding another food type == must set for carnivorous chars - // (Kobolds and mutants) - case OBJ_FOOD: - switch (item_typ) - { - case FOOD_MEAT_RATION: - strncat(buff, "meat ration", ITEMNAME_SIZE ); - break; - case FOOD_BREAD_RATION: - strncat(buff, "bread ration", ITEMNAME_SIZE ); - break; - case FOOD_PEAR: - strncat(buff, "pear", ITEMNAME_SIZE ); - break; - case FOOD_APPLE: // make this less common - strncat(buff, "apple", ITEMNAME_SIZE ); - break; - case FOOD_CHOKO: - strncat(buff, "choko", ITEMNAME_SIZE ); - break; - case FOOD_HONEYCOMB: - strncat(buff, "honeycomb", ITEMNAME_SIZE ); - break; - case FOOD_ROYAL_JELLY: - strncat(buff, "royal jell", ITEMNAME_SIZE ); - break; - case FOOD_SNOZZCUMBER: - strncat(buff, "snozzcumber", ITEMNAME_SIZE ); - break; - case FOOD_PIZZA: - strncat(buff, "slice of pizza", ITEMNAME_SIZE ); - break; - case FOOD_APRICOT: - strncat(buff, "apricot", ITEMNAME_SIZE ); - break; - case FOOD_ORANGE: - strncat(buff, "orange", ITEMNAME_SIZE ); - break; - case FOOD_BANANA: - strncat(buff, "banana", ITEMNAME_SIZE ); - break; - case FOOD_STRAWBERRY: - strncat(buff, "strawberr", ITEMNAME_SIZE ); - break; - case FOOD_RAMBUTAN: - strncat(buff, "rambutan", ITEMNAME_SIZE ); - break; - case FOOD_LEMON: - strncat(buff, "lemon", ITEMNAME_SIZE ); - break; - case FOOD_GRAPE: - strncat(buff, "grape", ITEMNAME_SIZE ); - break; - case FOOD_SULTANA: - strncat(buff, "sultana", ITEMNAME_SIZE ); - break; - case FOOD_LYCHEE: - strncat(buff, "lychee", ITEMNAME_SIZE ); - break; - case FOOD_BEEF_JERKY: - strncat(buff, "beef jerk", ITEMNAME_SIZE ); - break; - case FOOD_CHEESE: - strncat(buff, "cheese", ITEMNAME_SIZE ); - break; - case FOOD_SAUSAGE: - strncat(buff, "sausage", ITEMNAME_SIZE ); - break; - case FOOD_CHUNK: - moname( it_plus, true, DESC_PLAIN, tmp_buff ); - - if (item.special < 100) - strncat(buff, "rotting ", ITEMNAME_SIZE ); - - strncat(buff, "chunk", ITEMNAME_SIZE ); - - if (it_quant > 1) - strncat(buff, "s", ITEMNAME_SIZE ); - - strncat(buff, " of ", ITEMNAME_SIZE ); - strncat(buff, tmp_buff, ITEMNAME_SIZE ); - strncat(buff, " flesh", ITEMNAME_SIZE ); - break; - - } - - if (item_typ == FOOD_ROYAL_JELLY || item_typ == FOOD_STRAWBERRY - || item_typ == FOOD_BEEF_JERKY) - strncat(buff, (it_quant > 1) ? "ie" : "y", ITEMNAME_SIZE ); - break; - - // compacted 15 Apr 2000 {dlb}: - case OBJ_SCROLLS: - strncat(buff, "scroll", ITEMNAME_SIZE ); - strncat(buff, (it_quant == 1) ? " " : "s ", ITEMNAME_SIZE); - - if (id[ IDTYPE_SCROLLS ][item_typ] == ID_KNOWN_TYPE - || item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat(buff, "of ", ITEMNAME_SIZE ); - strncat(buff, (item_typ == SCR_IDENTIFY) ? "identify" : - (item_typ == SCR_TELEPORTATION) ? "teleportation" : - (item_typ == SCR_FEAR) ? "fear" : - (item_typ == SCR_NOISE) ? "noise" : - (item_typ == SCR_REMOVE_CURSE) ? "remove curse" : - (item_typ == SCR_DETECT_CURSE) ? "detect curse" : - (item_typ == SCR_SUMMONING) ? "summoning" : - (item_typ == SCR_ENCHANT_WEAPON_I) ? "enchant weapon I" : - (item_typ == SCR_ENCHANT_ARMOUR) ? "enchant armour" : - (item_typ == SCR_TORMENT) ? "torment" : - (item_typ == SCR_RANDOM_USELESSNESS) ? "random uselessness" : - (item_typ == SCR_CURSE_WEAPON) ? "curse weapon" : - (item_typ == SCR_CURSE_ARMOUR) ? "curse armour" : - (item_typ == SCR_IMMOLATION) ? "immolation" : - (item_typ == SCR_BLINKING) ? "blinking" : - (item_typ == SCR_PAPER) ? "paper" : - (item_typ == SCR_MAGIC_MAPPING) ? "magic mapping" : - (item_typ == SCR_FORGETFULNESS) ? "forgetfulness" : - (item_typ == SCR_ACQUIREMENT) ? "acquirement" : - (item_typ == SCR_ENCHANT_WEAPON_II) ? "enchant weapon II" : - (item_typ == SCR_VORPALISE_WEAPON) ? "vorpalise weapon" : - (item_typ == SCR_RECHARGING) ? "recharging" : - //(item_typ == 23) ? "portal travel" : - (item_typ == SCR_ENCHANT_WEAPON_III) ? "enchant weapon III" - : "bugginess", - ITEMNAME_SIZE); - } - else - { - strncat(buff, "labeled ", ITEMNAME_SIZE ); - char buff3[ ITEMNAME_SIZE ]; - - const unsigned long sseed = - item.special - + static_cast<unsigned long>(it_plus) - + (static_cast<unsigned long>(item_clas) << 16); - make_name( sseed, true, buff3 ); - strncat( buff, buff3 , ITEMNAME_SIZE ); - - if (id[ IDTYPE_SCROLLS ][item_typ] == ID_TRIED_TYPE) - { - strncat( buff, " {tried}" , ITEMNAME_SIZE ); - } - } - break; - - // compacted 15 Apr 2000 {dlb}: -- on hold ... what a mess! - case OBJ_JEWELLERY: - // 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 - if (item_ident( item, ISFLAG_KNOW_CURSE )) - { - if (item_cursed( item )) - strncat(buff, "cursed ", ITEMNAME_SIZE ); - else if (Options.show_uncursed - && !item_ident( item, ISFLAG_KNOW_PLUSES )) - { - strncat(buff, "uncursed ", ITEMNAME_SIZE ); - } - } - - if (is_random_artefact( item )) - { - strncat(buff, randart_ring_name(item), ITEMNAME_SIZE); - break; - } - - if (id[ IDTYPE_JEWELLERY ][item_typ] == ID_KNOWN_TYPE - || item_ident( item, ISFLAG_KNOW_TYPE )) - { - - if (item_ident( item, ISFLAG_KNOW_PLUSES ) - && (item_typ == RING_PROTECTION || item_typ == RING_STRENGTH - || item_typ == RING_SLAYING || item_typ == RING_EVASION - || item_typ == RING_DEXTERITY - || item_typ == RING_INTELLIGENCE)) - { - char gokh = it_plus; - - if (gokh >= 0) - strncat( buff, "+" , ITEMNAME_SIZE ); - - itoa( gokh, tmp_quant, 10 ); - strncat( buff, tmp_quant , ITEMNAME_SIZE ); - - if (item_typ == RING_SLAYING) - { - strncat( buff, "," , ITEMNAME_SIZE ); - - if (item_plus2 >= 0) - strncat(buff, "+", ITEMNAME_SIZE ); - - itoa( item_plus2, tmp_quant, 10 ); - strncat( buff, tmp_quant , ITEMNAME_SIZE ); - } - - strncat(buff, " ", ITEMNAME_SIZE ); - } - - switch (item_typ) - { - case RING_REGENERATION: - strncat(buff, "ring of regeneration", ITEMNAME_SIZE ); - break; - case RING_PROTECTION: - strncat(buff, "ring of protection", ITEMNAME_SIZE ); - break; - case RING_PROTECTION_FROM_FIRE: - strncat(buff, "ring of protection from fire", ITEMNAME_SIZE ); - break; - case RING_POISON_RESISTANCE: - strncat(buff, "ring of poison resistance", ITEMNAME_SIZE ); - break; - case RING_PROTECTION_FROM_COLD: - strncat(buff, "ring of protection from cold", ITEMNAME_SIZE ); - break; - case RING_STRENGTH: - strncat(buff, "ring of strength", ITEMNAME_SIZE ); - break; - case RING_SLAYING: - strncat(buff, "ring of slaying", ITEMNAME_SIZE ); - break; - case RING_SEE_INVISIBLE: - strncat(buff, "ring of see invisible", ITEMNAME_SIZE ); - break; - case RING_INVISIBILITY: - strncat(buff, "ring of invisibility", ITEMNAME_SIZE ); - break; - case RING_HUNGER: - strncat(buff, "ring of hunger", ITEMNAME_SIZE ); - break; - case RING_TELEPORTATION: - strncat(buff, "ring of teleportation", ITEMNAME_SIZE ); - break; - case RING_EVASION: - strncat(buff, "ring of evasion", ITEMNAME_SIZE ); - break; - case RING_SUSTAIN_ABILITIES: - strncat(buff, "ring of sustain abilities", ITEMNAME_SIZE ); - break; - case RING_SUSTENANCE: - strncat(buff, "ring of sustenance", ITEMNAME_SIZE ); - break; - case RING_DEXTERITY: - strncat(buff, "ring of dexterity", ITEMNAME_SIZE ); - break; - case RING_INTELLIGENCE: - strncat(buff, "ring of intelligence", ITEMNAME_SIZE ); - break; - case RING_WIZARDRY: - strncat(buff, "ring of wizardry", ITEMNAME_SIZE ); - break; - case RING_MAGICAL_POWER: - strncat(buff, "ring of magical power", ITEMNAME_SIZE ); - break; - case RING_LEVITATION: - strncat(buff, "ring of levitation", ITEMNAME_SIZE ); - break; - case RING_LIFE_PROTECTION: - strncat(buff, "ring of life protection", ITEMNAME_SIZE ); - break; - case RING_PROTECTION_FROM_MAGIC: - strncat(buff, "ring of protection from magic", ITEMNAME_SIZE ); - break; - case RING_FIRE: - strncat(buff, "ring of fire", ITEMNAME_SIZE ); - break; - case RING_ICE: - strncat(buff, "ring of ice", ITEMNAME_SIZE ); - break; - case RING_TELEPORT_CONTROL: - strncat(buff, "ring of teleport control", ITEMNAME_SIZE ); - break; - case AMU_RAGE: - strncat(buff, "amulet of rage", ITEMNAME_SIZE ); - break; - case AMU_RESIST_SLOW: - strncat(buff, "amulet of resist slowing", ITEMNAME_SIZE ); - break; - case AMU_CLARITY: - strncat(buff, "amulet of clarity", ITEMNAME_SIZE ); - break; - case AMU_WARDING: - strncat(buff, "amulet of warding", ITEMNAME_SIZE ); - break; - case AMU_RESIST_CORROSION: - strncat(buff, "amulet of resist corrosion", ITEMNAME_SIZE ); - break; - case AMU_THE_GOURMAND: - strncat(buff, "amulet of the gourmand", ITEMNAME_SIZE ); - break; - case AMU_CONSERVATION: - strncat(buff, "amulet of conservation", ITEMNAME_SIZE ); - break; - case AMU_CONTROLLED_FLIGHT: - strncat(buff, "amulet of controlled flight", ITEMNAME_SIZE ); - break; - case AMU_INACCURACY: - strncat(buff, "amulet of inaccuracy", ITEMNAME_SIZE ); - break; - case AMU_RESIST_MUTATION: - strncat(buff, "amulet of resist mutation", ITEMNAME_SIZE ); - break; - } - /* ? of imputed learning - 100% exp from tames/summoned kills */ - break; - } - - if (item_typ < AMU_RAGE) // rings - { - if (is_random_artefact( item )) - { - strncat(buff, randart_ring_name(item), ITEMNAME_SIZE); - break; - } - - switch (item.special / 13) // secondary characteristic of ring - { - case 1: - strncat(buff, "encrusted ", ITEMNAME_SIZE ); - break; - case 2: - strncat(buff, "glowing ", ITEMNAME_SIZE ); - break; - case 3: - strncat(buff, "tubular ", ITEMNAME_SIZE ); - break; - case 4: - strncat(buff, "runed ", ITEMNAME_SIZE ); - break; - case 5: - strncat(buff, "blackened ", ITEMNAME_SIZE ); - break; - case 6: - strncat(buff, "scratched ", ITEMNAME_SIZE ); - break; - case 7: - strncat(buff, "small ", ITEMNAME_SIZE ); - break; - case 8: - strncat(buff, "large ", ITEMNAME_SIZE ); - break; - case 9: - strncat(buff, "twisted ", ITEMNAME_SIZE ); - break; - case 10: - strncat(buff, "shiny ", ITEMNAME_SIZE ); - break; - case 11: - strncat(buff, "notched ", ITEMNAME_SIZE ); - break; - case 12: - strncat(buff, "knobbly ", ITEMNAME_SIZE ); - break; - } - - switch (item.special % 13) - { - case 0: - strncat(buff, "wooden ring", ITEMNAME_SIZE ); - break; - case 1: - strncat(buff, "silver ring", ITEMNAME_SIZE ); - break; - case 2: - strncat(buff, "golden ring", ITEMNAME_SIZE ); - break; - case 3: - strncat(buff, "iron ring", ITEMNAME_SIZE ); - break; - case 4: - strncat(buff, "steel ring", ITEMNAME_SIZE ); - break; - case 5: - strncat(buff, "bronze ring", ITEMNAME_SIZE ); - break; - case 6: - strncat(buff, "brass ring", ITEMNAME_SIZE ); - break; - case 7: - strncat(buff, "copper ring", ITEMNAME_SIZE ); - break; - case 8: - strncat(buff, "granite ring", ITEMNAME_SIZE ); - break; - case 9: - strncat(buff, "ivory ring", ITEMNAME_SIZE ); - break; - case 10: - strncat(buff, "bone ring", ITEMNAME_SIZE ); - break; - case 11: - strncat(buff, "marble ring", ITEMNAME_SIZE ); - break; - case 12: - strncat(buff, "jade ring", ITEMNAME_SIZE ); - break; - case 13: - strncat(buff, "glass ring", ITEMNAME_SIZE ); - break; - } - } // end of rings - else // ie is an amulet - { - if (is_random_artefact( item )) - { - strncat(buff, randart_ring_name(item), ITEMNAME_SIZE); - break; - } - - if (item.special > 13) - { - switch (item.special / 13) // secondary characteristic of amulet - { - case 0: - strncat(buff, "dented ", ITEMNAME_SIZE ); - break; - case 1: - strncat(buff, "square ", ITEMNAME_SIZE ); - break; - case 2: - strncat(buff, "thick ", ITEMNAME_SIZE ); - break; - case 3: - strncat(buff, "thin ", ITEMNAME_SIZE ); - break; - case 4: - strncat(buff, "runed ", ITEMNAME_SIZE ); - break; - case 5: - strncat(buff, "blackened ", ITEMNAME_SIZE ); - break; - case 6: - strncat(buff, "glowing ", ITEMNAME_SIZE ); - break; - case 7: - strncat(buff, "small ", ITEMNAME_SIZE ); - break; - case 8: - strncat(buff, "large ", ITEMNAME_SIZE ); - break; - case 9: - strncat(buff, "twisted ", ITEMNAME_SIZE ); - break; - case 10: - strncat(buff, "tiny ", ITEMNAME_SIZE ); - break; - case 11: - strncat(buff, "triangular ", ITEMNAME_SIZE ); - break; - case 12: - strncat(buff, "lumpy ", ITEMNAME_SIZE ); - break; - } - } - - switch (item.special % 13) - { - case 0: - strncat(buff, "zirconium amulet", ITEMNAME_SIZE ); - break; - case 1: - strncat(buff, "sapphire amulet", ITEMNAME_SIZE ); - break; - case 2: - strncat(buff, "golden amulet", ITEMNAME_SIZE ); - break; - case 3: - strncat(buff, "emerald amulet", ITEMNAME_SIZE ); - break; - case 4: - strncat(buff, "garnet amulet", ITEMNAME_SIZE ); - break; - case 5: - strncat(buff, "bronze amulet", ITEMNAME_SIZE ); - break; - case 6: - strncat(buff, "brass amulet", ITEMNAME_SIZE ); - break; - case 7: - strncat(buff, "copper amulet", ITEMNAME_SIZE ); - break; - case 8: - strncat(buff, "ruby amulet", ITEMNAME_SIZE ); - break; - case 9: - strncat(buff, "ivory amulet", ITEMNAME_SIZE ); - break; - case 10: - strncat(buff, "bone amulet", ITEMNAME_SIZE ); - break; - case 11: - strncat(buff, "platinum amulet", ITEMNAME_SIZE ); - break; - case 12: - strncat(buff, "jade amulet", ITEMNAME_SIZE ); - break; - case 13: - strncat(buff, "plastic amulet", ITEMNAME_SIZE ); - break; - } - } // end of amulets - break; - - // compacted 15 Apr 2000 {dlb}: - case OBJ_MISCELLANY: - switch (item_typ) - { - case MISC_RUNE_OF_ZOT: - strncat( buff, (it_plus == RUNE_DIS) ? "iron" : - (it_plus == RUNE_GEHENNA) ? "obsidian" : - (it_plus == RUNE_COCYTUS) ? "icy" : - (it_plus == RUNE_TARTARUS) ? "bone" : - (it_plus == RUNE_SLIME_PITS) ? "slimy" : - (it_plus == RUNE_VAULTS) ? "silver" : - (it_plus == RUNE_SNAKE_PIT) ? "serpentine" : - (it_plus == RUNE_ELVEN_HALLS) ? "elven" : - (it_plus == RUNE_TOMB) ? "golden" : - (it_plus == RUNE_SWAMP) ? "decaying" : - - // pandemonium and abyss runes: - (it_plus == RUNE_DEMONIC) ? "demonic" : - (it_plus == RUNE_ABYSSAL) ? "abyssal" : - - // special pandemonium runes: - (it_plus == RUNE_MNOLEG) ? "glowing" : - (it_plus == RUNE_LOM_LOBON) ? "magical" : - (it_plus == RUNE_CEREBOV) ? "fiery" : - (it_plus == RUNE_GLOORX_VLOQ) ? "dark" - : "buggy", - ITEMNAME_SIZE); - - strncat(buff, " ", ITEMNAME_SIZE ); - strncat(buff, "rune", ITEMNAME_SIZE ); - - if (it_quant > 1) - strncat(buff, "s", ITEMNAME_SIZE ); - - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, " of Zot", ITEMNAME_SIZE ); - break; - - case MISC_DECK_OF_POWER: - case MISC_DECK_OF_SUMMONINGS: - case MISC_DECK_OF_TRICKS: - case MISC_DECK_OF_WONDERS: - strncat(buff, "deck of ", ITEMNAME_SIZE ); - strncat(buff, !item_ident( item, ISFLAG_KNOW_TYPE ) ? "cards" : - (item_typ == MISC_DECK_OF_WONDERS) ? "wonders" : - (item_typ == MISC_DECK_OF_SUMMONINGS) ? "summonings" : - (item_typ == MISC_DECK_OF_TRICKS) ? "tricks" : - (item_typ == MISC_DECK_OF_POWER) ? "power" - : "bugginess", - ITEMNAME_SIZE); - break; - - case MISC_CRYSTAL_BALL_OF_ENERGY: - case MISC_CRYSTAL_BALL_OF_FIXATION: - case MISC_CRYSTAL_BALL_OF_SEEING: - strncat(buff, "crystal ball", ITEMNAME_SIZE ); - if (item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat(buff, " of ", ITEMNAME_SIZE ); - strncat(buff, - (item_typ == MISC_CRYSTAL_BALL_OF_SEEING) ? "seeing" : - (item_typ == MISC_CRYSTAL_BALL_OF_ENERGY) ? "energy" : - (item_typ == MISC_CRYSTAL_BALL_OF_FIXATION) ? "fixation" - : "bugginess", - ITEMNAME_SIZE); - } - break; - - case MISC_BOX_OF_BEASTS: - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, "box of beasts", ITEMNAME_SIZE ); - else - strncat(buff, "small ebony casket", ITEMNAME_SIZE ); - break; - - case MISC_EMPTY_EBONY_CASKET: - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, "empty ebony casket", ITEMNAME_SIZE ); - else - strncat(buff, "small ebony casket", ITEMNAME_SIZE ); - break; - - case MISC_AIR_ELEMENTAL_FAN: - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, "air elemental ", ITEMNAME_SIZE ); - strncat(buff, "fan", ITEMNAME_SIZE ); - break; - - case MISC_LAMP_OF_FIRE: - strncat(buff, "lamp", ITEMNAME_SIZE ); - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, " of fire", ITEMNAME_SIZE ); - break; - - case MISC_LANTERN_OF_SHADOWS: - if (!item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, "bone ", ITEMNAME_SIZE ); - strncat(buff, "lantern", ITEMNAME_SIZE ); - - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, " of shadows", ITEMNAME_SIZE ); - break; - - case MISC_HORN_OF_GERYON: - if (!item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, "silver ", ITEMNAME_SIZE ); - strncat(buff, "horn", ITEMNAME_SIZE ); - - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, " of Geryon", ITEMNAME_SIZE ); - break; - - case MISC_DISC_OF_STORMS: - if (!item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, "grey ", ITEMNAME_SIZE ); - strncat(buff, "disc", ITEMNAME_SIZE ); - - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, " of storms", ITEMNAME_SIZE ); - break; - - case MISC_STONE_OF_EARTH_ELEMENTALS: - if (!item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, "nondescript ", ITEMNAME_SIZE ); - strncat(buff, "stone", ITEMNAME_SIZE ); - - if (item_ident( item, ISFLAG_KNOW_TYPE )) - strncat(buff, " of earth elementals", ITEMNAME_SIZE ); - break; - - case MISC_BOTTLED_EFREET: - strncat(buff, (!item_ident( item, ISFLAG_KNOW_TYPE )) - ? "sealed bronze flask" : "bottled efreet", - ITEMNAME_SIZE ); - break; - - case MISC_PORTABLE_ALTAR_OF_NEMELEX: - strncat(buff, "portable altar of Nemelex", ITEMNAME_SIZE ); - break; - - default: - strncat(buff, "buggy miscellaneous item", ITEMNAME_SIZE ); - break; - } - break; - - // compacted 15 Apr 2000 {dlb}: - case OBJ_BOOKS: - if (!item_ident( item, ISFLAG_KNOW_TYPE )) - { - char primary = (item.special / 10); - char secondary = (item.special % 10); - - strncat(buff, (primary == 0) ? "" : - (primary == 1) ? "chunky " : - (primary == 2) ? "thick " : - (primary == 3) ? "thin " : - (primary == 4) ? "wide " : - (primary == 5) ? "glowing " : - (primary == 6) ? "dog-eared " : - (primary == 7) ? "oblong " : - (primary == 8) ? "runed " : - - // these last three were single spaces {dlb} - (primary == 9) ? "" : - (primary == 10) ? "" : (primary == 11) ? "" : "buggily ", - ITEMNAME_SIZE); - - strncat(buff, (secondary == 0) ? "paperback " : - (secondary == 1) ? "hardcover " : - (secondary == 2) ? "leatherbound " : - (secondary == 3) ? "metal-bound " : - (secondary == 4) ? "papyrus " : - // these two were single spaces, too {dlb} - (secondary == 5) ? "" : - (secondary == 6) ? "" : "buggy ", ITEMNAME_SIZE); - - strncat(buff, "book", ITEMNAME_SIZE ); - } - else if (item_typ == BOOK_MANUAL) - { - strncat(buff, "manual of ", ITEMNAME_SIZE ); - strncat(buff, skill_name(it_plus), ITEMNAME_SIZE ); - } - else if (item_typ == BOOK_NECRONOMICON) - strncat(buff, "Necronomicon", ITEMNAME_SIZE ); - else if (item_typ == BOOK_DESTRUCTION) - strncat(buff, "tome of Destruction", ITEMNAME_SIZE ); - else if (item_typ == BOOK_YOUNG_POISONERS) - strncat(buff, "Young Poisoner's Handbook", ITEMNAME_SIZE ); - else if (item_typ == BOOK_BEASTS) - strncat(buff, "Monster Manual", ITEMNAME_SIZE ); - else - { - strncat(buff, "book of ", ITEMNAME_SIZE ); - strncat(buff, (item_typ == BOOK_MINOR_MAGIC_I - || item_typ == BOOK_MINOR_MAGIC_II - || item_typ == BOOK_MINOR_MAGIC_III) ? "Minor Magic" : - (item_typ == BOOK_CONJURATIONS_I - || item_typ == BOOK_CONJURATIONS_II) ? "Conjurations" : - (item_typ == BOOK_FLAMES) ? "Flames" : - (item_typ == BOOK_FROST) ? "Frost" : - (item_typ == BOOK_SUMMONINGS) ? "Summonings" : - (item_typ == BOOK_FIRE) ? "Fire" : - (item_typ == BOOK_ICE) ? "Ice" : - (item_typ == BOOK_SURVEYANCES) ? "Surveyances" : - (item_typ == BOOK_SPATIAL_TRANSLOCATIONS) ? "Spatial Translocations" : - (item_typ == BOOK_ENCHANTMENTS) ? "Enchantments" : - (item_typ == BOOK_TEMPESTS) ? "the Tempests" : - (item_typ == BOOK_DEATH) ? "Death" : - (item_typ == BOOK_HINDERANCE) ? "Hinderance" : - (item_typ == BOOK_CHANGES) ? "Changes" : - (item_typ == BOOK_TRANSFIGURATIONS) ? "Transfigurations" : - (item_typ == BOOK_PRACTICAL_MAGIC) ? "Practical Magic" : - (item_typ == BOOK_WAR_CHANTS) ? "War Chants" : - (item_typ == BOOK_CLOUDS) ? "Clouds" : - (item_typ == BOOK_HEALING) ? "Healing" : - (item_typ == BOOK_NECROMANCY) ? "Necromancy" : - (item_typ == BOOK_CALLINGS) ? "Callings" : - (item_typ == BOOK_CHARMS) ? "Charms" : - (item_typ == BOOK_DEMONOLOGY) ? "Demonology" : - (item_typ == BOOK_AIR) ? "Air" : - (item_typ == BOOK_SKY) ? "the Sky" : - (item_typ == BOOK_DIVINATIONS) ? "Divinations" : - (item_typ == BOOK_WARP) ? "the Warp" : - (item_typ == BOOK_ENVENOMATIONS) ? "Envenomations" : - (item_typ == BOOK_ANNIHILATIONS) ? "Annihilations" : - (item_typ == BOOK_UNLIFE) ? "Unlife" : - (item_typ == BOOK_CONTROL) ? "Control" : - (item_typ == BOOK_MUTATIONS) ? "Morphology" : - (item_typ == BOOK_TUKIMA) ? "Tukima" : - (item_typ == BOOK_GEOMANCY) ? "Geomancy" : - (item_typ == BOOK_EARTH) ? "the Earth" : - (item_typ == BOOK_WIZARDRY) ? "Wizardry" : - (item_typ == BOOK_POWER) ? "Power" : - (item_typ == BOOK_CANTRIPS) ? "Cantrips" : - (item_typ == BOOK_PARTY_TRICKS) ? "Party Tricks" : - (item_typ == BOOK_STALKING) ? "Stalking" - : "Bugginess", - ITEMNAME_SIZE ); - } - break; - - // compacted 15 Apr 2000 {dlb}: - case OBJ_STAVES: - if (!item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat(buff, (item.special == 0) ? "curved" : - (item.special == 1) ? "glowing" : - (item.special == 2) ? "thick" : - (item.special == 3) ? "thin" : - (item.special == 4) ? "long" : - (item.special == 5) ? "twisted" : - (item.special == 6) ? "jeweled" : - (item.special == 7) ? "runed" : - (item.special == 8) ? "smoking" : - (item.special == 9) ? "gnarled" : // was "" {dlb} - (item.special == 10) ? "" : - (item.special == 11) ? "" : - (item.special == 12) ? "" : - (item.special == 13) ? "" : - (item.special == 14) ? "" : - (item.special == 15) ? "" : - (item.special == 16) ? "" : - (item.special == 17) ? "" : - (item.special == 18) ? "" : - (item.special == 19) ? "" : - (item.special == 20) ? "" : - (item.special == 21) ? "" : - (item.special == 22) ? "" : - (item.special == 23) ? "" : - (item.special == 24) ? "" : - (item.special == 25) ? "" : - (item.special == 26) ? "" : - (item.special == 27) ? "" : - (item.special == 28) ? "" : - (item.special == 29) ? "" : "buggy", ITEMNAME_SIZE); - strncat(buff, " ", ITEMNAME_SIZE ); - } - - strncat( buff, (item_is_rod( item ) ? "rod" : "staff"), ITEMNAME_SIZE ); - - if (item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat(buff, " of ", ITEMNAME_SIZE ); - - strncat(buff, (item_typ == STAFF_WIZARDRY) ? "wizardry" : - (item_typ == STAFF_POWER) ? "power" : - (item_typ == STAFF_FIRE) ? "fire" : - (item_typ == STAFF_COLD) ? "cold" : - (item_typ == STAFF_POISON) ? "poison" : - (item_typ == STAFF_ENERGY) ? "energy" : - (item_typ == STAFF_DEATH) ? "death" : - (item_typ == STAFF_CONJURATION) ? "conjuration" : - (item_typ == STAFF_ENCHANTMENT) ? "enchantment" : - (item_typ == STAFF_SMITING) ? "smiting" : - (item_typ == STAFF_STRIKING) ? "striking" : - (item_typ == STAFF_WARDING) ? "warding" : - (item_typ == STAFF_DISCOVERY) ? "discovery" : - (item_typ == STAFF_DEMONOLOGY) ? "demonology" : - (item_typ == STAFF_AIR) ? "air" : - (item_typ == STAFF_EARTH) ? "earth" : - (item_typ == STAFF_SUMMONING - || item_typ == STAFF_SPELL_SUMMONING) ? "summoning" : - (item_typ == STAFF_DESTRUCTION_I - || item_typ == STAFF_DESTRUCTION_II - || item_typ == STAFF_DESTRUCTION_III - || item_typ == STAFF_DESTRUCTION_IV) ? "destruction" : - (item_typ == STAFF_CHANNELING) ? "channeling" - : "bugginess", ITEMNAME_SIZE ); - } - - if (item_is_rod( item ) && item.sub_type != STAFF_STRIKING - && item_ident( item, ISFLAG_KNOW_TYPE )) - { - strncat( buff, " (", ITEMNAME_SIZE ); - itoa( item.plus / ROD_CHARGE_MULT, tmp_quant, 10 ); - strncat( buff, tmp_quant, ITEMNAME_SIZE ); - strncat( buff, "/", ITEMNAME_SIZE ); - itoa( item.plus2 / ROD_CHARGE_MULT, tmp_quant, 10 ); - strncat( buff, tmp_quant, ITEMNAME_SIZE ); - strncat( buff, ")", ITEMNAME_SIZE ); - } - - break; - - - // rearranged 15 Apr 2000 {dlb}: - case OBJ_ORBS: - strncpy( buff, "Orb of ", ITEMNAME_SIZE ); - strncat( buff, (item_typ == ORB_ZOT) ? "Zot" : -/* ****************************************************************** - (item_typ == 1) ? "Zug" : - (item_typ == 2) ? "Xob" : - (item_typ == 3) ? "Ix" : - (item_typ == 4) ? "Xug" : - (item_typ == 5) ? "Zob" : - (item_typ == 6) ? "Ik" : - (item_typ == 7) ? "Grolp" : - (item_typ == 8) ? "fo brO ehT" : - (item_typ == 9) ? "Plob" : - (item_typ == 10) ? "Zuggle-Glob" : - (item_typ == 11) ? "Zin" : - (item_typ == 12) ? "Qexigok" : - (item_typ == 13) ? "Bujuk" : - (item_typ == 14) ? "Uhen Tiquritu" : - (item_typ == 15) ? "Idohoxom Sovuf" : - (item_typ == 16) ? "Voc Vocilicoso" : - (item_typ == 17) ? "Chanuaxydiviha" : - (item_typ == 18) ? "Ihexodox" : - (item_typ == 19) ? "Rynok Pol" : - (item_typ == 20) ? "Nemelex" : - (item_typ == 21) ? "Sif Muna" : - (item_typ == 22) ? "Okawaru" : - (item_typ == 23) ? "Kikubaaqudgha" : -****************************************************************** */ - "Bugginess", ITEMNAME_SIZE ); // change back to "Zot" if source of problems cannot be found {dlb} - break; - - case OBJ_GOLD: - strncat(buff, "gold piece", ITEMNAME_SIZE ); - break; - - // still not implemented, yet: - case OBJ_GEMSTONES: - break; - - // rearranged 15 Apr 2000 {dlb}: - case OBJ_CORPSES: - if (item_typ == CORPSE_BODY && item.special < 100) - strncat(buff, "rotting ", ITEMNAME_SIZE ); - - moname( it_plus, true, DESC_PLAIN, tmp_buff ); - - strncat(buff, tmp_buff, ITEMNAME_SIZE ); - strncat(buff, " ", ITEMNAME_SIZE ); - strncat(buff, (item_typ == CORPSE_BODY) ? "corpse" : - (item_typ == CORPSE_SKELETON) ? "skeleton" : "corpse bug", - ITEMNAME_SIZE ); - break; - - default: - strncat(buff, "!", ITEMNAME_SIZE ); - } // end of switch? - - // Disambiguation - if (!terse && item_ident(item, ISFLAG_KNOW_TYPE)) - { -#define name_append(x) strncat(buff, x, ITEMNAME_SIZE) - switch (item_clas) - { - case OBJ_STAVES: - switch (item_typ) - { - case STAFF_DESTRUCTION_I: - name_append(" [fire]"); - break; - case STAFF_DESTRUCTION_II: - name_append(" [ice]"); - break; - case STAFF_DESTRUCTION_III: - name_append(" [iron,fireball,lightning]"); - break; - case STAFF_DESTRUCTION_IV: - name_append(" [inacc,magma,cold]"); - break; - } - break; - case OBJ_BOOKS: - switch (item_typ) - { - case BOOK_MINOR_MAGIC_I: - name_append(" [flame]"); - break; - case BOOK_MINOR_MAGIC_II: - name_append(" [frost]"); - break; - case BOOK_MINOR_MAGIC_III: - name_append(" [summ]"); - break; - case BOOK_CONJURATIONS_I: - name_append(" [fire]"); - break; - case BOOK_CONJURATIONS_II: - name_append(" [ice]"); - break; - } - } -#undef name_append - } - - // debugging output -- oops, I probably block it above ... dang! {dlb} - if (strlen(buff) < 3) - { - char ugug[20]; - - strncat(buff, "bad item (cl:", ITEMNAME_SIZE ); - itoa(item_clas, ugug, 10); - strncat(buff, ugug, ITEMNAME_SIZE ); - strncat(buff, ",ty:", ITEMNAME_SIZE ); - itoa(item_typ, ugug, 10); - strncat(buff, ugug, ITEMNAME_SIZE ); - strncat(buff, ",pl:", ITEMNAME_SIZE ); - itoa(it_plus, ugug, 10); - strncat(buff, ugug, ITEMNAME_SIZE ); - strncat(buff, ",pl2:", ITEMNAME_SIZE ); - itoa(item_plus2, ugug, 10); - strncat(buff, ugug, ITEMNAME_SIZE ); - strncat(buff, ",sp:", ITEMNAME_SIZE ); - itoa(item.special, ugug, 10); - strncat(buff, ugug, ITEMNAME_SIZE ); - strncat(buff, ",qu:", ITEMNAME_SIZE ); - itoa(it_quant, ugug, 10); - strncat(buff, ugug, ITEMNAME_SIZE ); - strncat(buff, ")", ITEMNAME_SIZE ); - } - - // hackish {dlb} - if (it_quant > 1 - && item_clas != OBJ_MISSILES - && item_clas != OBJ_SCROLLS - && item_clas != OBJ_POTIONS - && item_clas != OBJ_MISCELLANY - && (item_clas != OBJ_FOOD || item_typ != FOOD_CHUNK)) - { - strncat(buff, "s", ITEMNAME_SIZE ); - } - - return 1; -} // end item_name_2() - -void save_id(char identy[4][50]) -{ - int x = 0, jx = 0; - - for (x = 0; x < 4; x++) - { - for (jx = 0; jx < 50; jx++) - { - identy[x][jx] = id[x][jx]; - } - } -} // end save_id() - -void clear_ids(void) -{ - - int i = 0, j = 0; - - for (i = 0; i < 4; i++) - { - for (j = 0; j < 50; j++) - { - id[i][j] = ID_UNKNOWN_TYPE; - } - } - -} // end clear_ids() - - -void set_ident_type( char cla, int ty, char setting, bool force ) -{ - // Don't allow overwriting of known type with tried unless forced. - if (!force - && setting == ID_TRIED_TYPE - && get_ident_type( cla, ty ) == ID_KNOWN_TYPE) - { - return; - } - - switch (cla) - { - case OBJ_WANDS: - id[ IDTYPE_WANDS ][ty] = setting; - break; - - case OBJ_SCROLLS: - id[ IDTYPE_SCROLLS ][ty] = setting; - break; - - case OBJ_JEWELLERY: - id[ IDTYPE_JEWELLERY ][ty] = setting; - break; - - case OBJ_POTIONS: - id[ IDTYPE_POTIONS ][ty] = setting; - break; - - default: - break; - } -} // end set_ident_type() - -char get_ident_type(char cla, int ty) -{ - switch (cla) - { - case OBJ_WANDS: - return id[ IDTYPE_WANDS ][ty]; - - case OBJ_SCROLLS: - return id[ IDTYPE_SCROLLS ][ty]; - - case OBJ_JEWELLERY: - return id[ IDTYPE_JEWELLERY ][ty]; - - case OBJ_POTIONS: - return id[ IDTYPE_POTIONS ][ty]; - - default: - return (ID_UNKNOWN_TYPE); - } -} // end get_ident_type() - -unsigned char check_item_knowledge(void) -{ - char st_pass[ITEMNAME_SIZE] = ""; - int i, j; - char lines = 0; - unsigned char anything = 0; - int ft = 0; - int max = 0; - int yps = 0; - int inv_count = 0; - unsigned char ki = 0; - - const int num_lines = get_number_of_lines(); - -#ifdef DOS_TERM - char buffer[2400]; - - gettext(35, 1, 80, 25, buffer); -#endif - -#ifdef DOS_TERM - window(35, 1, 80, 25); -#endif - - clrscr(); - - for (i = 0; i < 4; i++) - { - for (j = 0; j < 30; j++) - { - if (id[i][j] == ID_KNOWN_TYPE) - inv_count++; - } - } - - if (inv_count == 0) - { - cprintf("You don't recognise anything yet!"); - if (getch() == 0) - getch(); - goto putty; - } - - textcolor(BLUE); - cprintf(" You recognise:"); - textcolor(LIGHTGREY); - lines++; - - for (i = 0; i < 4; i++) - { - switch (i) - { - case IDTYPE_WANDS: - ft = OBJ_WANDS; - max = NUM_WANDS; - break; - case IDTYPE_SCROLLS: - ft = OBJ_SCROLLS; - max = NUM_SCROLLS; - break; - case IDTYPE_JEWELLERY: - ft = OBJ_JEWELLERY; - max = NUM_JEWELLERY; - break; - case IDTYPE_POTIONS: - ft = OBJ_POTIONS; - max = NUM_POTIONS; - break; - } - - for (j = 0; j < max; j++) - { - if (lines > num_lines - 2 && inv_count > 0) - { - gotoxy(1, num_lines); - cprintf("-more-"); - - ki = getch(); - - if (ki == ESCAPE) - { -#ifdef DOS_TERM - puttext(35, 1, 80, 25, buffer); -#endif - return ESCAPE; - } - if (ki >= 'A' && ki <= 'z') - { -#ifdef DOS_TERM - puttext(35, 1, 80, 25, buffer); -#endif - return ki; - } - - if (ki == 0) - ki = getch(); - - lines = 0; - clrscr(); - gotoxy(1, 1); - anything = 0; - } - - int ident_level = get_ident_type( ft, j ); - - if (ident_level == ID_KNOWN_TYPE) - { - anything++; - - if (lines > 0) - cprintf(EOL); - lines++; - cprintf(" "); - - yps = wherey(); - - // item_name now requires a "real" item, so we'll create a tmp - item_def tmp;// = { ft, j, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; - tmp.base_type = ft; - tmp.sub_type = j; - tmp.colour = 1; - - item_name( tmp, DESC_PLAIN, st_pass ); - - cprintf(st_pass); - - inv_count--; - - if (wherey() != yps) - lines++; - } - } // end of j loop - } - - if (anything > 0) - { - ki = getch(); - //ki = getch(); - //ki = anything; - - if (ki >= 'A' && ki <= 'z') - { -#ifdef DOS_TERM - puttext(35, 1, 80, 25, buffer); -#endif - return ki; - } - - if (ki == 0) - ki = getch(); -#ifdef DOS_TERM - puttext(35, 1, 80, 25, buffer); -#endif - return anything; - } - - putty: -#ifdef DOS_TERM - puttext(35, 1, 80, 25, buffer); -#endif - - return ki; -} // end check_item_knowledge() - - -// Used for: Pandemonium demonlords, shopkeepers, scrolls, random artefacts -int make_name( unsigned long seed, bool all_cap, char buff[ ITEMNAME_SIZE ] ) -{ - char name[ITEMNAME_SIZE]; - int numb[17]; - - int i = 0; - bool want_vowel = false; - bool has_space = false; - - for (i = 0; i < ITEMNAME_SIZE; i++) - name[i] = '\0'; - - const int var1 = (seed & 0xFF); - const int var2 = ((seed >> 8) & 0xFF); - const int var3 = ((seed >> 16) & 0xFF); - const int var4 = ((seed >> 24) & 0xFF); - - numb[0] = 373 * var1 + 409 * var2 + 281 * var3; - numb[1] = 163 * var4 + 277 * var2 + 317 * var3; - numb[2] = 257 * var1 + 179 * var4 + 83 * var3; - numb[3] = 61 * var1 + 229 * var2 + 241 * var4; - numb[4] = 79 * var1 + 263 * var2 + 149 * var3; - numb[5] = 233 * var4 + 383 * var2 + 311 * var3; - numb[6] = 199 * var1 + 211 * var4 + 103 * var3; - numb[7] = 139 * var1 + 109 * var2 + 349 * var4; - numb[8] = 43 * var1 + 389 * var2 + 359 * var3; - numb[9] = 367 * var4 + 101 * var2 + 251 * var3; - numb[10] = 293 * var1 + 59 * var4 + 151 * var3; - numb[11] = 331 * var1 + 107 * var2 + 307 * var4; - numb[12] = 73 * var1 + 157 * var2 + 347 * var3; - numb[13] = 379 * var4 + 353 * var2 + 227 * var3; - numb[14] = 181 * var1 + 173 * var4 + 193 * var3; - numb[15] = 131 * var1 + 167 * var2 + 53 * var4; - numb[16] = 313 * var1 + 127 * var2 + 401 * var3 + 337 * var4; - - int len = 3 + numb[0] % 5 + ((numb[1] % 5 == 0) ? numb[2] % 6 : 1); - - if (all_cap) - len += 6; - - int j = numb[3] % 17; - const int k = numb[4] % 17; - int count = 0; - - for (i = 0; i < len; i++) - { - j = (j + 1) % 17; - if (j == 0) - { - count++; - if (count > 9) - break; - } - - if (!has_space && i > 5 && i < len - 4 - && (numb[(k + 10 * j) % 17] % 5) != 3) - { - want_vowel = true; - name[i] = ' '; - } - else if (i > 0 - && (want_vowel - || (i > 1 - && is_random_name_vowel( name[i - 1] ) - && !is_random_name_vowel( name[i - 2] ) - && (numb[(k + 4 * j) % 17] % 5) <= 1 ))) - { - want_vowel = true; - name[i] = retvow( numb[(k + 7 * j) % 17] ); - - if (is_random_name_space( name[i] )) - { - if (i == 0) - { - want_vowel = false; - name[i] = retlet( numb[(k + 14 * j) % 17] ); - } - else if (len < 7 - || i <= 2 || i >= len - 3 - || is_random_name_space( name[i - 1] ) - || (i > 1 && is_random_name_space( name[i - 2] )) - || (i > 2 - && !is_random_name_vowel( name[i - 1] ) - && !is_random_name_vowel( name[i - 2] ))) - { - i--; - continue; - } - } - else if (i > 1 - && name[i] == name[i - 1] - && (name[i] == 'y' || name[i] == 'i' - || (numb[(k + 12 * j) % 17] % 5) <= 1)) - { - i--; - continue; - } - } - else - { - if ((len > 3 || i != 0) - && (numb[(k + 13 * j) % 17] % 7) <= 1 - && (i < len - 2 || (i > 0 && !is_random_name_space(name[i - 1])))) - { - const bool beg = ((i < 1) || is_random_name_space(name[i - 1])); - const bool end = (i >= len - 2); - - const int first = (beg ? 0 : (end ? 14 : 0)); - const int last = (beg ? 27 : (end ? 56 : 67)); - - const int num = last - first; - - i++; - - switch (numb[(k + 11 * j) % 17] % num + first) - { - // start, middle - case 0: strcat(name, "kl"); break; - case 1: strcat(name, "gr"); break; - case 2: strcat(name, "cl"); break; - case 3: strcat(name, "cr"); break; - case 4: strcat(name, "fr"); break; - case 5: strcat(name, "pr"); break; - case 6: strcat(name, "tr"); break; - case 7: strcat(name, "tw"); break; - case 8: strcat(name, "br"); break; - case 9: strcat(name, "pl"); break; - case 10: strcat(name, "bl"); break; - case 11: strcat(name, "str"); i++; len++; break; - case 12: strcat(name, "shr"); i++; len++; break; - case 13: strcat(name, "thr"); i++; len++; break; - // start, middle, end - case 14: strcat(name, "sm"); break; - case 15: strcat(name, "sh"); break; - case 16: strcat(name, "ch"); break; - case 17: strcat(name, "th"); break; - case 18: strcat(name, "ph"); break; - case 19: strcat(name, "pn"); break; - case 20: strcat(name, "kh"); break; - case 21: strcat(name, "gh"); break; - case 22: strcat(name, "mn"); break; - case 23: strcat(name, "ps"); break; - case 24: strcat(name, "st"); break; - case 25: strcat(name, "sk"); break; - case 26: strcat(name, "sch"); i++; len++; break; - // middle, end - case 27: strcat(name, "ts"); break; - case 28: strcat(name, "cs"); break; - case 29: strcat(name, "xt"); break; - case 30: strcat(name, "nt"); break; - case 31: strcat(name, "ll"); break; - case 32: strcat(name, "rr"); break; - case 33: strcat(name, "ss"); break; - case 34: strcat(name, "wk"); break; - case 35: strcat(name, "wn"); break; - case 36: strcat(name, "ng"); break; - case 37: strcat(name, "cw"); break; - case 38: strcat(name, "mp"); break; - case 39: strcat(name, "ck"); break; - case 40: strcat(name, "nk"); break; - case 41: strcat(name, "dd"); break; - case 42: strcat(name, "tt"); break; - case 43: strcat(name, "bb"); break; - case 44: strcat(name, "pp"); break; - case 45: strcat(name, "nn"); break; - case 46: strcat(name, "mm"); break; - case 47: strcat(name, "kk"); break; - case 48: strcat(name, "gg"); break; - case 49: strcat(name, "ff"); break; - case 50: strcat(name, "pt"); break; - case 51: strcat(name, "tz"); break; - case 52: strcat(name, "dgh"); i++; len++; break; - case 53: strcat(name, "rgh"); i++; len++; break; - case 54: strcat(name, "rph"); i++; len++; break; - case 55: strcat(name, "rch"); i++; len++; break; - // middle only - case 56: strcat(name, "cz"); break; - case 57: strcat(name, "xk"); break; - case 58: strcat(name, "zx"); break; - case 59: strcat(name, "xz"); break; - case 60: strcat(name, "cv"); break; - case 61: strcat(name, "vv"); break; - case 62: strcat(name, "nl"); break; - case 63: strcat(name, "rh"); break; - case 64: strcat(name, "dw"); break; - case 65: strcat(name, "nw"); break; - case 66: strcat(name, "khl"); i++; len++; break; - default: - i--; - break; - } - } - else - { - if (i == 0) - { - name[i] = 'a' + (numb[(k + 8 * j) % 17] % 26); - want_vowel = is_random_name_vowel( name[i] ); - } - else - { - name[i] = retlet( numb[(k + 3 * j) % 17] ); - } - } - } - - if (name[i] == '\0') - { - i--; - continue; - } - - if (want_vowel && !is_random_name_vowel( name[i] ) - || (!want_vowel && is_random_name_vowel( name[i] ))) - { - i--; - continue; - } - - if (is_random_name_space( name[i] )) - has_space = true; - - if (!is_random_name_vowel( name[i] )) - want_vowel = true; - else - want_vowel = false; - } - - // catch break and try to give a final letter - if (i > 0 - && !is_random_name_space( name[i - 1] ) - && name[i - 1] != 'y' - && is_random_name_vowel( name[i - 1] ) - && (count > 9 || (i < 8 && numb[16] % 3))) - { - name[i] = retlet( numb[j] ); - } - - len = strlen( name ); - - if (len) - { - for (i = len - 1; i > 0; i--) - { - if (!isspace( name[i] )) - break; - else - { - name[i] = '\0'; - len--; - } - } - } - - if (len >= 3) - strncpy( buff, name, ITEMNAME_SIZE ); - else - { - strncpy( buff, "plog", ITEMNAME_SIZE ); - len = 4; - } - - buff[ ITEMNAME_SIZE - 1 ] = '\0'; - - for (i = 0; i < len; i++) - { - if (all_cap || i == 0 || buff[i - 1] == ' ') - buff[i] = toupper( buff[i] ); - } - - return (len); -} // end make_name() - -bool is_random_name_space(char let) -{ - return (let == ' '); -} - -static bool is_random_name_vowel( char let ) -{ - return (let == 'a' || let == 'e' || let == 'i' || let == 'o' || let == 'u' - || let == 'y' || let == ' '); -} // end is_random_name_vowel() - -static char retvow( int sed ) -{ - static const char vowels[] = "aeiouaeiouaeiouy "; - return (vowels[ sed % (sizeof(vowels) - 1) ]); -} // end retvow() - -static char retlet( int sed ) -{ - static const char consonants[] = "bcdfghjklmnpqrstvwxzcdfghlmnrstlmnrst"; - return (consonants[ sed % (sizeof(consonants) - 1) ]); -} |