summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/itemname.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/itemname.cc')
-rw-r--r--crawl-ref/source/itemname.cc1413
1 files changed, 275 insertions, 1138 deletions
diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc
index 9d9955cb51..b1e31a277e 100644
--- a/crawl-ref/source/itemname.cc
+++ b/crawl-ref/source/itemname.cc
@@ -28,6 +28,7 @@
#include "externs.h"
#include "invent.h"
+#include "itemprop.h"
#include "macro.h"
#include "mon-util.h"
#include "randart.h"
@@ -37,16 +38,14 @@
#include "view.h"
-char id[4][50];
-int prop[4][50][3];
-FixedArray < int, 20, 50 > mss;
+char id[NUM_IDTYPE][MAX_SUBTYPES];
-static bool is_random_name_vowel(unsigned char let);
+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 );
-char reduce(unsigned char reducee);
-char retbit(char sed);
-char retvow(char sed);
+static char retvow(int sed);
+static char retlet(int sed );
bool is_vowel( const char chr )
{
@@ -55,42 +54,6 @@ bool is_vowel( const char chr )
return (low == 'a' || low == 'e' || low == 'i' || low == 'o' || low == 'u');
}
-// Some convenient functions to hide the bit operations and create
-// an interface layer between the code and the data in case this
-// gets changed again. -- bwr
-bool item_cursed( const item_def &item )
-{
- return (item.flags & ISFLAG_CURSED);
-}
-
-bool item_uncursed( const item_def &item )
-{
- return !(item.flags & ISFLAG_CURSED);
-}
-
-bool item_known_cursed( const item_def &item )
-{
- return ((item.flags & ISFLAG_KNOW_CURSE) && (item.flags & ISFLAG_CURSED));
-}
-
-bool item_known_uncursed( const item_def &item )
-{
- return ((item.flags & ISFLAG_KNOW_CURSE) && !(item.flags & ISFLAG_CURSED));
-}
-
-#if 0
-// currently unused
-bool fully_identified( const item_def &item )
-{
- return ((item.flags & ISFLAG_IDENT_MASK) == ISFLAG_IDENT_MASK);
-}
-#endif
-
-bool item_ident( const item_def &item, unsigned long flags )
-{
- return (item.flags & flags);
-}
-
bool item_type_known( const item_def &item )
{
return item_ident(item, ISFLAG_KNOW_TYPE)
@@ -98,266 +61,6 @@ bool item_type_known( const item_def &item )
&& id[IDTYPE_JEWELLERY][item.sub_type] == ID_KNOWN_TYPE);
}
-bool item_not_ident( const item_def &item, unsigned long flags )
-{
- return ( !(item.flags & flags) );
-}
-
-void do_curse_item( item_def &item )
-{
- item.flags |= ISFLAG_CURSED;
-}
-
-void do_uncurse_item( item_def &item )
-{
- item.flags &= (~ISFLAG_CURSED);
-}
-
-void set_ident_flags( item_def &item, unsigned long flags )
-{
- item.flags |= flags;
-}
-
-void unset_ident_flags( item_def &item, unsigned long flags )
-{
- item.flags &= (~flags);
-}
-
-// These six functions might seem silly, but they provide a nice layer
-// for later changes to these systems. -- bwr
-unsigned long get_equip_race( const item_def &item )
-{
- return (item.flags & ISFLAG_RACIAL_MASK);
-}
-
-unsigned long get_equip_desc( const item_def &item )
-{
- return (item.flags & ISFLAG_COSMETIC_MASK);
-}
-
-bool cmp_equip_race( const item_def &item, unsigned long val )
-{
- return (get_equip_race( item ) == val);
-}
-
-bool cmp_equip_desc( const item_def &item, unsigned long val )
-{
- return (get_equip_desc( item ) == val);
-}
-
-void set_equip_race( item_def &item, unsigned long flags )
-{
- ASSERT( (flags & ~ISFLAG_RACIAL_MASK) == 0 );
-
- // first check for base-sub pairs that can't ever have racial types
- switch (item.base_type)
- {
- case OBJ_WEAPONS:
- if (item.sub_type == WPN_GIANT_CLUB
- || item.sub_type == WPN_GIANT_SPIKED_CLUB
- || item.sub_type == WPN_KATANA
- || item.sub_type == WPN_SLING
- || item.sub_type == WPN_KNIFE
- || item.sub_type == WPN_QUARTERSTAFF
- || item.sub_type == WPN_DEMON_BLADE
- || item.sub_type == WPN_DEMON_WHIP
- || item.sub_type == WPN_DEMON_TRIDENT)
- {
- return;
- }
- break;
-
- case OBJ_ARMOUR:
- if (item.sub_type >= ARM_DRAGON_HIDE)
- {
- return;
- }
- break;
-
- case OBJ_MISSILES:
- if (item.sub_type == MI_STONE || item.sub_type == MI_LARGE_ROCK)
- {
- return;
- }
- break;
-
- default:
- return;
- }
-
- // check that item is appropriate for racial type
- switch (flags)
- {
- case ISFLAG_ELVEN:
- if (item.base_type == OBJ_ARMOUR
- && (item.sub_type == ARM_SPLINT_MAIL
- || item.sub_type == ARM_BANDED_MAIL
- || item.sub_type == ARM_PLATE_MAIL))
- {
- return;
- }
- break;
-
- case ISFLAG_DWARVEN:
- if (item.base_type == OBJ_ARMOUR
- && (item.sub_type == ARM_ROBE
- || item.sub_type == ARM_LEATHER_ARMOUR))
- {
- return;
- }
- break;
-
- case ISFLAG_ORCISH:
- default:
- break;
- }
-
- item.flags &= ~ISFLAG_RACIAL_MASK; // delete previous
- item.flags |= flags;
-}
-
-void set_equip_desc( item_def &item, unsigned long flags )
-{
- ASSERT( (flags & ~ISFLAG_COSMETIC_MASK) == 0 );
-
- item.flags &= ~ISFLAG_COSMETIC_MASK; // delete previous
- item.flags |= flags;
-}
-
-short get_helmet_type( const item_def &item )
-{
- ASSERT( item.base_type == OBJ_ARMOUR && item.sub_type == ARM_HELMET );
-
- return (item.plus2 & THELM_TYPE_MASK);
-}
-
-short get_helmet_desc( const item_def &item )
-{
- ASSERT( item.base_type == OBJ_ARMOUR && item.sub_type == ARM_HELMET );
-
- return (item.plus2 & THELM_DESC_MASK);
-}
-
-void set_helmet_type( item_def &item, short type )
-{
- ASSERT( (type & ~THELM_TYPE_MASK) == 0 );
- ASSERT( item.base_type == OBJ_ARMOUR && item.sub_type == ARM_HELMET );
-
- item.plus2 &= ~THELM_TYPE_MASK;
- item.plus2 |= type;
-}
-
-void set_helmet_desc( item_def &item, short type )
-{
- ASSERT( (type & ~THELM_DESC_MASK) == 0 );
- ASSERT( item.base_type == OBJ_ARMOUR && item.sub_type == ARM_HELMET );
-
- item.plus2 &= ~THELM_DESC_MASK;
- item.plus2 |= type;
-}
-
-void set_helmet_random_desc( item_def &item )
-{
- ASSERT( item.base_type == OBJ_ARMOUR && item.sub_type == ARM_HELMET );
-
- item.plus2 &= ~THELM_DESC_MASK;
- item.plus2 |= (random2(8) << 8);
-}
-
-bool cmp_helmet_type( const item_def &item, short val )
-{
- ASSERT( item.base_type == OBJ_ARMOUR && item.sub_type == ARM_HELMET );
-
- return (get_helmet_type( item ) == val);
-}
-
-bool cmp_helmet_desc( const item_def &item, short val )
-{
- ASSERT( item.base_type == OBJ_ARMOUR && item.sub_type == ARM_HELMET );
-
- return (get_helmet_desc( item ) == val);
-}
-
-bool set_item_ego_type( item_def &item, int item_type, int ego_type )
-{
- if (item.base_type == item_type
- && !is_random_artefact( item )
- && !is_fixed_artefact( item ))
- {
- item.special = ego_type;
- return (true);
- }
-
- return (false);
-}
-
-int get_weapon_brand( const item_def &item )
-{
- // Weapon ego types are "brands", so we do the randart lookup here.
-
- // Staves "brands" handled specially
- if (item.base_type != OBJ_WEAPONS)
- return (SPWPN_NORMAL);
-
- if (is_fixed_artefact( item ))
- {
- switch (item.special)
- {
- case SPWPN_SWORD_OF_CEREBOV:
- return (SPWPN_FLAMING);
-
- case SPWPN_STAFF_OF_OLGREB:
- return (SPWPN_VENOM);
-
- case SPWPN_VAMPIRES_TOOTH:
- return (SPWPN_VAMPIRICISM);
-
- default:
- return (SPWPN_NORMAL);
- }
- }
- else if (is_random_artefact( item ))
- {
- return (randart_wpn_property( item, RAP_BRAND ));
- }
-
- return (item.special);
-}
-
-int get_ammo_brand( const item_def &item )
-{
- // no artefact arrows yet -- bwr
- if (item.base_type != OBJ_MISSILES || is_random_artefact( item ))
- return (SPMSL_NORMAL);
-
- return (item.special);
-}
-
-int get_armour_ego_type( const item_def &item )
-{
- // artefact armours have no ego type, must look up powers separately
- if (item.base_type != OBJ_ARMOUR
- || (is_random_artefact( item ) && !is_unrandom_artefact( item )))
- {
- return (SPARM_NORMAL);
- }
-
- return (item.special);
-}
-
-bool item_is_rod( const item_def &item )
-{
- return (item.base_type == OBJ_STAVES
- && item.sub_type >= STAFF_SMITING && item.sub_type < STAFF_AIR);
-}
-
-bool item_is_staff( const item_def &item )
-{
- // Isn't De Morgan's law wonderful. -- bwr
- return (item.base_type == OBJ_STAVES
- && (item.sub_type < STAFF_SMITING || item.sub_type >= STAFF_AIR));
-}
-
// 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 )
@@ -598,7 +301,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
if (item_cursed( item ))
strncat(buff, "cursed ", ITEMNAME_SIZE );
else if (Options.show_uncursed
- && item_not_ident( item, ISFLAG_KNOW_PLUSES ))
+ && !item_ident( item, ISFLAG_KNOW_PLUSES ))
{
strncat(buff, "uncursed ", ITEMNAME_SIZE );
}
@@ -687,7 +390,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
// 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_not_ident( item, ISFLAG_KNOW_PLUSES ) && !terse)
+ if (!item_ident( item, ISFLAG_KNOW_PLUSES ) && !terse)
{
switch (get_equip_desc( item ))
{
@@ -760,7 +463,14 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
strncat(buff, (terse) ? " (speed)" : " of speed", ITEMNAME_SIZE );
break;
case SPWPN_VORPAL:
- switch (damage_type(item_clas, item_typ))
+ 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 );
@@ -853,8 +563,8 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
(item_typ == MI_BOLT) ? "bolt" :
(item_typ == MI_DART) ? "dart" :
(item_typ == MI_NEEDLE) ? "needle" :
- (item_typ == MI_EGGPLANT) ? "eggplant" :
- (item_typ == MI_LARGE_ROCK) ? "large rock" : "", ITEMNAME_SIZE);
+ (item_typ == MI_LARGE_ROCK) ? "large rock" :
+ "hysterical raisin", ITEMNAME_SIZE);
// this should probably be "" {dlb}
if (it_quant > 1)
@@ -879,7 +589,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
if (item_cursed( item ))
strncat(buff, "cursed ", ITEMNAME_SIZE );
else if (Options.show_uncursed
- && item_not_ident( item, ISFLAG_KNOW_PLUSES ))
+ && !item_ident( item, ISFLAG_KNOW_PLUSES ))
{
strncat(buff, "uncursed ", ITEMNAME_SIZE );
}
@@ -896,8 +606,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
strncat(buff, " ", ITEMNAME_SIZE );
}
- if (item_typ == ARM_GLOVES
- || (item_typ == ARM_BOOTS && item_plus2 == TBOOT_BOOTS))
+ if (item_typ == ARM_GLOVES || item_typ == ARM_BOOTS)
{
strncat( buff, "pair of ", ITEMNAME_SIZE );
}
@@ -911,7 +620,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
// 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_not_ident( item, ISFLAG_KNOW_PLUSES ) && !terse)
+ if (!item_ident( item, ISFLAG_KNOW_PLUSES ) && !terse)
{
switch (get_equip_desc( item ))
{
@@ -1316,7 +1025,11 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
strncat(buff, "labeled ", ITEMNAME_SIZE );
char buff3[ ITEMNAME_SIZE ];
- make_name( item.special, it_plus, item_clas, 2, buff3 );
+ 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)
@@ -1336,7 +1049,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
if (item_cursed( item ))
strncat(buff, "cursed ", ITEMNAME_SIZE );
else if (Options.show_uncursed
- && item_not_ident( item, ISFLAG_KNOW_PLUSES ))
+ && !item_ident( item, ISFLAG_KNOW_PLUSES ))
{
strncat(buff, "uncursed ", ITEMNAME_SIZE );
}
@@ -1728,7 +1441,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
case MISC_DECK_OF_TRICKS:
case MISC_DECK_OF_WONDERS:
strncat(buff, "deck of ", ITEMNAME_SIZE );
- strncat(buff, item_not_ident( item, ISFLAG_KNOW_TYPE ) ? "cards" :
+ 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" :
@@ -1780,7 +1493,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
break;
case MISC_LANTERN_OF_SHADOWS:
- if (item_not_ident( item, ISFLAG_KNOW_TYPE ))
+ if (!item_ident( item, ISFLAG_KNOW_TYPE ))
strncat(buff, "bone ", ITEMNAME_SIZE );
strncat(buff, "lantern", ITEMNAME_SIZE );
@@ -1789,7 +1502,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
break;
case MISC_HORN_OF_GERYON:
- if (item_not_ident( item, ISFLAG_KNOW_TYPE ))
+ if (!item_ident( item, ISFLAG_KNOW_TYPE ))
strncat(buff, "silver ", ITEMNAME_SIZE );
strncat(buff, "horn", ITEMNAME_SIZE );
@@ -1798,7 +1511,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
break;
case MISC_DISC_OF_STORMS:
- if (item_not_ident( item, ISFLAG_KNOW_TYPE ))
+ if (!item_ident( item, ISFLAG_KNOW_TYPE ))
strncat(buff, "grey ", ITEMNAME_SIZE );
strncat(buff, "disc", ITEMNAME_SIZE );
@@ -1807,7 +1520,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
break;
case MISC_STONE_OF_EARTH_ELEMENTALS:
- if (item_not_ident( item, ISFLAG_KNOW_TYPE ))
+ if (!item_ident( item, ISFLAG_KNOW_TYPE ))
strncat(buff, "nondescript ", ITEMNAME_SIZE );
strncat(buff, "stone", ITEMNAME_SIZE );
@@ -1816,7 +1529,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
break;
case MISC_BOTTLED_EFREET:
- strncat(buff, (item_not_ident( item, ISFLAG_KNOW_TYPE ))
+ strncat(buff, (!item_ident( item, ISFLAG_KNOW_TYPE ))
? "sealed bronze flask" : "bottled efreet",
ITEMNAME_SIZE );
break;
@@ -1833,7 +1546,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
// compacted 15 Apr 2000 {dlb}:
case OBJ_BOOKS:
- if (item_not_ident( item, ISFLAG_KNOW_TYPE ))
+ if (!item_ident( item, ISFLAG_KNOW_TYPE ))
{
char primary = (item.special / 10);
char secondary = (item.special % 10);
@@ -1930,7 +1643,7 @@ static char item_name_2( const item_def &item, char buff[ITEMNAME_SIZE],
// compacted 15 Apr 2000 {dlb}:
case OBJ_STAVES:
- if (item_not_ident( item, ISFLAG_KNOW_TYPE ))
+ if (!item_ident( item, ISFLAG_KNOW_TYPE ))
{
strncat(buff, (item.special == 0) ? "curved" :
(item.special == 1) ? "glowing" :
@@ -2239,516 +1952,6 @@ char get_ident_type(char cla, int ty)
}
} // end get_ident_type()
-int property( const item_def &item, int prop_type )
-{
- switch (item.base_type)
- {
- case OBJ_ARMOUR:
- case OBJ_WEAPONS:
- case OBJ_MISSILES:
- return (prop[ item.base_type ][ item.sub_type ][ prop_type ]);
-
- case OBJ_STAVES:
- if (item_is_staff( item ))
- return (prop[ OBJ_WEAPONS ][ WPN_QUARTERSTAFF ][ prop_type ]);
- else if (prop_type == PWPN_SPEED) // item is rod
- return (10); // extra protection against speed 0
- else
- return (0);
-
- default:
- return (0);
- }
-}
-
-int mass_item( const item_def &item )
-{
- int unit_mass = 0;
-
- if (item.base_type == OBJ_GOLD)
- {
- unit_mass = 0;
- }
- else if (item.base_type == OBJ_CORPSES)
- {
- unit_mass = mons_weight( item.plus );
-
- if (item.sub_type == CORPSE_SKELETON)
- unit_mass /= 2;
- }
- else
- {
- unit_mass = mss[ item.base_type ][ item.sub_type ];
- }
-
- return (unit_mass > 0 ? unit_mass : 0);
-}
-
-void init_properties(void)
-{
- prop[OBJ_ARMOUR][ARM_ROBE][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_ROBE][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_ROBE] = 60;
-
- prop[OBJ_ARMOUR][ARM_LEATHER_ARMOUR][PARM_AC] = 2;
- prop[OBJ_ARMOUR][ARM_LEATHER_ARMOUR][PARM_EVASION] = -1;
- mss[OBJ_ARMOUR][ARM_LEATHER_ARMOUR] = 150;
-
- prop[OBJ_ARMOUR][ARM_RING_MAIL][PARM_AC] = 4;
- prop[OBJ_ARMOUR][ARM_RING_MAIL][PARM_EVASION] = -2;
- mss[OBJ_ARMOUR][ARM_RING_MAIL] = 300;
-
- prop[OBJ_ARMOUR][ARM_SCALE_MAIL][PARM_AC] = 5;
- prop[OBJ_ARMOUR][ARM_SCALE_MAIL][PARM_EVASION] = -2;
- mss[OBJ_ARMOUR][ARM_SCALE_MAIL] = 400;
-
- prop[OBJ_ARMOUR][ARM_CHAIN_MAIL][PARM_AC] = 6;
- prop[OBJ_ARMOUR][ARM_CHAIN_MAIL][PARM_EVASION] = -3;
- mss[OBJ_ARMOUR][ARM_CHAIN_MAIL] = 450;
-
- prop[OBJ_ARMOUR][ARM_SPLINT_MAIL][PARM_AC] = 8;
- prop[OBJ_ARMOUR][ARM_SPLINT_MAIL][PARM_EVASION] = -5;
- mss[OBJ_ARMOUR][ARM_SPLINT_MAIL] = 550;
-
- prop[OBJ_ARMOUR][ARM_BANDED_MAIL][PARM_AC] = 7;
- prop[OBJ_ARMOUR][ARM_BANDED_MAIL][PARM_EVASION] = -4;
- mss[OBJ_ARMOUR][ARM_BANDED_MAIL] = 500;
-
- prop[OBJ_ARMOUR][ARM_PLATE_MAIL][PARM_AC] = 9;
- prop[OBJ_ARMOUR][ARM_PLATE_MAIL][PARM_EVASION] = -5;
- mss[OBJ_ARMOUR][ARM_PLATE_MAIL] = 650;
-
- prop[OBJ_ARMOUR][ARM_DRAGON_HIDE][PARM_AC] = 2;
- prop[OBJ_ARMOUR][ARM_DRAGON_HIDE][PARM_EVASION] = -2;
- mss[OBJ_ARMOUR][ARM_DRAGON_HIDE] = 220;
-
- prop[OBJ_ARMOUR][ARM_TROLL_HIDE][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_TROLL_HIDE][PARM_EVASION] = -1;
- mss[OBJ_ARMOUR][ARM_TROLL_HIDE] = 180;
-
- prop[OBJ_ARMOUR][ARM_CRYSTAL_PLATE_MAIL][PARM_AC] = 16;
- prop[OBJ_ARMOUR][ARM_CRYSTAL_PLATE_MAIL][PARM_EVASION] = -8;
- mss[OBJ_ARMOUR][ARM_CRYSTAL_PLATE_MAIL] = 1200;
-
- prop[OBJ_ARMOUR][ARM_DRAGON_ARMOUR][PARM_AC] = 8;
- prop[OBJ_ARMOUR][ARM_DRAGON_ARMOUR][PARM_EVASION] = -2;
- mss[OBJ_ARMOUR][ARM_DRAGON_ARMOUR] = 220;
-
- prop[OBJ_ARMOUR][ARM_TROLL_LEATHER_ARMOUR][PARM_AC] = 3;
- prop[OBJ_ARMOUR][ARM_TROLL_LEATHER_ARMOUR][PARM_EVASION] = -1;
- mss[OBJ_ARMOUR][ARM_TROLL_LEATHER_ARMOUR] = 180;
-
- prop[OBJ_ARMOUR][ARM_ICE_DRAGON_HIDE][PARM_AC] = 2;
- prop[OBJ_ARMOUR][ARM_ICE_DRAGON_HIDE][PARM_EVASION] = -2;
- mss[OBJ_ARMOUR][ARM_ICE_DRAGON_HIDE] = 220;
-
- prop[OBJ_ARMOUR][ARM_ICE_DRAGON_ARMOUR][PARM_AC] = 9;
- prop[OBJ_ARMOUR][ARM_ICE_DRAGON_ARMOUR][PARM_EVASION] = -2;
- mss[OBJ_ARMOUR][ARM_ICE_DRAGON_ARMOUR] = 220;
-
- prop[OBJ_ARMOUR][ARM_STEAM_DRAGON_HIDE][PARM_AC] = 0;
- prop[OBJ_ARMOUR][ARM_STEAM_DRAGON_HIDE][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_STEAM_DRAGON_HIDE] = 120;
-
- prop[OBJ_ARMOUR][ARM_STEAM_DRAGON_ARMOUR][PARM_AC] = 3;
- prop[OBJ_ARMOUR][ARM_STEAM_DRAGON_ARMOUR][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_STEAM_DRAGON_ARMOUR] = 120;
-
- prop[OBJ_ARMOUR][ARM_MOTTLED_DRAGON_HIDE][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_MOTTLED_DRAGON_HIDE][PARM_EVASION] = -1;
- mss[OBJ_ARMOUR][ARM_MOTTLED_DRAGON_HIDE] = 150;
-
- prop[OBJ_ARMOUR][ARM_MOTTLED_DRAGON_ARMOUR][PARM_AC] = 5;
- prop[OBJ_ARMOUR][ARM_MOTTLED_DRAGON_ARMOUR][PARM_EVASION] = -1;
- mss[OBJ_ARMOUR][ARM_MOTTLED_DRAGON_ARMOUR] = 150;
-
- prop[OBJ_ARMOUR][ARM_STORM_DRAGON_HIDE][PARM_AC] = 2;
- prop[OBJ_ARMOUR][ARM_STORM_DRAGON_HIDE][PARM_EVASION] = -5;
- mss[OBJ_ARMOUR][ARM_STORM_DRAGON_HIDE] = 400;
-
- prop[OBJ_ARMOUR][ARM_STORM_DRAGON_ARMOUR][PARM_AC] = 10;
- prop[OBJ_ARMOUR][ARM_STORM_DRAGON_ARMOUR][PARM_EVASION] = -5;
- mss[OBJ_ARMOUR][ARM_STORM_DRAGON_ARMOUR] = 400;
-
- prop[OBJ_ARMOUR][ARM_GOLD_DRAGON_HIDE][PARM_AC] = 2;
- prop[OBJ_ARMOUR][ARM_GOLD_DRAGON_HIDE][PARM_EVASION] = -10;
- mss[OBJ_ARMOUR][ARM_GOLD_DRAGON_HIDE] = 1100;
-
- prop[OBJ_ARMOUR][ARM_GOLD_DRAGON_ARMOUR][PARM_AC] = 13;
- prop[OBJ_ARMOUR][ARM_GOLD_DRAGON_ARMOUR][PARM_EVASION] = -10;
- mss[OBJ_ARMOUR][ARM_GOLD_DRAGON_ARMOUR] = 1100;
-
- prop[OBJ_ARMOUR][ARM_ANIMAL_SKIN][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_ANIMAL_SKIN][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_ANIMAL_SKIN] = 100;
-
- prop[OBJ_ARMOUR][ARM_SWAMP_DRAGON_HIDE][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_SWAMP_DRAGON_HIDE][PARM_EVASION] = -2;
- mss[OBJ_ARMOUR][ARM_SWAMP_DRAGON_HIDE] = 200;
-
- prop[OBJ_ARMOUR][ARM_SWAMP_DRAGON_ARMOUR][PARM_AC] = 7;
- prop[OBJ_ARMOUR][ARM_SWAMP_DRAGON_ARMOUR][PARM_EVASION] = -2;
- mss[OBJ_ARMOUR][ARM_SWAMP_DRAGON_ARMOUR] = 200;
-
- prop[OBJ_ARMOUR][ARM_SHIELD][PARM_AC] = 0;
- prop[OBJ_ARMOUR][ARM_SHIELD][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_SHIELD] = 100;
-
- prop[OBJ_ARMOUR][ARM_CLOAK][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_CLOAK][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_CLOAK] = 20;
-
- prop[OBJ_ARMOUR][ARM_HELMET][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_HELMET][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_HELMET] = 80;
-
- prop[OBJ_ARMOUR][ARM_GLOVES][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_GLOVES][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_GLOVES] = 20;
-
- prop[OBJ_ARMOUR][ARM_BOOTS][PARM_AC] = 1;
- prop[OBJ_ARMOUR][ARM_BOOTS][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_BOOTS] = 40;
-
- prop[OBJ_ARMOUR][ARM_BUCKLER][PARM_AC] = 0;
- prop[OBJ_ARMOUR][ARM_BUCKLER][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_BUCKLER] = 50;
-
- prop[OBJ_ARMOUR][ARM_LARGE_SHIELD][PARM_AC] = 0;
- prop[OBJ_ARMOUR][ARM_LARGE_SHIELD][PARM_EVASION] = 0;
- mss[OBJ_ARMOUR][ARM_LARGE_SHIELD] = 250;
-
- int i = 0;
-
- for (i = 0; i < 50; i++)
- {
- mss[OBJ_WANDS][i] = 100;
- mss[OBJ_FOOD][i] = 100;
- mss[OBJ_UNKNOWN_I][i] = 200; // labeled as "books" elsewhere
-
- //jmf: made scrolls, jewellery and potions weigh less.
- mss[OBJ_SCROLLS][i] = 20;
- mss[OBJ_JEWELLERY][i] = 10;
- mss[OBJ_POTIONS][i] = 40;
- mss[OBJ_UNKNOWN_II][i] = 5; // "gems"
- mss[OBJ_BOOKS][i] = 70;
-
- mss[OBJ_STAVES][i] = 130;
- mss[OBJ_ORBS][i] = 300;
- mss[OBJ_MISCELLANY][i] = 100;
- mss[OBJ_CORPSES][i] = 100;
- }
-
- // rods are lighter than staves
- for (i = STAFF_SMITING; i < STAFF_AIR; i++)
- {
- mss[OBJ_STAVES][i] = 70;
- }
-
- // this is food, right?
- mss[OBJ_FOOD][FOOD_MEAT_RATION] = 80;
- mss[OBJ_FOOD][FOOD_BREAD_RATION] = 80;
- mss[OBJ_FOOD][FOOD_PEAR] = 20;
- mss[OBJ_FOOD][FOOD_APPLE] = 20;
- mss[OBJ_FOOD][FOOD_CHOKO] = 30;
- mss[OBJ_FOOD][FOOD_HONEYCOMB] = 40;
- mss[OBJ_FOOD][FOOD_ROYAL_JELLY] = 55;
- mss[OBJ_FOOD][FOOD_SNOZZCUMBER] = 50;
- mss[OBJ_FOOD][FOOD_PIZZA] = 40;
- mss[OBJ_FOOD][FOOD_APRICOT] = 15;
- mss[OBJ_FOOD][FOOD_ORANGE] = 20;
- mss[OBJ_FOOD][FOOD_BANANA] = 20;
- mss[OBJ_FOOD][FOOD_STRAWBERRY] = 5;
- mss[OBJ_FOOD][FOOD_RAMBUTAN] = 10;
- mss[OBJ_FOOD][FOOD_LEMON] = 20;
- mss[OBJ_FOOD][FOOD_GRAPE] = 5;
- mss[OBJ_FOOD][FOOD_SULTANA] = 3;
- mss[OBJ_FOOD][FOOD_LYCHEE] = 10;
- mss[OBJ_FOOD][FOOD_BEEF_JERKY] = 20;
- mss[OBJ_FOOD][FOOD_CHEESE] = 40;
- mss[OBJ_FOOD][FOOD_SAUSAGE] = 40;
- mss[OBJ_FOOD][FOOD_CHUNK] = 100;
- /* mss [OBJ_FOOD] [21] = 40;
- mss [OBJ_FOOD] [22] = 50;
- mss [OBJ_FOOD] [23] = 60;
- mss [OBJ_FOOD] [24] = 60;
- mss [OBJ_FOOD] [25] = 100; */
-
- mss[OBJ_MISCELLANY][MISC_BOTTLED_EFREET] = 250;
-
- mss[OBJ_MISCELLANY][MISC_CRYSTAL_BALL_OF_SEEING] = 200;
- mss[OBJ_MISCELLANY][MISC_CRYSTAL_BALL_OF_ENERGY] = 200;
- mss[OBJ_MISCELLANY][MISC_CRYSTAL_BALL_OF_FIXATION] = 200;
-
- // weapons: blunt weapons are first to help grouping them together
- // note: AC prop can't be 0 or less because of division.
- // If it's 1, makes no difference
-
- // NOTE: I have *removed* AC bit for weapons - just doesn't work
- // prop [x] [2] is speed
-
- prop[OBJ_WEAPONS][WPN_CLUB][PWPN_DAMAGE] = 5;
- prop[OBJ_WEAPONS][WPN_CLUB][PWPN_HIT] = 4; // helps to get past evasion
- prop[OBJ_WEAPONS][WPN_CLUB][PWPN_SPEED] = 12;
- mss[OBJ_WEAPONS][WPN_CLUB] = 50;
-
- prop[OBJ_WEAPONS][WPN_MACE][PWPN_DAMAGE] = 8;
- prop[OBJ_WEAPONS][WPN_MACE][PWPN_HIT] = 3; // helps to get past evasion
- prop[OBJ_WEAPONS][WPN_MACE][PWPN_SPEED] = 14;
- mss[OBJ_WEAPONS][WPN_MACE] = 140;
-
- prop[OBJ_WEAPONS][WPN_GREAT_MACE][PWPN_DAMAGE] = 16;
- prop[OBJ_WEAPONS][WPN_GREAT_MACE][PWPN_HIT] = -3;
- prop[OBJ_WEAPONS][WPN_GREAT_MACE][PWPN_SPEED] = 18;
- mss[OBJ_WEAPONS][WPN_GREAT_MACE] = 260;
-
- prop[OBJ_WEAPONS][WPN_FLAIL][PWPN_DAMAGE] = 9;
- prop[OBJ_WEAPONS][WPN_FLAIL][PWPN_HIT] = 2; // helps to get past evasion
- prop[OBJ_WEAPONS][WPN_FLAIL][PWPN_SPEED] = 15;
- mss[OBJ_WEAPONS][WPN_FLAIL] = 150;
-
- prop[OBJ_WEAPONS][WPN_SPIKED_FLAIL][PWPN_DAMAGE] = 12;
- prop[OBJ_WEAPONS][WPN_SPIKED_FLAIL][PWPN_HIT] = 1;
- prop[OBJ_WEAPONS][WPN_SPIKED_FLAIL][PWPN_SPEED] = 16;
- mss[OBJ_WEAPONS][WPN_SPIKED_FLAIL] = 170;
-
- prop[OBJ_WEAPONS][WPN_GREAT_FLAIL][PWPN_DAMAGE] = 17;
- prop[OBJ_WEAPONS][WPN_GREAT_FLAIL][PWPN_HIT] = -4;
- prop[OBJ_WEAPONS][WPN_GREAT_FLAIL][PWPN_SPEED] = 19;
- mss[OBJ_WEAPONS][WPN_GREAT_FLAIL] = 300;
-
- prop[OBJ_WEAPONS][WPN_DAGGER][PWPN_DAMAGE] = 3;
- prop[OBJ_WEAPONS][WPN_DAGGER][PWPN_HIT] = 6; // helps to get past evasion
- prop[OBJ_WEAPONS][WPN_DAGGER][PWPN_SPEED] = 11;
- mss[OBJ_WEAPONS][WPN_DAGGER] = 20;
-
- prop[OBJ_WEAPONS][WPN_KNIFE][PWPN_DAMAGE] = 2;
- prop[OBJ_WEAPONS][WPN_KNIFE][PWPN_HIT] = 0; // helps to get past evasion
- prop[OBJ_WEAPONS][WPN_KNIFE][PWPN_SPEED] = 11;
- mss[OBJ_WEAPONS][WPN_KNIFE] = 10;
-
- prop[OBJ_WEAPONS][WPN_MORNINGSTAR][PWPN_DAMAGE] = 10;
- prop[OBJ_WEAPONS][WPN_MORNINGSTAR][PWPN_HIT] = 2;
- prop[OBJ_WEAPONS][WPN_MORNINGSTAR][PWPN_SPEED] = 15;
- mss[OBJ_WEAPONS][WPN_MORNINGSTAR] = 150;
-
- prop[OBJ_WEAPONS][WPN_SHORT_SWORD][PWPN_DAMAGE] = 6;
- prop[OBJ_WEAPONS][WPN_SHORT_SWORD][PWPN_HIT] = 5;
- prop[OBJ_WEAPONS][WPN_SHORT_SWORD][PWPN_SPEED] = 12;
- mss[OBJ_WEAPONS][WPN_SHORT_SWORD] = 100;
-
- prop[OBJ_WEAPONS][WPN_LONG_SWORD][PWPN_DAMAGE] = 10;
- prop[OBJ_WEAPONS][WPN_LONG_SWORD][PWPN_HIT] = 3;
- prop[OBJ_WEAPONS][WPN_LONG_SWORD][PWPN_SPEED] = 14;
- mss[OBJ_WEAPONS][WPN_LONG_SWORD] = 160;
-
- prop[OBJ_WEAPONS][WPN_GREAT_SWORD][PWPN_DAMAGE] = 16;
- prop[OBJ_WEAPONS][WPN_GREAT_SWORD][PWPN_HIT] = -1;
- prop[OBJ_WEAPONS][WPN_GREAT_SWORD][PWPN_SPEED] = 17;
- mss[OBJ_WEAPONS][WPN_GREAT_SWORD] = 250;
-
- prop[OBJ_WEAPONS][WPN_FALCHION][PWPN_DAMAGE] = 8;
- prop[OBJ_WEAPONS][WPN_FALCHION][PWPN_HIT] = 2;
- prop[OBJ_WEAPONS][WPN_FALCHION][PWPN_SPEED] = 13;
- mss[OBJ_WEAPONS][WPN_FALCHION] = 130;
-
- prop[OBJ_WEAPONS][WPN_SCIMITAR][PWPN_DAMAGE] = 11;
- prop[OBJ_WEAPONS][WPN_SCIMITAR][PWPN_HIT] = 1;
- prop[OBJ_WEAPONS][WPN_SCIMITAR][PWPN_SPEED] = 14;
- mss[OBJ_WEAPONS][WPN_SCIMITAR] = 170;
-
- prop[OBJ_WEAPONS][WPN_HAND_AXE][PWPN_DAMAGE] = 7;
- prop[OBJ_WEAPONS][WPN_HAND_AXE][PWPN_HIT] = 2;
- prop[OBJ_WEAPONS][WPN_HAND_AXE][PWPN_SPEED] = 13;
- mss[OBJ_WEAPONS][WPN_HAND_AXE] = 110;
-
- prop[OBJ_WEAPONS][WPN_WAR_AXE][PWPN_DAMAGE] = 11;
- prop[OBJ_WEAPONS][WPN_WAR_AXE][PWPN_HIT] = 0;
- prop[OBJ_WEAPONS][WPN_WAR_AXE][PWPN_SPEED] = 16;
- mss[OBJ_WEAPONS][WPN_WAR_AXE] = 150;
-
- prop[OBJ_WEAPONS][WPN_BROAD_AXE][PWPN_DAMAGE] = 14;
- prop[OBJ_WEAPONS][WPN_BROAD_AXE][PWPN_HIT] = 1;
- prop[OBJ_WEAPONS][WPN_BROAD_AXE][PWPN_SPEED] = 17;
- mss[OBJ_WEAPONS][WPN_BROAD_AXE] = 180;
-
- prop[OBJ_WEAPONS][WPN_BATTLEAXE][PWPN_DAMAGE] = 17;
- prop[OBJ_WEAPONS][WPN_BATTLEAXE][PWPN_HIT] = -2;
- prop[OBJ_WEAPONS][WPN_BATTLEAXE][PWPN_SPEED] = 18;
- mss[OBJ_WEAPONS][WPN_BATTLEAXE] = 200;
-
- prop[OBJ_WEAPONS][WPN_SPEAR][PWPN_DAMAGE] = 5;
- prop[OBJ_WEAPONS][WPN_SPEAR][PWPN_HIT] = 3;
- prop[OBJ_WEAPONS][WPN_SPEAR][PWPN_SPEED] = 13;
- mss[OBJ_WEAPONS][WPN_SPEAR] = 50;
-
- prop[OBJ_WEAPONS][WPN_TRIDENT][PWPN_DAMAGE] = 9;
- prop[OBJ_WEAPONS][WPN_TRIDENT][PWPN_HIT] = -2;
- prop[OBJ_WEAPONS][WPN_TRIDENT][PWPN_SPEED] = 17;
- mss[OBJ_WEAPONS][WPN_TRIDENT] = 160;
-
- prop[OBJ_WEAPONS][WPN_DEMON_TRIDENT][PWPN_DAMAGE] = 15;
- prop[OBJ_WEAPONS][WPN_DEMON_TRIDENT][PWPN_HIT] = -2;
- prop[OBJ_WEAPONS][WPN_DEMON_TRIDENT][PWPN_SPEED] = 17;
- mss[OBJ_WEAPONS][WPN_DEMON_TRIDENT] = 160;
-
- prop[OBJ_WEAPONS][WPN_HALBERD][PWPN_DAMAGE] = 13;
- prop[OBJ_WEAPONS][WPN_HALBERD][PWPN_HIT] = -3;
- prop[OBJ_WEAPONS][WPN_HALBERD][PWPN_SPEED] = 19;
- mss[OBJ_WEAPONS][WPN_HALBERD] = 200;
-
- // sling
- // - the three properties are _not_ irrelevant here
- // - when something hits something else (either may be you)
- // in melee, these are used.
- prop[OBJ_WEAPONS][WPN_SLING][PWPN_DAMAGE] = 1;
- prop[OBJ_WEAPONS][WPN_SLING][PWPN_HIT] = -1;
- prop[OBJ_WEAPONS][WPN_SLING][PWPN_SPEED] = 11;
- mss[OBJ_WEAPONS][WPN_SLING] = 10;
-
- prop[OBJ_WEAPONS][WPN_BOW][PWPN_DAMAGE] = 2;
- prop[OBJ_WEAPONS][WPN_BOW][PWPN_HIT] = -3; // helps to get past evasion
- prop[OBJ_WEAPONS][WPN_BOW][PWPN_SPEED] = 11;
- mss[OBJ_WEAPONS][WPN_BOW] = 100;
-
- prop[OBJ_WEAPONS][WPN_BLOWGUN][PWPN_DAMAGE] = 1;
- prop[OBJ_WEAPONS][WPN_BLOWGUN][PWPN_HIT] = 0; // helps to get past evasion
- prop[OBJ_WEAPONS][WPN_BLOWGUN][PWPN_SPEED] = 10;
- mss[OBJ_WEAPONS][WPN_BLOWGUN] = 50;
-
- prop[OBJ_WEAPONS][WPN_CROSSBOW][PWPN_DAMAGE] = 2;
- prop[OBJ_WEAPONS][WPN_CROSSBOW][PWPN_HIT] = -1;
- prop[OBJ_WEAPONS][WPN_CROSSBOW][PWPN_SPEED] = 15;
- mss[OBJ_WEAPONS][WPN_CROSSBOW] = 250;
-
- prop[OBJ_WEAPONS][WPN_HAND_CROSSBOW][PWPN_DAMAGE] = 1;
- prop[OBJ_WEAPONS][WPN_HAND_CROSSBOW][PWPN_HIT] = -1;
- prop[OBJ_WEAPONS][WPN_HAND_CROSSBOW][PWPN_SPEED] = 15;
- mss[OBJ_WEAPONS][WPN_HAND_CROSSBOW] = 70;
-
- prop[OBJ_WEAPONS][WPN_GLAIVE][PWPN_DAMAGE] = 15;
- prop[OBJ_WEAPONS][WPN_GLAIVE][PWPN_HIT] = -3;
- prop[OBJ_WEAPONS][WPN_GLAIVE][PWPN_SPEED] = 18;
- mss[OBJ_WEAPONS][WPN_GLAIVE] = 200;
-
- // staff - hmmm
- prop[OBJ_WEAPONS][WPN_QUARTERSTAFF][PWPN_DAMAGE] = 7;
- prop[OBJ_WEAPONS][WPN_QUARTERSTAFF][PWPN_HIT] = 6;
- prop[OBJ_WEAPONS][WPN_QUARTERSTAFF][PWPN_SPEED] = 12;
- mss[OBJ_WEAPONS][WPN_QUARTERSTAFF] = 130;
-
- prop[OBJ_WEAPONS][WPN_SCYTHE][PWPN_DAMAGE] = 14;
- prop[OBJ_WEAPONS][WPN_SCYTHE][PWPN_HIT] = -4;
- prop[OBJ_WEAPONS][WPN_SCYTHE][PWPN_SPEED] = 22;
- mss[OBJ_WEAPONS][WPN_SCYTHE] = 230;
-
- // these two should have the same speed because of 2-h ogres.
- prop[OBJ_WEAPONS][WPN_GIANT_CLUB][PWPN_DAMAGE] = 15;
- prop[OBJ_WEAPONS][WPN_GIANT_CLUB][PWPN_HIT] = -5;
- prop[OBJ_WEAPONS][WPN_GIANT_CLUB][PWPN_SPEED] = 16;
- mss[OBJ_WEAPONS][WPN_GIANT_CLUB] = 750;
-
- prop[OBJ_WEAPONS][WPN_GIANT_SPIKED_CLUB][PWPN_DAMAGE] = 18;
- prop[OBJ_WEAPONS][WPN_GIANT_SPIKED_CLUB][PWPN_HIT] = -6;
- prop[OBJ_WEAPONS][WPN_GIANT_SPIKED_CLUB][PWPN_SPEED] = 17;
- mss[OBJ_WEAPONS][WPN_GIANT_SPIKED_CLUB] = 850;
- // these two should have the same speed because of 2-h ogres.
-
- prop[OBJ_WEAPONS][WPN_EVENINGSTAR][PWPN_DAMAGE] = 12;
- prop[OBJ_WEAPONS][WPN_EVENINGSTAR][PWPN_HIT] = 2;
- prop[OBJ_WEAPONS][WPN_EVENINGSTAR][PWPN_SPEED] = 15;
- mss[OBJ_WEAPONS][WPN_EVENINGSTAR] = 150;
-
- prop[OBJ_WEAPONS][WPN_QUICK_BLADE][PWPN_DAMAGE] = 5;
- prop[OBJ_WEAPONS][WPN_QUICK_BLADE][PWPN_HIT] = 6;
- prop[OBJ_WEAPONS][WPN_QUICK_BLADE][PWPN_SPEED] = 7;
- mss[OBJ_WEAPONS][WPN_QUICK_BLADE] = 100;
-
- prop[OBJ_WEAPONS][WPN_KATANA][PWPN_DAMAGE] = 13;
- prop[OBJ_WEAPONS][WPN_KATANA][PWPN_HIT] = 4;
- prop[OBJ_WEAPONS][WPN_KATANA][PWPN_SPEED] = 13;
- mss[OBJ_WEAPONS][WPN_KATANA] = 200;
-
- prop[OBJ_WEAPONS][WPN_BLESSED_BLADE][PWPN_DAMAGE] = 14;
- prop[OBJ_WEAPONS][WPN_BLESSED_BLADE][PWPN_HIT] = -3;
- prop[OBJ_WEAPONS][WPN_BLESSED_BLADE][PWPN_SPEED] = 14;
- mss[OBJ_WEAPONS][WPN_BLESSED_BLADE] = 160;
-
- prop[OBJ_WEAPONS][WPN_EXECUTIONERS_AXE][PWPN_DAMAGE] = 20;
- prop[OBJ_WEAPONS][WPN_EXECUTIONERS_AXE][PWPN_HIT] = -4;
- prop[OBJ_WEAPONS][WPN_EXECUTIONERS_AXE][PWPN_SPEED] = 20;
- mss[OBJ_WEAPONS][WPN_EXECUTIONERS_AXE] = 320;
-
- prop[OBJ_WEAPONS][WPN_DOUBLE_SWORD][PWPN_DAMAGE] = 15;
- prop[OBJ_WEAPONS][WPN_DOUBLE_SWORD][PWPN_HIT] = 3;
- prop[OBJ_WEAPONS][WPN_DOUBLE_SWORD][PWPN_SPEED] = 16;
- mss[OBJ_WEAPONS][WPN_DOUBLE_SWORD] = 220;
-
- prop[OBJ_WEAPONS][WPN_TRIPLE_SWORD][PWPN_DAMAGE] = 19;
- prop[OBJ_WEAPONS][WPN_TRIPLE_SWORD][PWPN_HIT] = -1;
- prop[OBJ_WEAPONS][WPN_TRIPLE_SWORD][PWPN_SPEED] = 19;
- mss[OBJ_WEAPONS][WPN_TRIPLE_SWORD] = 300;
-
- prop[OBJ_WEAPONS][WPN_HAMMER][PWPN_DAMAGE] = 7;
- prop[OBJ_WEAPONS][WPN_HAMMER][PWPN_HIT] = 2;
- prop[OBJ_WEAPONS][WPN_HAMMER][PWPN_SPEED] = 13;
- mss[OBJ_WEAPONS][WPN_HAMMER] = 130;
-
- prop[OBJ_WEAPONS][WPN_ANCUS][PWPN_DAMAGE] = 9;
- prop[OBJ_WEAPONS][WPN_ANCUS][PWPN_HIT] = 1;
- prop[OBJ_WEAPONS][WPN_ANCUS][PWPN_SPEED] = 14;
- mss[OBJ_WEAPONS][WPN_ANCUS] = 160;
-
- prop[OBJ_WEAPONS][WPN_WHIP][PWPN_DAMAGE] = 3;
- prop[OBJ_WEAPONS][WPN_WHIP][PWPN_HIT] = 1; // helps to get past evasion
- prop[OBJ_WEAPONS][WPN_WHIP][PWPN_SPEED] = 14;
- mss[OBJ_WEAPONS][WPN_WHIP] = 30;
-
- prop[OBJ_WEAPONS][WPN_SABRE][PWPN_DAMAGE] = 7;
- prop[OBJ_WEAPONS][WPN_SABRE][PWPN_HIT] = 4;
- prop[OBJ_WEAPONS][WPN_SABRE][PWPN_SPEED] = 12;
- mss[OBJ_WEAPONS][WPN_SABRE] = 110;
-
- prop[OBJ_WEAPONS][WPN_DEMON_BLADE][PWPN_DAMAGE] = 13;
- prop[OBJ_WEAPONS][WPN_DEMON_BLADE][PWPN_HIT] = 2;
- prop[OBJ_WEAPONS][WPN_DEMON_BLADE][PWPN_SPEED] = 15;
- mss[OBJ_WEAPONS][WPN_DEMON_BLADE] = 200;
-
- prop[OBJ_WEAPONS][WPN_DEMON_WHIP][PWPN_DAMAGE] = 10;
- prop[OBJ_WEAPONS][WPN_DEMON_WHIP][PWPN_HIT] = 1;
- prop[OBJ_WEAPONS][WPN_DEMON_WHIP][PWPN_SPEED] = 14;
- mss[OBJ_WEAPONS][WPN_DEMON_WHIP] = 30;
-
-
- // MISSILES:
-
- prop[OBJ_MISSILES][MI_STONE][PWPN_DAMAGE] = 2;
- prop[OBJ_MISSILES][MI_STONE][PWPN_HIT] = 4;
- mss[OBJ_MISSILES][MI_STONE] = 5;
-
- prop[OBJ_MISSILES][MI_ARROW][PWPN_DAMAGE] = 2;
- prop[OBJ_MISSILES][MI_ARROW][PWPN_HIT] = 6;
- mss[OBJ_MISSILES][MI_ARROW] = 10;
-
- prop[OBJ_MISSILES][MI_NEEDLE][PWPN_DAMAGE] = 0;
- prop[OBJ_MISSILES][MI_NEEDLE][PWPN_HIT] = 1;
- mss[OBJ_MISSILES][MI_NEEDLE] = 1;
-
- prop[OBJ_MISSILES][MI_BOLT][PWPN_DAMAGE] = 2;
- prop[OBJ_MISSILES][MI_BOLT][PWPN_HIT] = 8;
- mss[OBJ_MISSILES][MI_BOLT] = 12;
-
- prop[OBJ_MISSILES][MI_DART][PWPN_DAMAGE] = 2;
- prop[OBJ_MISSILES][MI_DART][PWPN_HIT] = 4; //whatever - for hand crossbow
- mss[OBJ_MISSILES][MI_DART] = 5;
-
- // large rock
- prop[OBJ_MISSILES][MI_LARGE_ROCK][PWPN_DAMAGE] = 20;
- prop[OBJ_MISSILES][MI_LARGE_ROCK][PWPN_HIT] = 10;
- mss[OBJ_MISSILES][MI_LARGE_ROCK] = 1000;
-}
-
-
unsigned char check_item_knowledge(void)
{
char st_pass[ITEMNAME_SIZE] = "";
@@ -2914,117 +2117,100 @@ unsigned char check_item_knowledge(void)
} // end check_item_knowledge()
-// must be certain that you are passing the subtype
-// to an OBJ_ARMOUR and nothing else, or as they say,
-// "Bad Things Will Happen" {dlb}:
-bool hide2armour( unsigned char *which_subtype )
+// Used for: Pandemonium demonlords, shopkeepers, scrolls, random artefacts
+int make_name( unsigned long seed, bool all_cap, char buff[ ITEMNAME_SIZE ] )
{
- switch (*which_subtype)
- {
- case ARM_DRAGON_HIDE:
- *which_subtype = ARM_DRAGON_ARMOUR;
- return true;
- case ARM_TROLL_HIDE:
- *which_subtype = ARM_TROLL_LEATHER_ARMOUR;
- return true;
- case ARM_ICE_DRAGON_HIDE:
- *which_subtype = ARM_ICE_DRAGON_ARMOUR;
- return true;
- case ARM_MOTTLED_DRAGON_HIDE:
- *which_subtype = ARM_MOTTLED_DRAGON_ARMOUR;
- return true;
- case ARM_STORM_DRAGON_HIDE:
- *which_subtype = ARM_STORM_DRAGON_ARMOUR;
- return true;
- case ARM_GOLD_DRAGON_HIDE:
- *which_subtype = ARM_GOLD_DRAGON_ARMOUR;
- return true;
- case ARM_SWAMP_DRAGON_HIDE:
- *which_subtype = ARM_SWAMP_DRAGON_ARMOUR;
- return true;
- case ARM_STEAM_DRAGON_HIDE:
- *which_subtype = ARM_STEAM_DRAGON_ARMOUR;
- return true;
- default:
- return false;
- }
-} // end hide2armour()
-
+ char name[ITEMNAME_SIZE];
+ int numb[17];
-void make_name(unsigned char var1, unsigned char var2, unsigned char var3,
- char ncase, char buff[ITEMNAME_SIZE])
-{
- char name[ ITEMNAME_SIZE ] = "";
- FixedVector < unsigned char, 15 > numb;
- int len;
int i = 0;
- int nexty = 0;
- int j = 0;
- int x = 0;
-
- numb[0] = var1 * var2;
- numb[1] = var1 * var3;
- numb[2] = var2 * var3;
- numb[3] = var1 * var2 * var3;
- numb[4] = var1 + var2;
- numb[5] = var2 + var3;
- numb[6] = var1 * var2 + var3;
- numb[7] = var1 * var3 + var2;
- numb[8] = var2 * var3 + var1;
- numb[9] = var1 * var2 * var3 - var1;
- numb[10] = var1 + var2 + var2;
- numb[11] = var2 + var3 * var1;
- numb[12] = var1 * var2 * var3;
- numb[13] = var1 * var3 * var1;
- numb[14] = var2 * var3 * var3;
-
- for (i = 0; i < 15; i++)
- {
- while (numb[i] >= 25)
- {
- numb[i] -= 25;
- }
- }
-
- j = numb[6];
-
- len = reduce(numb[reduce(numb[11]) / 2]);
-
- while (len < 5 && j < 10)
- {
- len += 1 + reduce(1 + numb[j]);
- j++;
- }
-
- while (len > 14)
- {
- len -= 8;
- }
-
- nexty = retbit(numb[4]);
-
- char k = 0;
-
- j = 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++;
-
- if (j >= 15)
+ j = (j + 1) % 17;
+ if (j == 0)
{
- j = 0;
-
- k++;
-
- if (k > 9)
+ count++;
+ if (count > 9)
break;
}
- if (nexty == 1 || (i > 0 && !is_random_name_vowel(name[i])))
+ if (!has_space && i > 5 && i < len - 4
+ && (numb[(k + 10 * j) % 17] % 5) != 3)
{
- name[i] = retvow(numb[j]);
- if ((i == 0 || i == len - 1) && name[i] == 32)
+ 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;
@@ -3032,247 +2218,198 @@ void make_name(unsigned char var1, unsigned char var2, unsigned char var3,
}
else
{
- if (numb[i / 2] <= 1 && i > 3 && is_random_name_vowel(name[i]))
- goto two_letter;
+ 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
- name[i] = numb[j];
+ {
+ 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] );
+ }
+ }
}
- hello:
-
- if ((nexty == 0 && is_random_name_vowel(name[i]))
- || (nexty == 1 && !is_random_name_vowel(name[i])))
+ if (name[i] == '\0')
{
- if (nexty == 1 && i > 0 && !is_random_name_vowel(name[i - 1]))
- i--;
+ 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_vowel(name[i]))
- nexty = 1;
+ if (is_random_name_space( name[i] ))
+ has_space = true;
+
+ if (!is_random_name_vowel( name[i] ))
+ want_vowel = true;
else
- nexty = 0;
+ want_vowel = false;
+ }
- x++;
+ // 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 );
- switch (ncase)
+ if (len)
{
- case 2:
- for (i = 0; i < len + 1; i++)
+ for (i = len - 1; i > 0; i--)
{
- if (i > 3 && name[i] == 0 && name[i + 1] == 0)
- {
- name[i] = 0;
- if (name[i - 1] == 32)
- name[i - 1] = 0;
+ if (!isspace( name[i] ))
break;
- }
- if (name[i] != 32 && name[i] < 30)
- name[i] += 65;
- if (name[i] > 96)
- name[i] -= 32;
- }
- break;
-
- case 3:
- for (i = 0; i < len + 0; i++)
- {
- if (i != 0 && name[i] >= 65 && name[i] < 97)
- {
- if (name[i - 1] == 32)
- name[i] += 32;
- }
-
- if (name[i] > 97)
- {
- if (i == 0 || name[i - 1] == 32)
- name[i] -= 32;
- }
-
- if (name[i] < 30)
+ else
{
- if (i == 0 || (name[i] != 32 && name[i - 1] == 32))
- name[i] += 65;
- else
- name[i] += 97;
+ name[i] = '\0';
+ len--;
}
}
- break;
-
- case 0:
- for (i = 0; i < len; i++)
- {
- if (name[i] != 32 && name[i] < 30)
- name[i] += 97;
- }
- break;
-
- case 1:
- name[i] += 65;
-
- for (i = 1; i < len; i++)
- {
- if (name[i] != 32 && name[i] < 30)
- name[i] += 97; //97;
- }
- break;
}
- if (strlen( name ) == 0)
- strncpy( buff, "Plog", 80 );
+ if (len >= 3)
+ strncpy( buff, name, ITEMNAME_SIZE );
else
- strncpy( buff, name, 80 );
-
- buff[79] = '\0';
- return;
-
- two_letter:
- if (nexty == 1)
- goto hello;
-
- if (!is_random_name_vowel(name[i - 1]))
- goto hello;
+ {
+ strncpy( buff, "plog", ITEMNAME_SIZE );
+ len = 4;
+ }
- i++;
+ buff[ ITEMNAME_SIZE - 1 ] = '\0';
- switch (i * (retbit(j) + 1))
+ for (i = 0; i < len; i++)
{
- case 0:
- strcat(name, "sh");
- break;
- case 1:
- strcat(name, "ch");
- break;
- case 2:
- strcat(name, "tz");
- break;
- case 3:
- strcat(name, "ts");
- break;
- case 4:
- strcat(name, "cs");
- break;
- case 5:
- strcat(name, "cz");
- break;
- case 6:
- strcat(name, "xt");
- break;
- case 7:
- strcat(name, "xk");
- break;
- case 8:
- strcat(name, "kl");
- break;
- case 9:
- strcat(name, "cl");
- break;
- case 10:
- strcat(name, "fr");
- break;
- case 11:
- strcat(name, "sh");
- break;
- case 12:
- strcat(name, "ch");
- break;
- case 13:
- strcat(name, "gh");
- break;
- case 14:
- strcat(name, "pr");
- break;
- case 15:
- strcat(name, "tr");
- break;
- case 16:
- strcat(name, "mn");
- break;
- case 17:
- strcat(name, "ph");
- break;
- case 18:
- strcat(name, "pn");
- break;
- case 19:
- strcat(name, "cv");
- break;
- case 20:
- strcat(name, "zx");
- break;
- case 21:
- strcat(name, "xz");
- break;
- case 23:
- strcat(name, "dd");
- break;
- case 24:
- strcat(name, "tt");
- break;
- case 25:
- strcat(name, "ll");
- break;
- //case 26: strcat(name, "sh"); break;
- //case 12: strcat(name, "sh"); break;
- //case 13: strcat(name, "sh"); break;
- default:
- i--;
- goto hello;
+ if (all_cap || i == 0 || buff[i - 1] == ' ')
+ buff[i] = toupper( buff[i] );
}
- x += 2;
-
- goto hello;
+ return (len);
} // end make_name()
-
-char reduce(unsigned char reducee)
+bool is_random_name_space(char let)
{
- while (reducee >= 26)
- {
- reducee -= 26;
- }
-
- return reducee;
-} // end reduce()
+ return (let == ' ');
+}
-bool is_random_name_vowel(unsigned char let)
+static bool is_random_name_vowel( char let )
{
- return (let == 0 || let == 4 || let == 8 || let == 14 || let == 20
- || let == 24 || let == 32);
+ return (let == 'a' || let == 'e' || let == 'i' || let == 'o' || let == 'u'
+ || let == 'y' || let == ' ');
} // end is_random_name_vowel()
-char retvow(char sed)
+static char retvow( int sed )
{
-
- while (sed > 6)
- sed -= 6;
-
- switch (sed)
- {
- case 0:
- return 0;
- case 1:
- return 4;
- case 2:
- return 8;
- case 3:
- return 14;
- case 4:
- return 20;
- case 5:
- return 24;
- case 6:
- return 32;
- }
-
- return 0;
+ static const char vowels[] = "aeiouaeiouaeiouy ";
+ return (vowels[ sed % (sizeof(vowels) - 1) ]);
} // end retvow()
-char retbit(char sed)
+static char retlet( int sed )
{
- return (sed % 2);
-} // end retbit()
+ static const char consonants[] = "bcdfghjklmnpqrstvwxzcdfghlmnrstlmnrst";
+ return (consonants[ sed % (sizeof(consonants) - 1) ]);
+}