the wizard command &+, since there's no logic to how the random set of spells are selected and there's no valuation code in shopping.cc. No randart manuals or books of destruction, since I have no clue what they'd be like.
The code allows for any book or spell to have its normal set of spells overridden by an arbitrary/customized set of spells, but this is only used by randart spellbooks as of now.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7722 c06c8d41-db1a-0410-9941-cceddc491573
46MRRHVYJ3BS74R2BEVUWEWJCI4FCRBSLZ3NWMQCE6FUCNE5P73QC
OOF5OILRBVJKULW3LKRCC7HZY2I2RKZ6QZMRIDFBUGGDFGJFBCHAC
KNO4TZR76DMOYJCF24PSVQW7FUZOTMOJTL7I7J74SM4IHOGDX6TAC
LY7DLLD7IKL6ZQPVROLDJ46XRM5CMAAEBRFDKJ4M53CPC5GFCGSQC
DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
CHO4U5JC3RNTLXVIDXXJYZMOBZJ4VXW2GVJWDOTBRKK3AJ36LDLQC
7BREK7U6OWZ6YU3JDSJSH4CMNNULDYABCKCAUHGZIUJZBIRJS5WQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
5OFUF2JHXEX5AF5CDY4KATIAFKIHDKTV463PIJZN3IXEIJWDNVYAC
BK6MGPSEAEMU4URBAPKY3VTKK6JC6IZVN5CNOSN2UPTIOWQYEWLQC
KOSAQXB3KF6VAYTG2TOTHGJBB3F7AL6O32EMCXPVZJ5WHQX6XR5AC
25VJTGR3AWZJ7OHKYWS53VJ6TVMMU6UT7BA6V3QVVWDGI6FYKD7QC
JVSCP4FTW2G57C6YD5HZOZXTODGZH7TR75JQGFJBEPX3LCZH236QC
BSI5DB3LVY42ZHOS46X2CAPPVOSOTTQWFGLTMAKRFTROI5BQWFDQC
Z6XF4AIERIW4U4AR3HU2ILYFZ54IK4K4ORQ6JKCEWRO5LZODWDDAC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
E6JXIMRH2TX5WHZ6BT2QZ3EANM3PWCHCVYC4XWRJGRBDSP42X2RAC
EJKHYV2Z6UPRVYUAL4WRW33GBNHYBFPMPA57HMBX2LQKXHIUO5VQC
F42F3QNVICCXWPMNYL2QQJZNOVBVF4MXZUXNUC7KKYIRZ7R5HGPAC
ZMYKMHWEU26FOUTD26Q4GTAZMI6RNO3K6NHQ2VGTESE3E73GQVCQC
KU5FY6KSLTGH44KEZT4SFANRKCTWCQC7VABCMNYJRZNJSYSOXAKQC
XI7X6SNTHG67D4NQWM75HWB6TVRXVFDPGNSQLTXN6JAZBZIVZXIQC
C3O4BWRMGGRM6CUQITUHOKYPLE2ZIIW6I7PTNKA4ZTCDJNWH7WOAC
7AWYHENXBDI4OLKU7JD56YAKT5RO6UZ67HEBNPOILXCIFW6BONRAC
VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
G6WNKWA4GNUGNOH63AKXJQMQS2V4FGJ55CB4P2Z3MPSX3UPMVF6AC
YFIVTYI7PMVAXV23DUPXPAQNEY3YSFIXQGSN32I3WVHMMD5XS5DQC
A7JEFZOEUX436TOZQX4IKYNOGBAOOUBAPA7JRZGEMLGLOGSTM5AAC
Y2NYY7HWFZ2LQDK3ACSLGS37F2J2IJ5LRGCIMZYXLEOSVPD3A4DAC
spell_type which_spell_in_book(const item_def &book, int spl)
{
ASSERT(book.base_type == OBJ_BOOKS || book.base_type == OBJ_STAVES);
const CrawlHashTable &props = book.props;
if (!props.exists( SPELL_LIST_KEY ))
return which_spell_in_book(book.book_number(), spl);
const CrawlVector &spells = props[SPELL_LIST_KEY].get_vector();
// converting sub_type into book index type
const int type = istaff.book_number();
if ((idx >= SPELLBOOK_SIZE) || !is_valid_spell_in_book(type, idx))
if ((idx >= SPELLBOOK_SIZE) || !is_valid_spell_in_book(istaff, idx))
}
}
static bool _compare_spell_dificulties(spell_type a, spell_type b)
{
return (spell_difficulty(a) < spell_difficulty(b));
}
static void _init_randart_book(item_def &book)
{
spell_type spells[SPELLBOOK_SIZE];
int spell_count = 0;
while(spell_count < SPELLBOOK_SIZE)
{
spell_type spl = static_cast<spell_type>(random2(NUM_SPELLS));
if (!is_valid_spell(spl))
continue;
// Skip monster only spells.
if (get_spell_flags(spl) & SPFLAG_MONSTER)
continue;
// Holy spells don't show up in books.
if (spell_typematch(spl, SPTYP_HOLY))
continue;
// Don't include schoolless spells, like Smiting.
if (get_spell_disciplines(spl) == 0)
continue;
// This spell passes all of the other checks.
if (spl == SPELL_DEBUGGING_RAY)
continue;
// No duplicate spells.
bool present = false;
for (int i = 0; i < spell_count; i++)
if (spells[i] == spl)
{
present = true;
break;
}
if (present)
continue;
spells[spell_count++] = spl;
std::sort(spells, spells + SPELLBOOK_SIZE, _compare_spell_dificulties);
CrawlHashTable &props = book.props;
if (!props.exists( SPELL_LIST_KEY ))
props[SPELL_LIST_KEY].new_vector(SV_LONG).resize(SPELLBOOK_SIZE);
CrawlVector &spell_vec = props[SPELL_LIST_KEY];
spell_vec.set_max_size(SPELLBOOK_SIZE);
for (int i = 0; i < SPELLBOOK_SIZE; i++)
spell_vec[i] = (long) spells[i];
######################################################
# Books (NOTE: just a placeholder for now)
######################################################
book
@armour@
%%%%
book appearance
@armour appearance@
%%%%