summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2007-09-20 06:27:28 +0000
committerzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2007-09-20 06:27:28 +0000
commit3f915978c1319badcafec4effb1a1f20635a197b (patch)
tree51081b057fc5267bbb78bdbdb5ccde2b7d34a98e
parent826d3ffff46a67cbb812df9f279ab0b79f4e7e47 (diff)
downloadcrawl-ref-3f915978c1319badcafec4effb1a1f20635a197b.tar.gz
crawl-ref-3f915978c1319badcafec4effb1a1f20635a197b.zip
Inscribing an item with "=p" will, for Nemelexites, prevent just that item
from being sacrificed; "!p" still prevents an entire stack of items from being sacrificed, and the prompt message for "!p" is now clearer on that. Also, explictly marked stashes are never sacrificed by Nemelxites. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2158 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/docs/crawl_options.txt16
-rw-r--r--crawl-ref/source/describe.cc2
-rw-r--r--crawl-ref/source/religion.cc32
3 files changed, 41 insertions, 9 deletions
diff --git a/crawl-ref/docs/crawl_options.txt b/crawl-ref/docs/crawl_options.txt
index 4270556da8..ddb574ac42 100644
--- a/crawl-ref/docs/crawl_options.txt
+++ b/crawl-ref/docs/crawl_options.txt
@@ -711,9 +711,12 @@ stash_tracking = (all | explicit | dropped)
want it to keep track of. You do that by stepping onto the square
containing your stash of goodies and hitting Ctrl+S. The game will now
keep track of what's on the square, when you add and remove stuff from
- your stash. If you remove everything from that square, the game will
- stop tracking the square altogether. You can also erase a stash square
- with Ctrl-E.
+ your stash. You can also inscribe an item with "=s" to automatically
+ mark a square as a stash whenever that item is dropped. If you
+ remove everything from that square, the game will stop tracking
+ the square altogether. You can also erase a stash square with
+ Ctrl-E. Explicitly marked stashes will never be sacrificed by a
+ Nemelex Xobeh worshipper.
When stash_tracking is set to 'dropped', any square where you drop
something becomes a stash, and the game keeps track of all such
@@ -1112,7 +1115,12 @@ functional, namely all containing one of the following
!w -- before wielding this item, Crawl will ask for confirmation
!* -- any action with this item causes a prompt
!p -- Nemelex Xobeh worshippers will be prompted before
- sacrificing this item at the portable altar
+ sacrificing a stack of items containing an item with this
+ inscription; if the answer is "no", the whole stack will be
+ skipped, and none of the items sacrificed.
+ =p -- Nemelex Xobeh worshippers will be prompted before
+ sacrificing this particular item; if the answer is "no",
+ then Crawl will go on to sacrifice further items in the stack.
=g -- item will be picked up automatically if autopickup is on
=k -- item will be ignored in all listings on the ground
(it can still be picked up if it's the only item on the ground)
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index 7ec5fd1ea5..169a83af6f 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -3949,7 +3949,7 @@ static std::string religion_help( god_type god )
case GOD_NEMELEX_XOBEH:
result += "You can pray to sacrifice all items on your square. "
- "Inscribe items with !p or !* to avoid sacrificing "
+ "Inscribe items with !p, !* or =p to avoid sacrificing "
"them accidentally.";
break;
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index b3d48ea41b..76371d0065 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -67,6 +67,7 @@
#include "spl-book.h"
#include "spl-cast.h"
#include "spl-util.h"
+#include "stash.h"
#include "state.h"
#include "stuff.h"
#include "terrain.h"
@@ -742,6 +743,13 @@ static bool is_risky_sacrifice(const item_def& item)
static bool confirm_pray_sacrifice()
{
+ if (Options.stash_tracking == STM_EXPLICIT
+ && is_stash(you.x_pos, you.y_pos))
+ {
+ mpr("You can't sacrifice explictly marked stashes.");
+ return false;
+ }
+
for ( int i = igrd[you.x_pos][you.y_pos]; i != NON_ITEM;
i = mitm[i].link )
{
@@ -749,9 +757,9 @@ static bool confirm_pray_sacrifice()
if ( is_risky_sacrifice(item) ||
has_warning_inscription(item, OPER_PRAY) )
{
- std::string prompt = "Really sacrifice ";
+ std::string prompt = "Really sacrifice stack with ";
prompt += item.name(DESC_NOCAP_A);
- prompt += '?';
+ prompt += " in it?";
if ( !yesno(prompt.c_str(), false, 'n') )
return false;
}
@@ -2837,8 +2845,10 @@ void offer_items()
int i = igrd[you.x_pos][you.y_pos];
while (i != NON_ITEM)
{
- const int next = mitm[i].link; // in case we can't get it later.
- const int value = item_value( mitm[i], true );
+ item_def &item(mitm[i]);
+ const int next = item.link; // in case we can't get it later.
+ const int value = item_value( item, true );
+
if (!god_likes_item(you.religion, mitm[i]))
{
@@ -2855,6 +2865,20 @@ void offer_items()
switch (you.religion)
{
case GOD_NEMELEX_XOBEH:
+ if ( is_risky_sacrifice(item) ||
+ item.inscription.find("=p") != std::string::npos)
+ {
+ std::string msg = "Really sacrifice ";
+ msg += item.name(DESC_NOCAP_A);
+ msg += "?";
+
+ if (!yesno(msg.c_str()))
+ {
+ i = next;
+ continue;
+ }
+ }
+
you.sacrifice_value[mitm[i].base_type] += value;
if (you.attribute[ATTR_CARD_COUNTDOWN] && random2(800) < value)
{