From 2bcedfdf3c59078e54d15d03b3a9473ed4bdd44b Mon Sep 17 00:00:00 2001 From: j-p-e-g Date: Mon, 23 Mar 2009 21:08:10 +0000 Subject: * Allow viewing of card descriptions from Triple Draw and Stack Deck. * Sort items in 'V' screen according to pickup menu sort order. * Name Xom's randart book gifts more randomly. * Colour items seen by 'x' with message colour tags and same for pickup messages. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9541 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/spl-book.cc | 115 +++++++++++++++++++++++++------------------ 1 file changed, 67 insertions(+), 48 deletions(-) (limited to 'crawl-ref/source/spl-book.cc') diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc index 7f6c98f44e..5d0a71b08e 100644 --- a/crawl-ref/source/spl-book.cc +++ b/crawl-ref/source/spl-book.cc @@ -1525,7 +1525,7 @@ int count_staff_spells(const item_def &item, bool need_id) return (0); const int type = item.book_number(); - if ( !item_is_rod(item) || type == -1) + if (!item_is_rod(item) || type == -1) return (0); int nspel = 0; @@ -2042,61 +2042,69 @@ bool make_book_level_randart(item_def &book, int level, int num_spells, // None of these books need a definite article prepended. book.props["is_named"].get_bool() = true; - std::string lookup; - if (level == 1) - lookup = "starting"; - else if (level <= 3 || level == 4 && coinflip()) - lookup = "easy"; - else if (level <= 6) - lookup = "moderate"; + std::string bookname; + if (god == GOD_XOM && coinflip()) + { + bookname = getRandNameString("book_noun") + " of " + + getRandNameString("Xom_book_title"); + } else - lookup = "difficult"; - - lookup += " level book"; + { + std::string lookup; + if (level == 1) + lookup = "starting"; + else if (level <= 3 || level == 4 && coinflip()) + lookup = "easy"; + else if (level <= 6) + lookup = "moderate"; + else + lookup = "difficult"; - std::string bookname; - // First try for names respecting the book's previous owner/author - // (if one exists), then check for general difficulty. - if (has_owner) - bookname = getRandNameString(lookup + " owner"); + lookup += " level book"; - if (!has_owner || bookname.empty()) - bookname = getRandNameString(lookup); + // First try for names respecting the book's previous owner/author + // (if one exists), then check for general difficulty. + if (has_owner) + bookname = getRandNameString(lookup + " owner"); - bookname = uppercase_first(bookname); - if (has_owner) - { - if (bookname.substr(0, 4) == "The ") - bookname = bookname.substr(4); - else if (bookname.substr(0, 2) == "A ") - bookname = bookname.substr(2); - else if (bookname.substr(0, 3) == "An ") - bookname = bookname.substr(3); - } + if (!has_owner || bookname.empty()) + bookname = getRandNameString(lookup); - if (bookname.empty()) - bookname = getRandNameString("book"); + bookname = uppercase_first(bookname); + if (has_owner) + { + if (bookname.substr(0, 4) == "The ") + bookname = bookname.substr(4); + else if (bookname.substr(0, 2) == "A ") + bookname = bookname.substr(2); + else if (bookname.substr(0, 3) == "An ") + bookname = bookname.substr(3); + } - if (bookname.find("@level@", 0) != std::string::npos) - { - std::string number; - switch (level) + if (bookname.find("@level@", 0) != std::string::npos) { - case 1: number = "One"; break; - case 2: number = "Two"; break; - case 3: number = "Three"; break; - case 4: number = "Four"; break; - case 5: number = "Five"; break; - case 6: number = "Six"; break; - case 7: number = "Seven"; break; - case 8: number = "Eight"; break; - case 9: number = "Nine"; break; - default: - number = ""; break; + std::string number; + switch (level) + { + case 1: number = "One"; break; + case 2: number = "Two"; break; + case 3: number = "Three"; break; + case 4: number = "Four"; break; + case 5: number = "Five"; break; + case 6: number = "Six"; break; + case 7: number = "Seven"; break; + case 8: number = "Eight"; break; + case 9: number = "Nine"; break; + default: + number = ""; break; + } + bookname = replace_all(bookname, "@level@", number); } - bookname = replace_all(bookname, "@level@", number); } + if (bookname.empty()) + bookname = getRandNameString("book"); + name += bookname; set_randart_name(book, name); @@ -2353,7 +2361,16 @@ bool make_book_theme_randart(item_def &book, int disc1, int disc2, if (disc1 == 0 && disc2 == 0) { if (!_get_weighted_discs(completely_random, god, disc1, disc2)) - return (false); + { + if (completely_random) + return (false); + + // Rather than give up at this point, choose schools randomly. + // This way, an acquirement won't fail once the player has + // seen all spells. + if (!_get_weighted_discs(true, god, disc1, disc2)) + return (false); + } } else if (disc2 == 0) disc2 = disc1; @@ -2625,7 +2642,9 @@ bool make_book_theme_randart(item_def &book, int disc1, int disc2, // Sometimes use a completely random title. std::string bookname = ""; - if (one_chance_in(20) && (owner.empty() || one_chance_in(3))) + if (owner == "Xom" && !one_chance_in(20)) + bookname = getRandNameString("Xom_book_title"); + else if (one_chance_in(20) && (owner.empty() || one_chance_in(3))) bookname = getRandNameString("random_book_title"); if (!bookname.empty()) -- cgit v1.2.3-54-g00ecf