a Visitor for every dungeon level. The idea is to use this for galaxy-spanning effects, e.g. if you want to shuffle all the decks in existence or deconvert all the Beogh-converted orcs. Not well tested; might be buggy.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2960 c06c8d41-db1a-0410-9941-cceddc491573
XYBPIU6AQ77EID4VNOMI7KQZULZI4VBZHHIGBRYO7QRJVCODEKYAC
AFY6BHEVU67PXCVX6M3KUG5DTLOJTDGF3D4CQ4S7OMIB35WDSJAAC
EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC
AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC
OONYLF4DAPLIYLBNNRW74IVT5BBTWI4XHQBXSNSPVRX3FTKJBTRAC
ZLQAAP55CJ77XIJN3DZVPT4GTTVLIBFJLIJJKI6L5UBSHX7VUK6AC
UWMN4HLG6YA2YFQEVIVMDISD6APKEPIZXMMPMNUYCBQDSAUYSXPQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
ANOEQTM6IGCBTESKKQ5PCBSDTZ7VGRCMDIOAFEH4R7DJHKWKDFAAC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
IVVRQ52VA3MAD25ZMPID3GCRBBFYR54CH33DKXYTRAGUBLTRAZNAC
JUNF2JNFSVAITA6XQU3CEOMP5PG4PVSHKIGFTSUCYCN4ICPEXEKAC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
DOZORMA366M4HB5JKSS27BMCR6ET7QNZNND2B7KV3NVEEPR5H7EAC
SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
UURAYLSSITZLQR56MCWFPIWMECU7F3USMA2UPJAO4IPIY5WVKP5QC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC
W5VEC2PBIM5DMU5233HOWAZUEPTGWJRZZIA3H35YYQQW6BTP6XUAC
ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
char buf[200];
sprintf(buf, "Level annotation: %s\n",
get_level_annotation().c_str() );
mpr(buf, MSGCH_PLAIN, YELLOW);
mprf(MSGCH_PLAIN, YELLOW, "Level annotation: %s",
get_level_annotation().c_str());
void apply_to_all_dungeons(void (*applicator)())
{
const branch_type original_branch = you.where_are_you;
const int original_level = you.your_level;
const level_area_type original_type = you.level_type;
branch_type last_visited_branch = original_branch;
int last_visited_level = original_level;
const coord_def old_pos(you.pos());
// Apply to current level, then save it out.
applicator();
save_level(original_level, original_type, original_branch);
you.level_type = LEVEL_DUNGEON;
for ( int i = 0; i < MAX_LEVELS; ++i )
{
for ( int j = 0; j < NUM_BRANCHES; ++j )
{
if ( tmp_file_pairs[i][j] )
{
you.your_level = i;
you.where_are_you = static_cast<branch_type>(j);
// Don't apply to the original level - already done up top.
if ( original_type == you.level_type &&
original_level == you.your_level &&
original_branch == you.where_are_you )
continue;
// Load the dungeon level...
load( DNGN_STONE_STAIRS_DOWN_I, LOAD_VISITOR,
LEVEL_DUNGEON, last_visited_level,
last_visited_branch );
// Modify it...
applicator();
// And save it back.
save_level(you.your_level, LEVEL_DUNGEON, you.where_are_you);
last_visited_branch = you.where_are_you;
last_visited_level = you.your_level;
}
}
}
// Reload the original level.
you.where_are_you = original_branch;
you.your_level = original_level;
you.level_type = original_type;
load( DNGN_STONE_STAIRS_DOWN_I, LOAD_VISITOR,
original_type, original_level, original_branch );
}