summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spl-book.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-03-23 21:08:10 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-03-23 21:08:10 +0000
commit2bcedfdf3c59078e54d15d03b3a9473ed4bdd44b (patch)
treeba54660d8b3ecaa06b113aa13c9f4c104a9d0fd1 /crawl-ref/source/spl-book.cc
parentc38a52f9377b9f87e66cdccfeab2abbaa72faad8 (diff)
downloadcrawl-ref-2bcedfdf3c59078e54d15d03b3a9473ed4bdd44b.tar.gz
crawl-ref-2bcedfdf3c59078e54d15d03b3a9473ed4bdd44b.zip
* 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
Diffstat (limited to 'crawl-ref/source/spl-book.cc')
-rw-r--r--crawl-ref/source/spl-book.cc115
1 files changed, 67 insertions, 48 deletions
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())