git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8865 c06c8d41-db1a-0410-9941-cceddc491573
5US6HAZNUVFLJCSX3YLML7U4ZR7HHXU3VM7U6JJEEULNCIPD7B6QC
BU3QQQKP33YOLVGTJBMCWJRQTEZHNBP7NTFITSZPCUXEZACVVPQQC
MPKLPZVOJEXF2ZBUWMKSLK4MTTB74K2XT7VJFB6O6WZ7SNDCF7FAC
F2C63N6XPW62MIAKMZVW7XT5IKN2G6DBOKID5J6LXMQLM2ACAXQAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
MG6LLF3XYCOEBQRX7TJ4MUTKM3IROYWUMZGCMYVW4TGDG36CJMJQC
ASH5CK6CPBKMLGGIRJ5GKTWMS5W3OBVHTL66RTYZIPFM6KFBYA3QC
SWE3F3BLKHYMJEJLXNFH3MR2E6VDEYXJ6DL7QLPP47BJEKEUCAMAC
PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC
PDOFPXD2X6VI23AHKCGQ5RVDBG74CNP2E3YOHKXLOARHHBXEK3HQC
JE3SMK7MKFSSNBOPA5RITTF5WOQSSAGUPUO3C2QHFOHA77IPAD3AC
AYAQKTO6HOZJ44NDH5UIP6WFNB54Z5EZ4UMUISIQ67ZOIDB6OIQAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
CYYY4OASJTLMNQPNC2H57XAHBRT7JYO6MDY3J5DX5PMWRYT7RRUQC
PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
MFONX2CQ4V7HA5NSD6P5NDDBXYDSKIOCYUKRZXJ4ZER2OKJWT2HQC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
HQTS3VQ6PNUZKHNVEWMML7JNAAAKL4DSW3KFSRCCSLGYTDHZFCCAC
U3KGUJJQWQORJIIFH3ADVNIEEX5HOX6KEOXO7DJSL7L3Z6GG3PAQC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
QXD3HX6QQ37PW6HVKIIKGFLO2ACROLUGKK66KFX7ED6SO4FDXB2AC
Z6XF4AIERIW4U4AR3HU2ILYFZ54IK4K4ORQ6JKCEWRO5LZODWDDAC
JBZ7NU4BB5PGQWCOSZHD5OQUHQIVOD4XGJLSJQ7BUGQEGPRTVGZQC
NK2TBKWOQBD2ZRGAO4Z3HMZPIN7UX3HNUS2YHEIJUUINUTRMPODQC
ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
ZLQAAP55CJ77XIJN3DZVPT4GTTVLIBFJLIJJKI6L5UBSHX7VUK6AC
3DQXSE4YGFBBDUWK4YEOFWW4UPWILWELFSLP37SL6BERGAZJC5YAC
B62ICMDTN5V7R7RBL4JALFVKEMVOOVLRSJASRNYS6CGFWBEEF5JQC
NQXYTPHC5ZBLJDIC5OVAUIDYYOXLPSGWUVD464ODH4KBHYGRDPPAC
WFED7ME7LXUZCZY3TWX7PCPW4EAA55W626CM2OOYVJTLI2BWFTVAC
DK362IHKSDADMUPD35NOTKM4WESQM37KG2PNOJRV2FGELDWULYPQC
475LL4U4ND6PTNV4XKC7WQAOJC7RF2VCCVX3DRILP2PKIBFYWE6QC
O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC
GBUB77EAYHOFY6GQ5IY3ZSBC7FSQFZZKYNBD5QMCQFIKFLYLWHOQC
67WH6I2XIMRRL26UM4FJJJZEMJIDPW5Q77FFNZGKWGTWS7GTCJ6QC
I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
RIGGVFYNCRFDUUCMIAN7SDEOUL4VMMZI6OYXZW72BVNI4WXJQXWQC
GMYJ4XEEKZASQWMXQZUME5VYCDBRODO7UJJUEZSVZBMSFVBFLK2AC
// last updated 29may2000 {dlb}
/* ***********************************************************************
* called from: bang - beam - direct - effects - fight - monstuff -
* mstuff2 - spells1 - spells2
* *********************************************************************** */
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: acr - effects - it_use2 - it_use3 - item_use - spell -
* spells - spells3 - spells4
* *********************************************************************** */
const int object = env.show(ep);
if (object && Options.tutorial_left)
{
if (grid_is_escape_hatch(grd(gc)))
{
learned_something_new(TUT_SEEN_ESCAPE_HATCH, gc);
}
else if (grid_is_branch_stairs(grd(gc)))
learned_something_new(TUT_SEEN_BRANCH, gc);
else if (is_feature('>', gc))
{
learned_something_new(TUT_SEEN_STAIRS, gc);
}
else if (is_feature('_', gc))
learned_something_new(TUT_SEEN_ALTAR, gc);
else if (grd(gc) == DNGN_CLOSED_DOOR)
learned_something_new(TUT_SEEN_DOOR, gc);
else if (grd(gc) == DNGN_ENTER_SHOP)
learned_something_new(TUT_SEEN_SHOP, gc);
if (igrd(gc) != NON_ITEM
&& Options.feature_item_brand != CHATTR_NORMAL
&& (is_feature('>', gc) || is_feature('<', gc)))
{
learned_something_new(TUT_STAIR_BRAND, gc);
}
}
tutorial_observe_cell(gc);
void tutorial_observe_cell(const coord_def& gc)
{
if (grid_is_escape_hatch(grd(gc)))
learned_something_new(TUT_SEEN_ESCAPE_HATCH, gc);
else if (grid_is_branch_stairs(grd(gc)))
learned_something_new(TUT_SEEN_BRANCH, gc);
else if (is_feature('>', gc))
learned_something_new(TUT_SEEN_STAIRS, gc);
else if (is_feature('_', gc))
learned_something_new(TUT_SEEN_ALTAR, gc);
else if (grd(gc) == DNGN_CLOSED_DOOR)
learned_something_new(TUT_SEEN_DOOR, gc);
else if (grd(gc) == DNGN_ENTER_SHOP)
learned_something_new(TUT_SEEN_SHOP, gc);
if (igrd(gc) != NON_ITEM
&& Options.feature_item_brand != CHATTR_NORMAL
&& (is_feature('>', gc) || is_feature('<', gc)))
{
learned_something_new(TUT_STAIR_BRAND, gc);
}
}
env.cloud[ cloud ].type = type;
env.cloud[ cloud ].decay = decay;
env.cloud[ cloud ].pos = p;
env.cloud[ cloud ].whose = whose;
env.cloud[ cloud ].killer = killer;
env.cloud[ cloud ].spread_rate = spread_rate;
env.cgrid(p) = cloud;
cloud_struct& c = env.cloud[cloud];
c.type = type;
c.decay = decay;
c.pos = p;
c.whose = whose;
c.killer = killer;
c.spread_rate = spread_rate;
env.cgrid(p) = cloud;
// water -> flaming clouds:
// lava -> freezing clouds:
if (env.cloud[cc].type == CLOUD_FIRE
&& grd(env.cloud[cc].pos) == DNGN_DEEP_WATER)
{
// Fire clouds dissipate faster over water,
// cold clouds dissipate faster over lava.
if (cloud.type == CLOUD_FIRE && grd(cloud.pos) == DNGN_DEEP_WATER)
}
else if (env.cloud[cc].type == CLOUD_COLD
&& grd(env.cloud[cc].pos) == DNGN_LAVA)
{
else if (cloud.type == CLOUD_COLD && grd(cloud.pos) == DNGN_LAVA)
env.cloud[ cloud ].type = CLOUD_NONE;
env.cloud[ cloud ].decay = 0;
env.cloud[ cloud ].pos.reset();
env.cloud[ cloud ].whose = KC_OTHER;
env.cloud[ cloud ].killer = KILL_NONE;
env.cloud[ cloud ].spread_rate = 0;
env.cgrid(cloud_pos) = EMPTY_CLOUD;
env.cgrid(c.pos) = EMPTY_CLOUD;
c.pos.reset();
if (env.cloud[ target_cgrid ].type >= CLOUD_GREY_SMOKE
&& env.cloud[ target_cgrid ].type <= CLOUD_STEAM
|| env.cloud[ target_cgrid ].type == CLOUD_STINK
|| env.cloud[ target_cgrid ].type == CLOUD_BLACK_SMOKE
|| env.cloud[ target_cgrid ].type == CLOUD_MIST
|| env.cloud[ target_cgrid ].decay <= 20) //soon gone
// There's already a cloud here. See if we can overwrite it.
cloud_struct& old_cloud = env.cloud[target_cgrid];
if (old_cloud.type >= CLOUD_GREY_SMOKE && old_cloud.type <= CLOUD_STEAM
|| old_cloud.type == CLOUD_STINK
|| old_cloud.type == CLOUD_BLACK_SMOKE
|| old_cloud.type == CLOUD_MIST
|| old_cloud.decay <= 20) // soon gone
if (env.cloud[ ci ].type >= CLOUD_GREY_SMOKE
&& env.cloud[ ci ].type <= CLOUD_STEAM
|| env.cloud[ ci ].type == CLOUD_STINK
|| env.cloud[ ci ].type == CLOUD_BLACK_SMOKE
|| env.cloud[ ci ].type == CLOUD_MIST
|| env.cloud[ ci ].decay <= 20) //soon gone
cloud_struct& cloud = env.cloud[ci];
if (cloud.type >= CLOUD_GREY_SMOKE && cloud.type <= CLOUD_STEAM
|| cloud.type == CLOUD_STINK
|| cloud.type == CLOUD_BLACK_SMOKE
|| cloud.type == CLOUD_MIST
|| cloud.decay <= 20) // soon gone
}
static void _regenerate_hp_and_mp()
{
// XXX: using an int tmp to fix the fact that hit_points_regeneration
// is only an unsigned char and is thus likely to overflow. -- bwr
int tmp = you.hit_points_regeneration;
if (you.hp < you.hp_max && !you.disease && !you.duration[DUR_DEATHS_DOOR])
tmp += player_regen();
while (tmp >= 100)
{
inc_hp(1, false);
tmp -= 100;
}
ASSERT( tmp >= 0 && tmp < 100 );
you.hit_points_regeneration = static_cast<unsigned char>(tmp);
// XXX: Doing the same as the above, although overflow isn't an
// issue with magic point regeneration, yet. -- bwr
tmp = you.magic_points_regeneration;
if (you.magic_points < you.max_magic_points)
tmp += 7 + you.max_magic_points / 2;
while (tmp >= 100)
{
inc_mp(1, false);
tmp -= 100;
}
ASSERT( tmp >= 0 && tmp < 100 );
you.magic_points_regeneration = static_cast<unsigned char>(tmp);
if (you.hp < you.hp_max && !you.disease && !you.duration[DUR_DEATHS_DOOR])
tmp += player_regen();
while (tmp >= 100)
{
inc_hp(1, false);
tmp -= 100;
}
ASSERT( tmp >= 0 && tmp < 100 );
you.hit_points_regeneration = static_cast< unsigned char >( tmp );
// XXX: Doing the same as the above, although overflow isn't an
// issue with magic point regeneration, yet. -- bwr
tmp = static_cast< int >( you.magic_points_regeneration );
if (you.magic_points < you.max_magic_points)
tmp += 7 + you.max_magic_points / 2;
while (tmp >= 100)
{
inc_mp(1, false);
tmp -= 100;
}
ASSERT( tmp >= 0 && tmp < 100 );
you.magic_points_regeneration = static_cast< unsigned char >( tmp );