summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/abyss.cc
diff options
context:
space:
mode:
authorzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-08 22:30:06 +0000
committerzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-08 22:30:06 +0000
commit2259ae9b5e0e95180e07d2aefe0fcc3cdbad33a1 (patch)
tree3d932177c7e0ee9d219a49448a12d0ea904eef8f /crawl-ref/source/abyss.cc
parentb33d384a7fcbfdf0d8b48607819f303dafa54512 (diff)
downloadcrawl-ref-2259ae9b5e0e95180e07d2aefe0fcc3cdbad33a1.tar.gz
crawl-ref-2259ae9b5e0e95180e07d2aefe0fcc3cdbad33a1.zip
Preserve the floor properties around the player when doing an Abyss
area_shift() so that blood-splatter won't seem to appear out of nowehre. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5616 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/abyss.cc')
-rw-r--r--crawl-ref/source/abyss.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/crawl-ref/source/abyss.cc b/crawl-ref/source/abyss.cc
index 60b508a33b..cd8d1aa08f 100644
--- a/crawl-ref/source/abyss.cc
+++ b/crawl-ref/source/abyss.cc
@@ -386,6 +386,8 @@ static void abyss_lose_monster(monsters &mons)
mons.reset();
}
+#define LOS_DIAMETER (LOS_RADIUS * 2 + 1)
+
void area_shift(void)
/*******************/
{
@@ -393,6 +395,16 @@ void area_shift(void)
mpr("area_shift().", MSGCH_DIAGNOSTICS);
#endif
+ // Preserve floor props around the player, primarily so that
+ // blood-splatter doesn't appear out of nowhere when doing an
+ // area shift.
+ FixedArray<unsigned short, LOS_DIAMETER, LOS_DIAMETER> fprops;
+ const coord_def los_delta(LOS_RADIUS, LOS_RADIUS);
+ radius_iterator ri(you.pos(), LOS_RADIUS);
+
+ for ( ; ri; ++ri )
+ fprops(you.pos() - *ri + los_delta) = env.map(*ri).property;
+
xom_check_nearness_setup();
for (unsigned int i = 0; i < MAX_MONSTERS; i++)
@@ -479,6 +491,10 @@ void area_shift(void)
xom_check_nearness();
+ radius_iterator ri2(you.pos(), LOS_RADIUS);
+ for ( ; ri2; ++ri2 )
+ env.map(*ri2).property = fprops(you.pos() - *ri2 + los_delta);
+
mgen_data mons;
mons.level_type = LEVEL_ABYSS;
mons.proximity = PROX_AWAY_FROM_PLAYER;