diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-03-18 07:05:07 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-03-18 07:05:07 +0000 |
commit | 3fdf3ab24ea63ecde6537ea122e2ab1cd6b8d4f1 (patch) | |
tree | a838b57e94a87f84fcdbf3e551b365aec922259d /crawl-ref/source/monstuff.cc | |
parent | de11c27378236139089c48ecfb0b66457cc0d67c (diff) | |
download | crawl-ref-3fdf3ab24ea63ecde6537ea122e2ab1cd6b8d4f1.tar.gz crawl-ref-3fdf3ab24ea63ecde6537ea122e2ab1cd6b8d4f1.zip |
Banished uniques (including ghosts) will now be sent to the Abyss. Banished
non-uniques may also get the Abyss treatment if they clear a HD roll.
Crawl tries very hard not to lose banished monsters, preserving them across
Abyss shifts and teleports, and saving them on the transit list when the player
escapes the Abyss.
Breaks savefile compatibility.
Toned down Vehumet and wizardry boosts a touch.
Fixed bugginess where player could get aux unarmed attacks on a monster that
just teleported away (by weapon of distortion).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1052 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/monstuff.cc')
-rw-r--r-- | crawl-ref/source/monstuff.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index bf34d15dc1..eb8c5915a4 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -338,6 +338,7 @@ void monster_die(monsters *monster, char killer, int i, bool silent) int monster_killed = monster_index(monster); bool death_message = !silent && mons_near(monster) && player_monster_visible(monster); + bool in_transit = false; // From time to time Trog gives you a little bonus if (killer == KILL_YOU && you.berserker) @@ -660,6 +661,13 @@ void monster_die(monsters *monster, char killer, int i, bool silent) place_cloud( CLOUD_GREY_SMOKE_MON + random2(3), monster->x, monster->y, 1 + random2(3) ); + if (monster->needs_transit()) + { + monster->flags |= MF_BANISHED; + monster->set_transit( level_id(LEVEL_ABYSS) ); + in_transit = true; + } + // fall-through case KILL_DISMISSED: @@ -697,7 +705,7 @@ void monster_die(monsters *monster, char killer, int i, bool silent) random2avg(88, 3), 100, "a mummy death curse" ); } } - else if (monster->type == MONS_BORIS) + else if (monster->type == MONS_BORIS && !in_transit) { // XXX: actual blood curse effect for Boris? -- bwr @@ -2091,6 +2099,7 @@ static bool handle_enchantment(struct monsters *monster) if (monster->enchantment[p] < ENCH_ABJ_I) { + monster->enchantment[p] = ENCH_ABJ_I; monster_die(monster, KILL_RESET, 0); died = true; } |