git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3053 c06c8d41-db1a-0410-9941-cceddc491573
O4DT3BQQ3XYPL6PQ72G6VPBAVHXZMEOLONFXNHXFMBXBVOYMB6VQC
RM2JXW3ATVYRYHF3NMG5ALGI64OJ7IP2F3MDUDPUT5TBKSSN4KVQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC
2WRXQTGYDBLV46WRNVIUKGNA5QS563XZNNW3N2L6PVOCHIP2YGHQC
DH3YTI6VVI727SQXO4CXSDCSBG2UN3UAWLFULBGRLBVH22ACRXIAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
2HNLFROSOZ6ROLX3Q3W5E7I4Y4ELIWSJ7EX5GDGZZOMRPTK6TBSAC
5QOOZTPUSDYZUJGFJ4BOYXEGZ7XBZZSEO7KPHENYRV465B66QSHAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
6RJVKSL7RVZIZIZIC4TWIYJQ24RUSB346ODS3NYGDHUIRTC4Z5FQC
LIBWXPN6HLJAIGEFJYLOL4HLIUD236U3WM5QPHIZ3DSB4CCUJERAC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
P2ZCF3BBG523ZEOD6XQA4X5YEHBTWH3IM33YVHXP2SQ5POXZIH4QC
static bool player_is_permalevitating()
{
return you.duration[DUR_LEVITATION] > 1 &&
((you.species == SP_KENKU && you.experience_level >= 15)
|| player_equip_ego_type( EQ_BOOTS, SPARM_LEVITATION ));
}
bool player::permanent_levitation() const
{
return airborne() &&
(permanent_flight() ||
// Boots of levitation keep you with DUR_LEVITATION >= 2 at
// all times. This is so that you can evoke stop-levitation
// in order to actually cancel levitation (by setting
// DUR_LEVITATION to 1.) Note that antimagic() won't do this.
(player_equip_ego_type( EQ_BOOTS, SPARM_LEVITATION ) &&
you.duration[DUR_LEVITATION] > 1));
}
bool player::permanent_flight() const
{
return airborne() &&
(you.species == SP_KENKU && you.experience_level >= 15);
}
bool perm = (you.species == SP_KENKU && you.experience_level >= 15)
|| (player_equip_ego_type( EQ_BOOTS, SPARM_LEVITATION ))
|| (you.attribute[ATTR_TRANSFORMATION] == TRAN_DRAGON);
const bool perm = you.permanent_flight();
if (player_is_airborne())
{
if (you.duration[DUR_CONTROLLED_FLIGHT])
mpr("You fly upwards.");
else
mpr("You float upwards... And bob straight up to the ceiling!");
}
if (you.flight_mode() == FL_FLY)
mpr("You fly upwards.");
else if (you.flight_mode() == FL_LEVITATE)
mpr("You float upwards... And bob straight up to the ceiling!");
if (player_equip_ego_type( EQ_BOOTS, SPARM_LEVITATION ))
you.duration[DUR_LEVITATION] = 2;
if (you.duration[DUR_LEVITATION] == 10)
if (!you.permanent_levitation())
{
if ( decrement_a_duration(DUR_LEVITATION,
"You float gracefully downwards.",
10, random2(6),
"You are starting to lose your buoyancy!") )
mpr("You are starting to lose your buoyancy!", MSGCH_DURATION);
you.duration[DUR_LEVITATION] -= random2(6);
if (you.duration[DUR_CONTROLLED_FLIGHT] > 0)
you.duration[DUR_CONTROLLED_FLIGHT] = you.duration[DUR_LEVITATION];
burden_change();
// Landing kills controlled flight.
you.duration[DUR_CONTROLLED_FLIGHT] = 0;
// re-enter the terrain:
move_player_to_grid( you.x_pos, you.y_pos, false, true, true );
else if (you.duration[DUR_LEVITATION] == 1)
{
mpr("You float gracefully downwards.", MSGCH_DURATION);
you.duration[DUR_LEVITATION] = 0;
burden_change();
you.duration[DUR_CONTROLLED_FLIGHT] = 0;
// re-enter the terrain:
move_player_to_grid( you.x_pos, you.y_pos, false, true, true );
}
if (!you.permanent_flight())
if ( decrement_a_duration(DUR_CONTROLLED_FLIGHT) && you.airborne() )
mpr("You lose control over your flight.", MSGCH_DURATION);