I updated the tags, so it should be save compatible but I'm not making any promises.
Also fix the Wild magic card not being documented correctly.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10679 c06c8d41-db1a-0410-9941-cceddc491573
XDACRDVLDEUFUBN4L7ES5WBD3YSLBHMRZ4Q5PXIUMOK44D3TLWSAC
BSIG3VLGTR2XVKBNM3QGJA4WNRXCCAR5MJ7XB47SDHQCCVIAAVJAC
P3BJTL5YIPHLV3IZBMYM7FBS7QKTUPZVAS2353LCNUEGGSCR42RAC
GQQ6ASWTYODIHG7X32JNUUHP5NMOVZJIHWGS3F3MKRYZGAHP6NVQC
L4JPYWN3JUHIH2TCJUSVQOEWOMKGIO6I5C5QEIAMRBCXQ26V6HYAC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
PDOFPXD2X6VI23AHKCGQ5RVDBG74CNP2E3YOHKXLOARHHBXEK3HQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
TAHSTXR7ROOMDFUSBUU4ZAIEWQLAS5CIRCTARLD4Q2BGNLSL7E5QC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
WEZLXS4OSKPX6ZFFZZKKEO4NKG2QC4AFANVC34IYNDAEDGWJJHLQC
ZNMT5CZHP2FC4HTLNA7KYEDGFBXSCUE5QHJOALVPE6RDPHSEDXRQC
45OFFQNRRS46LXSPQ3SPNP2OXMBECE22A6NWQPITDEOXLRKYSQKAC
WF2DSJGR6PKLGQSXEFF4ZW4EZZFGMHXPXWUYAKYBPFJH6KJKAANQC
RS2Q66UPKG2NLNBE6UMX273UEVNGTNLVEITB2PCRVHZWTS2WXTAQC
GWGKGHFGBLVPDSSDWYFORHZHMWOR3SFC5PJNF732V7FEKWWJKPOAC
LLKV4OYGEDB4GVJS5JVBZP5JQFW7VMPZ2CBRSITJ5XCFS3QNWIBQC
AM7QPHDAWNXHLUEVUHVRHG2RO2DOIEFFU4GV3DCIROW6O5HW7H4AC
AVCMVFA3MKCXHO6H44UK5KJNIHTGQV7UA7GYXM26VI6TXXU5ZN6QC
52J7CYVAW3QCUEWA5OKWPDGOP6JZR5NJSE3JDLZFBCR7B6LH5ASAC
6PDCEA2CDME5PVGWTDVXI62APFIWKRDPZIBGO4DBYATYDZPPFU5QC
DOZORMA366M4HB5JKSS27BMCR6ET7QNZNND2B7KV3NVEEPR5H7EAC
HBPUTW5HDHUEPB62DMJ6GGP2D2GLZB53O5VRTWDLQ4Z53NWB3MKQC
PSCYVKJ7DGXAL3V5U4O6AJTRV6Q3N3SHQWAZ73VIPRTE4W64F2XAC
XYBPIU6AQ77EID4VNOMI7KQZULZI4VBZHHIGBRYO7QRJVCODEKYAC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
I2WJK6VZZCWKSJ2XQH7W4HXRNZZ2MSCKO65IIRFBGGMWMUZ2VZ6QC
I7QLYOTE6DLQZM7YWUWYLKHRJRB2A3STQ42ALSRGQICEWKD2QTEQC
VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC
LSFNAB57FI3ERTIMXZI6MRIN6Z6AUZSVX4RKIOEKQWREDP36IYDQC
HVEU33HIUHCYFINJMVSSOIRUPZGGVC7NMWUN2EADG2W373JP3WOAC
X26ED6BN3FPOBSGWRMLPUSKZTZTVUOWMWVWIBKFIPTBC526644FQC
7TYQGU6OE2XHYIHGHZZN22ER52TD5THR5ZHE2F76F7LE4HFKOSBAC
void toggle_exclude(const coord_def &p);
void set_exclude(const coord_def &p, int radius2);
void toggle_exclude(const coord_def &p, bool autoexcl = false);
void set_exclude(const coord_def &p, int radius2, bool autoexcl = false);
void maybe_remove_autoexclusion(const coord_def &p);
std::string get_exclusion_desc();
coord_def pos; // exclusion centre
int radius; // exclusion radisu
env_show_grid show; // los from exclusion centre
bool uptodate; // Is show up to date?
coord_def pos; // exclusion centre
int radius; // exclusion radius
bool autoexclude; // Was set automatically.
int mon; // Monster around which exclusion is centered.
env_show_grid show; // los from exclusion centre
bool uptodate; // Is show up to date?
travel_exclude(const coord_def &p, int r = LOS_RADIUS)
: pos(p), radius(r)
travel_exclude(const coord_def &p, int r = LOS_RADIUS,
bool autoexcl = false, int mons = NON_MONSTER)
: pos(p), radius(r), autoexclude(autoexcl), mon(mons)
}
}
// If a grid that was placed automatically no longer contains the original
// monster (or it is invisible), remove the exclusion.
void maybe_remove_autoexclusion(const coord_def &p)
{
ASSERT(in_bounds(p) && see_grid(p) && is_exclude_root(p));
for (int i = 0, count = curr_excludes.size(); i < count; ++i)
{
if (curr_excludes[i].pos == p)
{
if (curr_excludes[i].autoexclude)
{
const monsters *m = monster_at(p);
if (!m || !you.can_see(m) || m->type != curr_excludes[i].mon)
{
set_exclude(p, 0);
set_level_exclusion_annotation(get_exclusion_desc());
}
}
break;
}
}
}
// Lists alls exclusions on the current level.
std::string get_exclusion_desc()
{
std::vector<std::string> monsters;
int count_other = 0;
for (int i = 0, count = curr_excludes.size(); i < count; ++i)
{
if (curr_excludes[i].mon != NON_MONSTER)
monsters.push_back(get_monster_data(curr_excludes[i].mon)->name);
else
count_other++;
if (count_other > 0)
{
snprintf(info, INFO_SIZE, "%d %sexclusion%s",
count_other, monsters.empty() ? "" : "more ",
count_other > 1 ? "s" : "");
monsters.push_back(info);
}
else if (monsters.empty())
return "";
std::string desc = "";
if (monsters.size() > 1 || count_other == 0)
{
snprintf(info, INFO_SIZE, "exclusion%s: ",
monsters.size() > 1 ? "s" : "");
desc += info;
}
return (desc + comma_separated_line(monsters.begin(), monsters.end(),
", and ", ", "));
excludes.push_back(travel_exclude(c, radius));
bool autoexcl = false;
int mon = NON_MONSTER;
if (minorVersion >= TAG_ANNOTATE_EXCL)
{
autoexcl = unmarshallBoolean(inf);
mon = unmarshallShort(inf);
}
excludes.push_back(travel_exclude(c, radius, autoexcl, mon));
std::string get_level_annotation(level_id li)
void set_level_exclusion_annotation(std::string str, level_id li)
{
if (str.empty())
{
clear_level_exclusion_annotation(li);
return;
}
level_exclusions[li] = str;
}
void clear_level_exclusion_annotation(level_id li)
{
level_exclusions.erase(li);
}
std::string get_level_annotation(level_id li, bool skip_excl)
scrolls, casting spells, praying or yelling in the reader's vicinity
impossible. (Applies to reader too, of course.) This silence will not
hide your presence, since its oppressive, unnatural effect will almost
scrolls, casting spells, praying or yelling in the reader's vicinity
impossible. (Applies to reader too, of course.) This silence will not
hide your presence, since its oppressive, unnatural effect will almost
Wild Magic card
This card causes wild magic, as if from miscasting a spell, to act upon you.
It is usually only found in Nemelex Xobeh's deck of punishment.
%%%%