summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spells3.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-04-25 23:35:17 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-04-25 23:35:17 +0000
commit4a746253d5b490b74bf195038b943583fe4c1017 (patch)
tree8630c8f492d66e6183507ba346e7a85f4d5036fe /crawl-ref/source/spells3.cc
parent3285cab37e38320a6fd566a035d96939e4fb9b3e (diff)
downloadcrawl-ref-4a746253d5b490b74bf195038b943583fe4c1017.tar.gz
crawl-ref-4a746253d5b490b74bf195038b943583fe4c1017.zip
Two changes:
1.) If Beogh can't find a nearby follower in LOS to bless, try again without the LOS restriction (but still nearby). If this also fails, recall a small amount of followers (1 + rnd(4) + rnd(4)) on the level. I don't think there's much harm in Beogh actively doing something you already have as an invocation as long as it doesn't make the invocation superfluous (and this doesn't). In this case, the chance of this happening should probably be lowered, and actual reinforcement should be rarer still. 2.) Identify magical staves if you have at least 4 skill levels in the corresponding spell school when wielding it, or gain the 4th level while wielding it. (I decided on 4 because that is what most mages start out with in their special school, and it seems a good enough treshold.) Prior to that, there's still the random identification chance at casting an appropriate spell, as before. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4639 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/spells3.cc')
-rw-r--r--crawl-ref/source/spells3.cc32
1 files changed, 12 insertions, 20 deletions
diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc
index 49b5086eef..4956ef00e1 100644
--- a/crawl-ref/source/spells3.cc
+++ b/crawl-ref/source/spells3.cc
@@ -1147,23 +1147,24 @@ bool project_noise(void)
*/
bool recall(char type_recalled)
{
- int loopy = 0; // general purpose looping variable {dlb}
- bool success = false; // more accurately: "apparent success" {dlb}
- int start_count = 0;
- int step_value = 1;
- int end_count = (MAX_MONSTERS - 1);
+ int loopy = 0; // general purpose looping variable {dlb}
+ bool success = false; // more accurately: "apparent success" {dlb}
+ int start_count = 0;
+ int step_value = 1;
+ int end_count = (MAX_MONSTERS - 1);
+
FixedVector < char, 2 > empty;
struct monsters *monster = 0; // NULL {dlb}
empty[0] = empty[1] = 0;
-// someone really had to make life difficult {dlb}:
-// sometimes goes through monster list backwards
+ // someone really had to make life difficult {dlb}:
+ // sometimes goes through monster list backwards
if (coinflip())
{
start_count = (MAX_MONSTERS - 1);
- end_count = 0;
- step_value = -1;
+ end_count = 0;
+ step_value = -1;
}
for (loopy = start_count; loopy != end_count; loopy += step_value)
@@ -1193,24 +1194,15 @@ bool recall(char type_recalled)
continue;
}
- if (empty_surrounds(you.x_pos, you.y_pos, DNGN_FLOOR, 3, false, empty))
+ if (empty_surrounds(you.x_pos, you.y_pos, DNGN_FLOOR, 3, false, empty)
+ && monster->move_to_pos( coord_def(empty[0], empty[1])) )
{
- // clear old cell pointer -- why isn't there a function for moving a monster?
- mgrd[monster->x][monster->y] = NON_MONSTER;
- // set monster x,y to new value
- monster->x = empty[0];
- monster->y = empty[1];
- // set new monster grid pointer to this monster.
- mgrd[monster->x][monster->y] = monster_index(monster);
-
// only informed if monsters recalled are visible {dlb}:
if (simple_monster_message(monster, " is recalled."))
success = true;
}
else
- {
break; // no more room to place monsters {dlb}
- }
}
if (!success)