they get randomised but fixed descriptions at the beginning of the game, and once you know one type you'll be able to recognize another staff/rod of the same type. In the case of rods you'll still have to evoke it to find out the number of charges.
I've tried to put the secondary descriptions into an order that will roughly match the ten current staff tiles.
This solves part of FR 1837348, and is likely to cause havoc to saved games, at least concerning staves.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3424 c06c8d41-db1a-0410-9941-cceddc491573
HODV46TCH5AGI42Z5JKVDX4VCRVQCNREJUL6W3TUJK6S77SXQNLQC
PD4F7SBVT5V3JMWCNW3J4XL2G4FJCQ3OJIXX7YMTL4HHPETDQA3AC
VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC
HIRKGUMNJPWKSVTR6TVBPD3MWNA63CEHCLCIPWEMGDFHVB3NPLDQC
F7X6HVUKHZXYURABYAZJHRYBV7UZTIPOWJMGCMDK26FQ66WGKFZAC
7NDXS36TE7QVXTXJWMYSVG5UHCCLPIO4VL6NXFGTDK3ZNKE3A2IAC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC
IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
25VJTGR3AWZJ7OHKYWS53VJ6TVMMU6UT7BA6V3QVVWDGI6FYKD7QC
6LT6USGJOTDMRJGXLAN2NSZXK2GKWEXDKKUV6SVV7ZC6WI6EKMDQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
3A3OAIFRFU3IHF6SDNDPCN3XYOFYIBYCEYJAXAFASCFDY76SMFXQC
DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC
Q3DNEB5OOJ34P5ML4CMK3L6SCP7RLW7DDOZEG24KZBX3C7BJRQDAC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC
SL4H3NXHK4VIROWPSQDGO7YIYDKDWZWMUDGH5U7Y6NG63MUQXRPAC
5HBRQ2QZTFBQE2Z2CFADUI2D52LO5Z5CNHXHA7BJP3LGO7FJPUCQC
2KTJHQUX2LTU2BCLS5YXVRRKMOYKKIZAPF2LBKORFGSHEN5IO3IAC
5KJCHLIUFKRPMIVWUAYT6EOF7SW4PTQF6Y5OPEFWXGLE7DUGYLZAC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
NVD2HSEW2ONWNYDDCTOMZZOUP6NG4DCXI4LNYYIY4BQEBDMJQK5AC
OONYLF4DAPLIYLBNNRW74IVT5BBTWI4XHQBXSNSPVRX3FTKJBTRAC
// The order here must match that of IDESC in describe.h
// (I don't really know about scrolls, which is why I left the height value.)
const int max_item_number[6] = { NUM_WANDS, NUM_POTIONS,
you.item_description.height(),
NUM_JEWELLERY,
you.item_description.height(),
NUM_STAVES };
static const char* staff_secondary_string(int p)
{
switch (p) // general descriptions
{
case 0: return "crooked ";
case 1: return "knobbly ";
case 2: return "heavily ";
case 3: return "gnarled ";
case 4: return "thin ";
case 5: return "curved ";
case 6: return "twisted ";
case 7: return "thick ";
case 8: return "long ";
case 9: return "short ";
default: return "buggily ";
}
}
case 0: return "curved";
case 1: return "glowing";
case 2: return "thick";
case 3: return "thin";
case 4: return "long";
case 5: return "twisted";
case 6: return "jewelled";
case 7: return "runed";
case 8: return "smoking";
case 9: return "gnarled";
default: return "buggy";
case 0: return "glowing ";
case 1: return "jewelled ";
case 2: return "runed ";
case 3: return "smoking ";
default: return "buggy ";
const object_class_type idx_to_objtype[4] = { OBJ_WANDS, OBJ_SCROLLS,
OBJ_JEWELLERY, OBJ_POTIONS };
const int idx_to_maxtype[4] = { NUM_WANDS, NUM_SCROLLS,
NUM_JEWELLERY, NUM_POTIONS };
const object_class_type idx_to_objtype[5] = { OBJ_WANDS, OBJ_SCROLLS,
OBJ_JEWELLERY, OBJ_POTIONS,
OBJ_STAVES };
const int idx_to_maxtype[5] = { NUM_WANDS, NUM_SCROLLS,
NUM_JEWELLERY, NUM_POTIONS, NUM_STAVES };