the props table. No more re-rolling every time we need the name, yay! :D
Should be save file compatible, and I also modified my previous change to be save file compatible, after all. Not entirely sure this works, though, as I didn't have any old saved games to test this with.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4479 c06c8d41-db1a-0410-9941-cceddc491573
XI7X6SNTHG67D4NQWM75HWB6TVRXVFDPGNSQLTXN6JAZBZIVZXIQC
X3ZYEJMCHJC27L6YT2NRYB6EN2T3XFRJNUENVHGRPBUKMTVHAGVQC
K2GMFKXUWN5R3KCW6OYVXHN47MIQZKEEIOSAU6LFFKBNKF6JBVWAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
HQYQ6ZCUZBFKNPREFNSWSMRA4UD7VJXW6XK2GQONE5F3OX5NOMUQC
KU5FY6KSLTGH44KEZT4SFANRKCTWCQC7VABCMNYJRZNJSYSOXAKQC
TYRQMDB4PCK6K4WOC6XSMAGRR2FIEUIQSM7RQO7ZZ44MY37HEA3QC
SN3VSV7G6NF6NLX5E47QJQQFDIPC2LQUUYGZMH6AWBF3FOUHXCBQC
7K5P2GRF6QUXTMERG2R3BB6DZFQYJQ6V2KNPMBPFDLOP36NQILPAC
Q3DNEB5OOJ34P5ML4CMK3L6SCP7RLW7DDOZEG24KZBX3C7BJRQDAC
BTO5WE4OEK64DZQVNYLOESM74KKQNE7KSNMQVF5UDB26OBKP7ORQC
EJKHYV2Z6UPRVYUAL4WRW33GBNHYBFPMPA57HMBX2LQKXHIUO5VQC
QVVC7AYGVA6U64PTNA7L27422NLMO327P22BQKXEVIMPZHIHO7MQC
IXLNOTBJGHKESBCTME6QAR6XVWFNCHYGMS62V62ZJEA7VLQHXO2QC
LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC
7AWYHENXBDI4OLKU7JD56YAKT5RO6UZ67HEBNPOILXCIFW6BONRAC
VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC
ASSERT( is_random_artefact( item ) );
CrawlHashTable &props = item.props;
if (!props.exists( RANDART_PROPS_KEY ))
props[RANDART_PROPS_KEY].new_vector(SV_SHORT).resize(RA_PROPERTIES);
CrawlVector &rap = props[RANDART_PROPS_KEY];
rap.set_max_size(RA_PROPERTIES);
for (vec_size i = 0; i < RA_PROPERTIES; i++)
rap[i] = (short) 0;
if (is_unrandom_artefact( item ))
{
const unrandart_entry *unrand = _seekunrandart( item );
for (int i = 0; i < RA_PROPERTIES; i++)
rap[i] = (short) unrand->prpty[i];
return;
}
FixedVector< int, RA_PROPERTIES > proprt;
void static _init_randart_properties(item_def &item)
{
ASSERT( is_random_artefact( item ) );
CrawlHashTable &props = item.props;
if (!props.exists( RANDART_PROPS_KEY ))
props[RANDART_PROPS_KEY].new_vector(SV_SHORT).resize(RA_PROPERTIES);
CrawlVector &rap = props[RANDART_PROPS_KEY];
rap.set_max_size(RA_PROPERTIES);
for (vec_size i = 0; i < RA_PROPERTIES; i++)
rap[i] = (short) 0;
if (is_unrandom_artefact( item ))
{
const unrandart_entry *unrand = _seekunrandart( item );
for (int i = 0; i < RA_PROPERTIES; i++)
rap[i] = (short) unrand->prpty[i];
return;
}
randart_properties_t prop;
_get_randart_properties(item, prop);
const CrawlVector &rap_vec = item.props[RANDART_PROPS_KEY].get_vector();
ASSERT( rap_vec.get_type() == SV_SHORT );
ASSERT( rap_vec.size() == RA_PROPERTIES);
ASSERT( rap_vec.get_max_size() == RA_PROPERTIES);
if (item.props.exists( RANDART_PROPS_KEY ))
{
const CrawlVector &rap_vec = item.props[RANDART_PROPS_KEY].get_vector();
ASSERT( rap_vec.get_type() == SV_SHORT );
ASSERT( rap_vec.size() == RA_PROPERTIES);
ASSERT( rap_vec.get_max_size() == RA_PROPERTIES);
if (item_type_known(item))
{
// print artefact's real name
if (item.props.exists(RANDART_NAME_KEY))
return item.props[RANDART_NAME_KEY].get_string();
return _randart_name(item, false);
}
// print artefact appearance
if (item.props.exists(RANDART_APPEAR_KEY))
return item.props[RANDART_APPEAR_KEY].get_string();
return _randart_name(item, false);
}
if ((status == UNIQ_EXISTS
|| (in_abyss && status == UNIQ_NOT_EXISTS)
|| (!in_abyss && status == UNIQ_LOST_IN_ABYSS))
&& !force)
if (!force
&& (status == UNIQ_EXISTS
|| in_abyss && status == UNIQ_NOT_EXISTS
|| !in_abyss && status == UNIQ_LOST_IN_ABYSS))
// set artefact name
ASSERT(!item.props.exists( RANDART_NAME_KEY ));
item.props[RANDART_NAME_KEY].get_string() = _randart_name(item);
// set artefact appearance
ASSERT(!item.props.exists( RANDART_APPEAR_KEY ));
item.props[RANDART_APPEAR_KEY].get_string() = "brightly glowing blade";
// in case this is ever needed anywhere
item.special = (random_int() & RANDART_SEED_MASK);
// get true artefact name
ASSERT(!item.props.exists( RANDART_NAME_KEY ));
item.props[RANDART_NAME_KEY].get_string() = _randart_name(item, false);
// get artefact appearance
ASSERT(!item.props.exists( RANDART_APPEAR_KEY ));
item.props[RANDART_APPEAR_KEY].get_string() = _randart_name(item, true);