summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorCharles Otto <ottochar@gmail.com>2009-11-14 23:11:18 -0500
committerCharles Otto <ottochar@gmail.com>2009-11-15 23:46:20 -0500
commit69950a6dbd369a11ff0b4d0438aaf07890b57b29 (patch)
treeba6f009f5fea6288f1ffab5d8af7c7036dddfd26 /crawl-ref
parent2a1149664ad5a73fc6a978394acbf680c18a2117 (diff)
downloadcrawl-ref-69950a6dbd369a11ff0b4d0438aaf07890b57b29.tar.gz
crawl-ref-69950a6dbd369a11ff0b4d0438aaf07890b57b29.zip
Changes to _decrement_a_duration
Make _decrement_a_duration accept a delay as a parameter, make all calls to decrement_a_duration give it a delay. Adjust the thresholds in get_expiration_threshold to be proportional to baseline delay.
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/main.cc134
-rw-r--r--crawl-ref/source/player.cc10
2 files changed, 84 insertions, 60 deletions
diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc
index 2ab84ac7c3..198328964b 100644
--- a/crawl-ref/source/main.cc
+++ b/crawl-ref/source/main.cc
@@ -2125,8 +2125,9 @@ static void _prep_input()
// NOTE: The maximum possible midloss should be smaller than midpoint,
// otherwise the duration may end in the same turn the warning
// message is printed which would be a bit late.
-static bool _decrement_a_duration(duration_type dur, const char* endmsg = NULL,
- int midloss = 0, const char* midmsg = NULL,
+static bool _decrement_a_duration(duration_type dur, int delay,
+ const char* endmsg = NULL, int midloss = 0,
+ const char* midmsg = NULL,
msg_channel_type chan = MSGCH_DURATION)
{
if (you.duration[dur] < 1)
@@ -2134,8 +2135,15 @@ static bool _decrement_a_duration(duration_type dur, const char* endmsg = NULL,
const int midpoint = get_expiration_threshold(dur);
- you.duration[dur]--;
- if (you.duration[dur] == midpoint)
+
+ int old_dur = you.duration[dur];
+
+ you.duration[dur] -= delay;
+ if (you.duration[dur] < 0)
+ you.duration[dur] = 0;
+
+ // Did we cross the mid point? (No longer likely to hit it exactly) -cao
+ if (you.duration[dur] <= midpoint && old_dur > midpoint)
{
if (midmsg)
mpr(midmsg, chan);
@@ -2182,10 +2190,10 @@ static void _decrement_durations()
}
// Must come before might/haste/berserk.
- if (_decrement_a_duration(DUR_BUILDING_RAGE))
+ if (_decrement_a_duration(DUR_BUILDING_RAGE, delay))
go_berserk(false);
- if (_decrement_a_duration(DUR_SLEEP))
+ if (_decrement_a_duration(DUR_SLEEP, delay))
you.awake();
// Sticky flame paradox: It both lasts longer and does more damage
@@ -2195,27 +2203,27 @@ static void _decrement_durations()
// move around more.
dec_napalm_player();
- if (_decrement_a_duration(DUR_ICY_ARMOUR,
+ if (_decrement_a_duration(DUR_ICY_ARMOUR, delay,
"Your icy armour evaporates.", coinflip(),
"Your icy armour starts to melt."))
{
you.redraw_armour_class = true;
}
- if (_decrement_a_duration(DUR_SILENCE, "Your hearing returns."))
+ if (_decrement_a_duration(DUR_SILENCE, delay, "Your hearing returns."))
you.attribute[ATTR_WAS_SILENCED] = 0;
- _decrement_a_duration(DUR_REPEL_MISSILES,
+ _decrement_a_duration(DUR_REPEL_MISSILES, delay,
"You feel less protected from missiles.",
coinflip(),
"Your repel missiles spell is about to expire...");
- _decrement_a_duration(DUR_DEFLECT_MISSILES,
+ _decrement_a_duration(DUR_DEFLECT_MISSILES, delay,
"You feel less protected from missiles.",
coinflip(),
"Your deflect missiles spell is about to expire...");
- if (_decrement_a_duration(DUR_REGENERATION,
+ if (_decrement_a_duration(DUR_REGENERATION, delay,
NULL, coinflip(),
"Your skin is crawling a little less now."))
{
@@ -2297,7 +2305,7 @@ static void _decrement_durations()
if (you.species != SP_VAMPIRE || !player_in_bat_form()
|| you.duration[DUR_TRANSFORMATION] <= 5)
{
- if (_decrement_a_duration(DUR_TRANSFORMATION, NULL, random2(3),
+ if (_decrement_a_duration(DUR_TRANSFORMATION, delay, NULL, random2(3),
"Your transformation is almost over."))
{
untransform();
@@ -2306,17 +2314,18 @@ static void _decrement_durations()
}
// Must come after transformation duration.
- _decrement_a_duration(DUR_BREATH_WEAPON, "You have got your breath back.",
- 0, NULL, MSGCH_RECOVERY);
+ _decrement_a_duration(DUR_BREATH_WEAPON, delay,
+ "You have got your breath back.", 0, NULL,
+ MSGCH_RECOVERY);
- _decrement_a_duration(DUR_SWIFTNESS,
+ _decrement_a_duration(DUR_SWIFTNESS, delay,
"You feel sluggish.", coinflip(),
"You start to feel a little slower.");
- _decrement_a_duration(DUR_INSULATION,
+ _decrement_a_duration(DUR_INSULATION, delay,
"You feel conductive.", coinflip(),
"You start to feel a little less insulated.");
- if (_decrement_a_duration(DUR_STONEMAIL,
+ if (_decrement_a_duration(DUR_STONEMAIL, delay,
"Your scaly stone armour disappears.",
coinflip(),
"Your scaly stone armour is starting "
@@ -2326,7 +2335,7 @@ static void _decrement_durations()
burden_change();
}
- if (_decrement_a_duration(DUR_PHASE_SHIFT,
+ if (_decrement_a_duration(DUR_PHASE_SHIFT, delay,
"You are firmly grounded in the material plane once more.",
coinflip(),
"You feel closer to the material plane."))
@@ -2334,12 +2343,15 @@ static void _decrement_durations()
you.redraw_evasion = true;
}
- if (_decrement_a_duration(DUR_SEE_INVISIBLE) && !you.can_see_invisible())
+ if (_decrement_a_duration(DUR_SEE_INVISIBLE, delay)
+ && !you.can_see_invisible())
+ {
mpr("Your eyesight blurs momentarily.", MSGCH_DURATION);
+ }
- _decrement_a_duration(DUR_TELEPATHY, "You feel less empathic.");
+ _decrement_a_duration(DUR_TELEPATHY, delay, "You feel less empathic.");
- if (_decrement_a_duration(DUR_CONDENSATION_SHIELD))
+ if (_decrement_a_duration(DUR_CONDENSATION_SHIELD, delay))
remove_condensation_shield();
if (you.duration[DUR_CONDENSATION_SHIELD] && player_res_cold() < 0)
@@ -2348,53 +2360,53 @@ static void _decrement_durations()
ouch(2 + random2avg(13, 2), NON_MONSTER, KILLED_BY_FREEZING);
}
- if (_decrement_a_duration(DUR_MAGIC_SHIELD,
+ if (_decrement_a_duration(DUR_MAGIC_SHIELD, delay,
"Your magical shield disappears."))
{
you.redraw_armour_class = true;
}
- if (_decrement_a_duration(DUR_STONESKIN, "Your skin feels tender."))
+ if (_decrement_a_duration(DUR_STONESKIN, delay, "Your skin feels tender."))
you.redraw_armour_class = true;
- if (_decrement_a_duration(DUR_TELEPORT))
+ if (_decrement_a_duration(DUR_TELEPORT, delay))
{
// Only to a new area of the abyss sometimes (for abyss teleports).
you_teleport_now(true, one_chance_in(5));
untag_followers();
}
- _decrement_a_duration(DUR_CONTROL_TELEPORT,
+ _decrement_a_duration(DUR_CONTROL_TELEPORT, delay,
"You feel uncertain.", coinflip(),
"You start to feel a little uncertain.");
- if (_decrement_a_duration(DUR_DEATH_CHANNEL,
+ if (_decrement_a_duration(DUR_DEATH_CHANNEL, delay,
"Your unholy channel expires.", coinflip(),
"Your unholy channel is weakening."))
{
you.attribute[ATTR_DIVINE_DEATH_CHANNEL] = 0;
}
- _decrement_a_duration(DUR_SAGE, "You feel less studious.");
- _decrement_a_duration(DUR_STEALTH, "You feel less stealthy.");
- _decrement_a_duration(DUR_RESIST_FIRE, "Your fire resistance expires.");
- _decrement_a_duration(DUR_RESIST_COLD, "Your cold resistance expires.");
- _decrement_a_duration(DUR_RESIST_POISON, "Your poison resistance expires.");
- _decrement_a_duration(DUR_SLAYING, "You feel less lethal.");
+ _decrement_a_duration(DUR_SAGE, delay, "You feel less studious.");
+ _decrement_a_duration(DUR_STEALTH, delay, "You feel less stealthy.");
+ _decrement_a_duration(DUR_RESIST_FIRE, delay, "Your fire resistance expires.");
+ _decrement_a_duration(DUR_RESIST_COLD, delay, "Your cold resistance expires.");
+ _decrement_a_duration(DUR_RESIST_POISON, delay, "Your poison resistance expires.");
+ _decrement_a_duration(DUR_SLAYING, delay, "You feel less lethal.");
- _decrement_a_duration(DUR_INVIS, "You flicker back into view.",
+ _decrement_a_duration(DUR_INVIS, delay, "You flicker back into view.",
coinflip(), "You flicker for a moment.");
- _decrement_a_duration(DUR_BARGAIN, "You feel less charismatic.");
- _decrement_a_duration(DUR_CONF, "You feel less confused.");
- _decrement_a_duration(DUR_LOWERED_MR, "You feel more resistant to magic.");
- _decrement_a_duration(DUR_SLIMIFY, "You feel less slimy.",
+ _decrement_a_duration(DUR_BARGAIN, delay, "You feel less charismatic.");
+ _decrement_a_duration(DUR_CONF, delay, "You feel less confused.");
+ _decrement_a_duration(DUR_LOWERED_MR, delay, "You feel more resistant to magic.");
+ _decrement_a_duration(DUR_SLIMIFY, delay, "You feel less slimy.",
coinflip(), "Your slime is starting to congeal.");
if (you.duration[DUR_PARALYSIS] || you.petrified())
{
- _decrement_a_duration(DUR_PARALYSIS);
- _decrement_a_duration(DUR_PETRIFIED);
+ _decrement_a_duration(DUR_PARALYSIS, delay);
+ _decrement_a_duration(DUR_PETRIFIED, delay);
if (!you.duration[DUR_PARALYSIS] && !you.petrified())
{
@@ -2403,16 +2415,17 @@ static void _decrement_durations()
}
}
- _decrement_a_duration(DUR_EXHAUSTED, "You feel less fatigued.");
+ _decrement_a_duration(DUR_EXHAUSTED, delay, "You feel less fatigued.");
- _decrement_a_duration(DUR_CONFUSING_TOUCH,
+ _decrement_a_duration(DUR_CONFUSING_TOUCH, delay,
((std::string("Your ") + your_hand(true)) +
" stop glowing.").c_str());
- _decrement_a_duration(DUR_SURE_BLADE,
+ _decrement_a_duration(DUR_SURE_BLADE, delay,
"The bond with your blade fades away.");
- if (_decrement_a_duration(DUR_MESMERISED, "You break out of your daze.",
+ if (_decrement_a_duration(DUR_MESMERISED, delay,
+ "You break out of your daze.",
0, NULL, MSGCH_RECOVERY))
{
you.clear_beholders();
@@ -2421,16 +2434,26 @@ static void _decrement_durations()
dec_slow_player();
dec_haste_player();
- if (_decrement_a_duration(DUR_MIGHT, "You feel a little less mighty now."))
+ if (_decrement_a_duration(DUR_MIGHT, delay,
+ "You feel a little less mighty now."))
+ {
modify_stat(STAT_STRENGTH, -5, true, "might running out");
+ }
- if (_decrement_a_duration(DUR_AGILITY, "You feel a little less agile now."))
+ if (_decrement_a_duration(DUR_AGILITY, delay,
+ "You feel a little less agile now."))
+ {
modify_stat(STAT_DEXTERITY, -5, true, "agility running out");
+ }
- if (_decrement_a_duration(DUR_BRILLIANCE, "You feel a little less clever now."))
+ if (_decrement_a_duration(DUR_BRILLIANCE, delay,
+ "You feel a little less clever now."))
+ {
modify_stat(STAT_INTELLIGENCE, -5, true, "brilliance running out");
+ }
- if (_decrement_a_duration(DUR_BERSERKER, "You are no longer berserk."))
+ if (_decrement_a_duration(DUR_BERSERKER, delay,
+ "You are no longer berserk."))
{
//jmf: Guilty for berserking /after/ berserk.
did_god_conduct(DID_STIMULANTS, 6 + random2(6));
@@ -2552,7 +2575,7 @@ static void _decrement_durations()
if (!you.permanent_levitation() && !you.permanent_flight())
{
- if (_decrement_a_duration(DUR_LEVITATION,
+ if (_decrement_a_duration(DUR_LEVITATION, delay,
"You float gracefully downwards.",
random2(6),
"You are starting to lose your buoyancy!"))
@@ -2565,9 +2588,10 @@ static void _decrement_durations()
}
}
- if (!you.permanent_flight())
+ if (!you.permanent_flight()
+ && _decrement_a_duration(DUR_CONTROLLED_FLIGHT, delay)
+ && you.airborne())
{
- if (_decrement_a_duration(DUR_CONTROLLED_FLIGHT) && you.airborne())
mpr("You lose control over your flight.", MSGCH_DURATION);
}
@@ -2624,21 +2648,21 @@ static void _decrement_durations()
}
else
{
- _decrement_a_duration(DUR_DEATHS_DOOR,
+ _decrement_a_duration(DUR_DEATHS_DOOR, delay,
"Your life is in your own hands again!",
random2(6),
"Your time is quickly running out!");
}
}
- if (_decrement_a_duration(DUR_DIVINE_VIGOUR))
+ if (_decrement_a_duration(DUR_DIVINE_VIGOUR, delay))
remove_divine_vigour();
- if (_decrement_a_duration(DUR_DIVINE_STAMINA))
+ if (_decrement_a_duration(DUR_DIVINE_STAMINA, delay))
remove_divine_stamina();
- _decrement_a_duration(DUR_REPEL_STAIRS_MOVE);
- _decrement_a_duration(DUR_REPEL_STAIRS_CLIMB);
+ _decrement_a_duration(DUR_REPEL_STAIRS_MOVE, delay);
+ _decrement_a_duration(DUR_REPEL_STAIRS_CLIMB, delay);
}
static void _check_banished()
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 92b30dc4bd..1ea762be1a 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -3341,7 +3341,7 @@ int get_expiration_threshold(duration_type dur)
{
case DUR_FIRE_SHIELD:
case DUR_SILENCE: // no message
- return (5);
+ return (5 * BASELINE_DELAY);
case DUR_DEFLECT_MISSILES:
case DUR_REPEL_MISSILES:
@@ -3356,21 +3356,21 @@ int get_expiration_threshold(duration_type dur)
case DUR_PHASE_SHIFT:
case DUR_CONTROL_TELEPORT:
case DUR_DEATH_CHANNEL:
- return (6);
+ return (6 * BASELINE_DELAY);
case DUR_LEVITATION:
case DUR_TRANSFORMATION: // not on status
case DUR_DEATHS_DOOR: // not on status
case DUR_SLIMIFY:
- return (10);
+ return (10 * BASELINE_DELAY);
// These get no messages when they "flicker".
case DUR_SAGE:
case DUR_BARGAIN:
- return (15);
+ return (15 * BASELINE_DELAY);
case DUR_CONFUSING_TOUCH:
- return (20);
+ return (20 * BASELINE_DELAY);
default:
return (0);