git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7470 c06c8d41-db1a-0410-9941-cceddc491573
7G2RWMLC5YBT3W7DNXDGEA4SMTI524RJIH3VO7MOQYGBMQHML2MAC
PDOFPXD2X6VI23AHKCGQ5RVDBG74CNP2E3YOHKXLOARHHBXEK3HQC
VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
TO43FWKHNIA5MVDOFXYHQODTLBQYEZKX5UIUGID57436UF7G2EXQC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
T4IH76FA5TWHFOZUJFHLQXQJENJHWTUZZP4EGNA7D4GTZY7D4ZKAC
7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC
KT3JMGSH5VTNRV2H5POWZLYNXSIRE5CT2XW3ZID7FNZTXYOZG22QC
SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC
5B5DP5S6A6LQMKZYVLQAEMHQZWFWYDHPCKQGRNSCNNYIBQYZ6BIQC
TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC
// Adds a dungeon marker at the point of the level where returning from
// a labyrinth or portal vault should drop the player.
static void _mark_portal_return_point(const coord_def &pos)
{
// First toss all markers of this type. Stale markers are possible
// if the player goes to the Abyss from a portal vault /
// labyrinth, thus returning to this level without activating a
// previous portal vault exit marker.
const std::vector<map_marker*> markers = env.markers.get_all(MAT_FEATURE);
for (int i = 0, size = markers.size(); i < size; ++i)
env.markers.remove(markers[i]);
if (!env.markers.find(pos, MAT_FEATURE))
{
map_feature_marker *mfeat =
new map_feature_marker(pos, DNGN_EXIT_PORTAL_VAULT);
env.markers.add(mfeat);
}
}
grd[count_x][count_y] = featm->feat;
env.markers.remove(marker);
// [ds] Ensure we're activating the correct feature
// markers. Feature markers are also used for other
// things, notably to indicate the return point from
// a labyrinth or portal vault.
switch (featm->feat)
{
case DNGN_ENTER_COCYTUS:
case DNGN_ENTER_DIS:
case DNGN_ENTER_GEHENNA:
case DNGN_ENTER_TARTARUS:
grd[count_x][count_y] = featm->feat;
env.markers.remove(marker);
break;
default:
break;
}
if (stair_to_find == DNGN_EXIT_PORTAL_VAULT)
{
const coord_def pos(_dgn_find_feature_marker(stair_to_find));
if (in_bounds(pos))
{
if (map_marker *marker = env.markers.find(pos, MAT_FEATURE))
env.markers.remove(marker);
return (pos);
}
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_WARN, "Ouch, no portal vault exit point!");
#endif
stair_to_find = DNGN_FLOOR;
}