summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/religion.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-03 23:07:39 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-03 23:07:39 +0000
commite2f74e90f41b7324f8b4e2fa880a1b32df131e68 (patch)
treeebb134a1b3a81e8c8c80b895f326a5050a75bf00 /crawl-ref/source/religion.cc
parent5c0a7e21f8aed760fde406bba577b696ad7f8e8a (diff)
downloadcrawl-ref-e2f74e90f41b7324f8b4e2fa880a1b32df131e68.tar.gz
crawl-ref-e2f74e90f41b7324f8b4e2fa880a1b32df131e68.zip
More tweaks of Zin:
1. Let sanctuaries shrink during the last few turns rather than suddently disappear when it times out. 2. Introduce donations (and remove item sacrifice) I suppose abilities will now have to become more expensive pietywise. I raised the piety cost of the sanctuary from 10 to 15, but that probably won't be enough. For the piety gain I introduced a new duration, DUR_PIETY_POOL that is filled with gold/200 * log(gold) upon donation and then leaks with 5% chance per turn one piety point into the actual piety. All numbers are open for discussion and change. Breaks saves. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3181 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/religion.cc')
-rw-r--r--crawl-ref/source/religion.cc56
1 files changed, 52 insertions, 4 deletions
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index d494b1c7ea..5f90ed56ea 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -26,6 +26,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <cmath>
#ifdef DOS
#include <dos.h>
@@ -1220,8 +1221,7 @@ bool did_god_conduct( conduct_type thing_done, int level, bool known,
case GOD_ELYVILON:
penance = level; // healer god cares more about this
// fall through
- case GOD_ZIN:
- case GOD_SHINING_ONE:
+ case GOD_ZIN: // in contrast to TSO, who doesn't mind martyrs
case GOD_OKAWARU:
piety_change = -level;
ret = true;
@@ -2070,7 +2070,11 @@ static bool zin_retribution()
}
if (success && !count_mutations())
+ {
simple_god_message(" rids your body of chaos!");
+ // lower penance a bit more for being particularly successful
+ dec_penance(god, 1);
+ }
break;
}
@@ -2112,7 +2116,7 @@ static bool zin_retribution()
simple_god_message(" booms out: \"Return to the light! REPENT!\"", god);
noisy( 25, you.x_pos, you.y_pos ); // same as scroll of noise
break;
- }
+ } // plus Smiting?
return false;
}
@@ -2876,6 +2880,7 @@ void excommunication(void)
take_note(Note(NOTE_LOSE_GOD, old_god));
you.duration[DUR_PRAYER] = 0;
+ you.duration[DUR_PIETY_POOL] = 0; // your loss
you.religion = GOD_NO_GOD;
you.piety = 0;
redraw_skill( you.your_name, player_title() );
@@ -3127,6 +3132,9 @@ static bool god_likes_item(god_type god, const item_def& item)
case GOD_NEMELEX_XOBEH:
return !is_deck(item);
+ case GOD_ZIN:
+ return item.base_type == OBJ_GOLD;
+
default:
return true;
}
@@ -3165,6 +3173,47 @@ void offer_items()
god_acting gdact;
+ // donate gold to gain piety distributed over time
+ if (you.religion == GOD_ZIN)
+ {
+ if (!you.gold)
+ {
+ mpr("You don't have anything to sacrifice.");
+ return;
+ }
+
+ if (!yesno("Do you wish to part with all of your money? ", true, 'n'))
+ return;
+
+ int donation_value = (int) (you.gold/200 * log(you.gold));
+#if DEBUG_DIAGNOSTICS || DEBUG_SACRIFICE || DEBUG_PIETY
+ mprf(MSGCH_DIAGNOSTICS, "A donation of $%d amounts to an "
+ "increase of piety by %d.", you.gold, donation_value);
+#endif
+ you.gold = 0;
+ you.redraw_gold = true;
+
+ if (donation_value < 1)
+ {
+ simple_god_message(" finds your generosity lacking.");
+ return;
+ }
+ else if (donation_value <= 5) // $100 or more
+ simple_god_message(" is satisfied with your donation.");
+ else if (donation_value <= 20) // about $400 or more
+ simple_god_message(" is pleased about your sacrifice.");
+ else if (donation_value <= 50) // about $1500 or more
+ simple_god_message(" is impressed by your generosity.");
+ else // about $3000 or more
+ simple_god_message(" is deeply moved by your generosity.");
+
+ you.duration[DUR_PIETY_POOL] += donation_value;
+ if (you.duration[DUR_PIETY_POOL] > 500)
+ you.duration[DUR_PIETY_POOL] = 500;
+
+ return; // doesn't accept anything else for sacrifice
+ }
+
int num_sacced = 0;
int i = igrd[you.x_pos][you.y_pos];
@@ -3238,7 +3287,6 @@ void offer_items()
you.sacrifice_value[item.base_type] += value;
break;
- case GOD_ZIN:
case GOD_OKAWARU:
case GOD_MAKHLEB:
if (mitm[i].base_type == OBJ_CORPSES