Attached Files |
0002-New-Time-Step.patch [^] (24,633 bytes) 2010-11-20 06:07 [Show Content] [Hide Content]From 28a16283ead2a680b98adf6da112a81f0fabd363 Mon Sep 17 00:00:00 2001
From: valrus <thevalrus@hotmail.com>
Date: Fri, 19 Nov 2010 20:49:48 -0800
Subject: [PATCH 2/2] New Time Step.
Allows players to stop time and walk around.
---
crawl-ref/source/abl-show.cc | 24 +++++++-
crawl-ref/source/enum.h | 6 ++-
crawl-ref/source/files.cc | 3 +
crawl-ref/source/godabil.cc | 93 ++++++++++++++++++---------
crawl-ref/source/godabil.h | 2 +
crawl-ref/source/godwrath.cc | 2 +-
crawl-ref/source/items.cc | 3 +
crawl-ref/source/main.cc | 147 +++++++++++++++++++++++++++++++++++-------
crawl-ref/source/misc.cc | 17 +++++-
crawl-ref/source/misc.h | 2 +
crawl-ref/source/ouch.cc | 2 +-
crawl-ref/source/output.cc | 2 +-
crawl-ref/source/player.cc | 1 +
crawl-ref/source/stairs.cc | 3 +-
crawl-ref/source/status.cc | 3 +
crawl-ref/source/view.cc | 8 ++-
crawl-ref/source/wiz-you.cc | 2 +
crawl-ref/source/xom.cc | 1 -
18 files changed, 257 insertions(+), 64 deletions(-)
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc
index 15ee86b..9618c8b 100644
--- a/crawl-ref/source/abl-show.cc
+++ b/crawl-ref/source/abl-show.cc
@@ -348,7 +348,9 @@ static const ability_def Ability_List[] =
{ ABIL_CHEIBRIADOS_TIME_BEND, "Bend Time", 3, 0, 50, 1, ABFLAG_NONE },
{ ABIL_CHEIBRIADOS_SLOUCH, "Slouch", 5, 0, 100, 8, ABFLAG_NONE },
{ ABIL_CHEIBRIADOS_TIME_STEP, "Step From Time",
- 10, 0, 200, 10, ABFLAG_NONE },
+ 10, 0, 0, 5, ABFLAG_NONE },
+ { ABIL_CHEIBRIADOS_END_TIME_STEP, "Step Back Into Time",
+ 0, 0, 0, 0, ABFLAG_NONE },
// Ashenzari
{ ABIL_ASHENZARI_TRANSFER_KNOWLEDGE, "Transfer Knowledge", 0, 0, 0, 10, ABFLAG_NONE},
@@ -725,6 +727,7 @@ static talent _get_talent(ability_type ability, bool check_confused)
case ABIL_TROG_BURN_SPELLBOOKS:
case ABIL_FEDHAS_FUNGAL_BLOOM:
case ABIL_CHEIBRIADOS_PONDEROUSIFY:
+ case ABIL_CHEIBRIADOS_END_TIME_STEP:
invoc = true;
perfect = true;
failure = 0;
@@ -1159,6 +1162,14 @@ static bool _check_ability_possible(const ability_def& abil,
}
return (true);
+ case ABIL_CHEIBRIADOS_TIME_STEP:
+ if (you.duration[DUR_TIME_FATIGUE])
+ {
+ mpr("You are too temporally fatigued to step out of time again!");
+ return (false);
+ }
+ return (true);
+
default:
return (true);
}
@@ -2041,6 +2052,10 @@ static bool _do_ability(const ability_def& abil)
cheibriados_time_step(you.skills[SK_INVOCATIONS]*you.piety/10);
break;
+ case ABIL_CHEIBRIADOS_END_TIME_STEP:
+ cheibriados_end_time_step(true);
+ break;
+
case ABIL_CHEIBRIADOS_TIME_BEND:
cheibriados_time_bend(16 + you.skills[SK_INVOCATIONS] * 8);
break;
@@ -2252,6 +2267,13 @@ std::vector<talent> your_talents(bool check_confused)
{
std::vector<talent> talents;
+ // If you stepped out of time, the only thing you can do is step back.
+ if (you.duration[DUR_TIME_STEP])
+ {
+ _add_talent(talents, ABIL_CHEIBRIADOS_END_TIME_STEP, false);
+ return (talents);
+ }
+
// Species-based abilities.
if (you.species == SP_MUMMY && you.experience_level >= 13)
_add_talent(talents, ABIL_MUMMY_RESTORATION, check_confused);
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 7ae61b3..7afad6f 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -109,6 +109,7 @@ enum ability_type
ABIL_FEDHAS_EVOLUTION,
ABIL_CHEIBRIADOS_PONDEROUSIFY,
ABIL_CHEIBRIADOS_TIME_STEP, // 250
+ ABIL_CHEIBRIADOS_END_TIME_STEP,
ABIL_CHEIBRIADOS_TIME_BEND,
ABIL_CHEIBRIADOS_SLOUCH,
ABIL_ASHENZARI_SCRYING,
@@ -181,6 +182,7 @@ enum attribute_type
ATTR_RND_LVL_BOOKS, // Bitfield of level-type randart spellbooks
// player has seen.
ATTR_NOISES, // A noisy artefact is equipped.
+ ATTR_ACCUMULATED_NOISE, // Noise accumulated while out of time.
ATTR_SHADOWS, // Lantern of shadows effect.
ATTR_FRUIT_FOUND, // Mask of fruit types found.
ATTR_LEV_UNCANCELLABLE, // Potion or spell of levitation is in effect.
@@ -1224,6 +1226,9 @@ enum duration_type
DUR_DIVINE_VIGOUR, // duration of Ely's Divine Vigour
DUR_DIVINE_STAMINA, // duration of Zin's Divine Stamina
DUR_DIVINE_SHIELD, // duration of TSO's Divine Shield
+ DUR_TIME_STEP, // duration of Chei's Step From Time
+ DUR_TIME_HALT, // duration of Chei's time halting wrath action
+ DUR_TIME_FATIGUE,
DUR_REGENERATION,
DUR_SWIFTNESS,
DUR_STONEMAIL,
@@ -1260,7 +1265,6 @@ enum duration_type
DUR_REPEL_STAIRS_CLIMB,
DUR_COLOUR_SMOKE_TRAIL,
DUR_SLIMIFY,
- DUR_TIME_STEP,
DUR_ICEMAIL_DEPLETED, // Wait this many turns for full Icemail
DUR_MISLED,
DUR_QUAD_DAMAGE,
diff --git a/crawl-ref/source/files.cc b/crawl-ref/source/files.cc
index 50f2c4d..ae31c12 100644
--- a/crawl-ref/source/files.cc
+++ b/crawl-ref/source/files.cc
@@ -1562,6 +1562,9 @@ bool load(dungeon_feature_type stair_taken, load_mode_type load_mode,
timeval /= 2;
timeval -= (stepdown_value(check_stealth(), 50, 50, 150, 150) / 10);
+
+ if (you.duration[DUR_TIME_STEP])
+ timeval = 0;
dprf("arrival time: %d", timeval);
diff --git a/crawl-ref/source/godabil.cc b/crawl-ref/source/godabil.cc
index 94911d3..9861c87 100644
--- a/crawl-ref/source/godabil.cc
+++ b/crawl-ref/source/godabil.cc
@@ -2389,44 +2389,34 @@ int cheibriados_slouch(int pow)
return (apply_area_visible(_slouch_monsters, pow, false, &you));
}
-void cheibriados_time_step(int pow) // pow is the number of turns to skip
+void cheibriados_time_step(int pow)
{
- const coord_def old_pos = you.pos();
-
+ assert(!you.duration[DUR_TIME_STEP]);
mpr("You step out of the flow of time.");
flash_view(LIGHTBLUE);
- you.moveto(coord_def(0, 0));
- you.duration[DUR_TIME_STEP] = pow;
-
- you.time_taken = 10;
- do
- {
- run_environment_effects();
- handle_monsters();
- manage_clouds();
- }
- while (--you.duration[DUR_TIME_STEP] > 0);
- // Update corpses, etc. This does also shift monsters, but only by
- // a tiny bit.
- update_level(pow * 10);
-
-#ifndef USE_TILE
- delay(1000);
+ // Keep the starting time step duration for piety drain purposes.
+ you.duration[DUR_TIME_STEP] = (int)((180 * pow * BASELINE_DELAY) / (2000 + 7 * pow));
+#ifdef DEBUG_DIAGNOSTICS
+ mprf("Time step with duration %i.", you.duration[DUR_TIME_STEP]);
#endif
+ autotoggle_autopickup(true);
+}
- monster* mon;
- if (mon = monster_at(old_pos))
- {
- mon->blink();
- if (mon = monster_at(old_pos))
- mon->teleport(true);
- }
-
- you.moveto(old_pos);
+void cheibriados_end_time_step(bool voluntary)
+{
+ if (voluntary)
+ mpr("You return to the normal time flow.");
+ else
+ mpr("You are unceremoniously dumped back into time's normal flow!");
+ int time_step_duration = you.duration[DUR_TIME_FATIGUE] / BASELINE_DELAY;
+ int loudness = you.attribute[ATTR_ACCUMULATED_NOISE];
you.duration[DUR_TIME_STEP] = 0;
-
flash_view(0);
- mpr("You return to the normal time flow.");
+ noisy(loudness, you.pos(), accumulated_step_noise_msg(loudness).c_str());
+ you.attribute[ATTR_ACCUMULATED_NOISE] = 0;
+ contaminate_player(time_step_duration / 4, true);
+ you.increase_duration(DUR_TIME_FATIGUE, roll_dice(time_step_duration, 4));
+ autotoggle_autopickup(false);
}
bool ashenzari_transfer_knowledge()
@@ -2478,3 +2468,44 @@ bool ashenzari_transfer_knowledge()
return true;
}
+
+// This is kept for Chei wrath, which makes no sense with the new one
+void cheibriados_old_time_step(int pow) // pow is the number of turns to skip
+{
+ const coord_def old_pos = you.pos();
+
+ mpr("You step out of the flow of time.");
+ flash_view(LIGHTBLUE);
+ you.moveto(coord_def(0, 0));
+ you.duration[DUR_TIME_HALT] = pow;
+
+ you.time_taken = 10;
+ do
+ {
+ run_environment_effects();
+ handle_monsters();
+ manage_clouds();
+ }
+ while (--you.duration[DUR_TIME_HALT] > 0);
+ // Update corpses, etc. This does also shift monsters, but only by
+ // a tiny bit.
+ update_level(pow * 10);
+
+#ifndef USE_TILE
+ delay(1000);
+#endif
+
+ monster* mon;
+ if (mon = monster_at(old_pos))
+ {
+ mon->blink();
+ if (mon = monster_at(old_pos))
+ mon->teleport(true);
+ }
+
+ you.moveto(old_pos);
+ you.duration[DUR_TIME_HALT] = 0;
+
+ flash_view(0);
+ mpr("You return to the normal time flow.");
+}
diff --git a/crawl-ref/source/godabil.h b/crawl-ref/source/godabil.h
index 0260706..ff69494 100644
--- a/crawl-ref/source/godabil.h
+++ b/crawl-ref/source/godabil.h
@@ -69,5 +69,7 @@ bool ponderousify_armour();
void cheibriados_time_bend(int pow);
int cheibriados_slouch(int pow);
void cheibriados_time_step(int pow);
+void cheibriados_end_time_step(bool voluntary);
bool ashenzari_transfer_knowledge();
+void cheibriados_old_time_step(int pow);
#endif
diff --git a/crawl-ref/source/godwrath.cc b/crawl-ref/source/godwrath.cc
index 5a4d4ab..2bb3fa6 100644
--- a/crawl-ref/source/godwrath.cc
+++ b/crawl-ref/source/godwrath.cc
@@ -385,7 +385,7 @@ static bool _cheibriados_retribution()
// Low tension
case 1:
mpr("Time shudders.");
- cheibriados_time_step(2+random2(4));
+ cheibriados_old_time_step(2+random2(4));
if (one_chance_in(3))
break;
// No tension wrath.
diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc
index c7f6401..145f3b4 100644
--- a/crawl-ref/source/items.cc
+++ b/crawl-ref/source/items.cc
@@ -2407,6 +2407,9 @@ bool can_autopickup()
if (!i_feel_safe())
return (false);
+ if (you.duration[DUR_TIME_STEP])
+ return (false);
+
return (true);
}
diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc
index 49bd858..e75ba7a 100644
--- a/crawl-ref/source/main.cc
+++ b/crawl-ref/source/main.cc
@@ -1371,8 +1371,10 @@ static void _go_upstairs()
}
tag_followers(); // Only those beside us right now can follow.
+
start_delay(DELAY_ASCENDING_STAIRS,
- 1 + (you.burden_state > BS_UNENCUMBERED));
+ (you.duration[DUR_TIME_STEP] ? 0 :
+ 1 + (you.burden_state > BS_UNENCUMBERED)));
}
static void _go_downstairs()
@@ -1445,7 +1447,7 @@ static void _go_downstairs()
you.duration[DUR_MISLED] = 0;
}
- if (shaft)
+ if (shaft || you.duration[DUR_TIME_STEP])
{
start_delay(DELAY_DESCENDING_STAIRS, 0);
}
@@ -1686,11 +1688,40 @@ static void _do_list_gold()
shopping_list.display();
}
+static bool _cmd_allowed_out_of_time(command_type cmd)
+{
+ // Abilities that can be performed while in Step From Time.
+ if ((CMD_MOVE_LEFT <= cmd && cmd <= CMD_RUN_DOWN_RIGHT) ||
+ (CMD_GO_UPSTAIRS <= cmd && cmd <= CMD_TOGGLE_FRIENDLY_PICKUP) ||
+ (CMD_INSPECT_FLOOR <= cmd && cmd <= CMD_EXAMINE_OBJECT) ||
+ (cmd == CMD_QUIVER_ITEM) ||
+ (CMD_CYCLE_QUIVER_FORWARD <= cmd && cmd <= CMD_LIST_GOLD) ||
+ (CMD_CHARACTER_DUMP <= cmd && cmd <= CMD_WIZARD) ||
+ (cmd == CMD_USE_ABILITY))
+ return true;
+ else
+ return false;
+}
+
// Note that in some actions, you don't want to clear afterwards.
// e.g. list_jewellery, etc.
void process_command(command_type cmd)
{
apply_berserk_penalty = true;
+
+ if (you.duration[DUR_TIME_STEP])
+ {
+ if (!_cmd_allowed_out_of_time(cmd))
+ {
+ mpr("You cannot do that while out of the flow of time!");
+ return;
+ }
+ else
+ {
+ mprf("Doing command %i", cmd);
+ }
+ }
+
switch (cmd)
{
#ifdef USE_TILE
@@ -2041,6 +2072,31 @@ static void _decrement_durations()
{
int delay = you.time_taken;
+ if (you.duration[DUR_TIME_STEP])
+ {
+ if (_decrement_a_duration(DUR_TIME_STEP, BASELINE_DELAY,
+ NULL, coinflip(), "You feel your grasp on time slipping away!"))
+ {
+ cheibriados_end_time_step(false);
+ }
+ else
+ {
+ int curr_stealth = check_stealth();
+ if (!x_chance_in_y(curr_stealth, 520))
+ {
+ int loudness = random_range(1, 4);
+ you.attribute[ATTR_ACCUMULATED_NOISE] += loudness;
+ }
+ you.increase_duration(DUR_TIME_FATIGUE, 1);
+ }
+ return;
+ }
+ else
+ {
+ if (_decrement_a_duration(DUR_TIME_FATIGUE, delay))
+ mpr("You are no longer temporally fatigued.");
+ }
+
if (wearing_amulet(AMU_THE_GOURMAND))
{
if (you.duration[DUR_GOURMAND] < GOURMAND_MAX && coinflip())
@@ -2726,6 +2782,7 @@ static void _update_mold()
static void _player_reacts()
{
+
if (!you.cannot_act() && !player_mutation_level(MUT_BLURRY_VISION)
&& x_chance_in_y(you.traps_skill(), 50))
{
@@ -2739,16 +2796,17 @@ static void _player_reacts()
mprf(MSGCH_DIAGNOSTICS, "stealth: %d", stealth);
#endif
- if (you.attribute[ATTR_NOISES])
+ if (you.attribute[ATTR_NOISES] && !you.duration[DUR_TIME_STEP])
noisy_equipment();
if (you.attribute[ATTR_SHADOWS])
shadow_lantern_effect();
- if (player_mutation_level(MUT_DEMONIC_GUARDIAN))
+ if (player_mutation_level(MUT_DEMONIC_GUARDIAN) &&
+ !you.duration[DUR_TIME_STEP])
check_demonic_guardian();
- if (you.unrand_reacts != 0)
+ if (you.unrand_reacts != 0 && !you.duration[DUR_TIME_STEP])
unrand_reacts();
if (one_chance_in(10))
@@ -2774,6 +2832,9 @@ static void _player_reacts()
_decrement_durations();
+ if (you.duration[DUR_TIME_STEP])
+ return;
+
int capped_time = you.time_taken;
if (you.walking && capped_time > BASELINE_DELAY)
capped_time = BASELINE_DELAY;
@@ -2839,6 +2900,7 @@ void world_reacts()
you.turn_is_over = true;
religion_turn_end();
crawl_state.clear_god_acting();
+ // player_reacts in here?
}
#ifdef USE_TILE
@@ -2851,6 +2913,23 @@ void world_reacts()
_check_banished();
_check_shafts();
+
+ if (you.duration[DUR_TIME_STEP])
+ {
+ _player_reacts();
+ viewwindow();
+ // Moves while out of time still take turns, just not time.
+ if (you.num_turns != -1)
+ {
+ if (you.num_turns < INT_MAX)
+ you.num_turns++;
+ record_turn_timestamp();
+ update_turn_count();
+ msgwin_new_turn();
+ }
+ return;
+ }
+
_check_sanctuary();
run_environment_effects();
@@ -3817,6 +3896,7 @@ static void _move_player(coord_def move)
// you're not confused, or if both of you are inside a sanctuary.
const bool can_swap_places = targ_monst
&& !mons_is_stationary(targ_monst)
+ && !you.duration[DUR_TIME_STEP]
&& (targ_monst->wont_attack()
&& !you.confused()
|| is_sanctuary(you.pos())
@@ -3854,20 +3934,27 @@ static void _move_player(coord_def move)
}
else if (!can_swap_places) // attack!
{
- // XXX: Moving into a normal wall does nothing and uses no
- // turns or energy, but moving into a wall which contains
- // an invisible monster attacks the monster, thus allowing
- // the player to figure out which adjacent wall an invis
- // monster is in "for free".
- you.turn_is_over = true;
- you_attack(targ_monst->mindex(), true);
-
- // We don't want to create a penalty if there isn't
- // supposed to be one.
- if (you.berserk_penalty != NO_BERSERK_PENALTY)
- you.berserk_penalty = 0;
-
- attacking = true;
+ if (you.duration[DUR_TIME_STEP]) {
+ mpr("You cannot interact with a creature that is still in time's flow!");
+ return;
+ }
+ else
+ {
+ // XXX: Moving into a normal wall does nothing and uses no
+ // turns or energy, but moving into a wall which contains
+ // an invisible monster attacks the monster, thus allowing
+ // the player to figure out which adjacent wall an invis
+ // monster is in "for free".
+ you.turn_is_over = true;
+ you_attack(targ_monst->mindex(), true);
+
+ // We don't want to create a penalty if there isn't
+ // supposed to be one.
+ if (you.berserk_penalty != NO_BERSERK_PENALTY)
+ you.berserk_penalty = 0;
+
+ attacking = true;
+ }
}
}
@@ -3891,8 +3978,15 @@ static void _move_player(coord_def move)
random_range(3, 10), KC_OTHER, 0, ETC_RANDOM);
}
- you.time_taken *= player_movement_speed();
- you.time_taken /= 10;
+ if (you.duration[DUR_TIME_STEP])
+ {
+ you.time_taken = 0;
+ }
+ else
+ {
+ you.time_taken *= player_movement_speed();
+ you.time_taken /= 10;
+ }
move_player_to_grid(targ, true, false);
@@ -3906,8 +4000,15 @@ static void _move_player(coord_def move)
// BCR - Easy doors single move
if (Options.easy_open && !attacking && feat_is_closed_door(targ_grid))
{
- _open_door(move.x, move.y, false);
- you.prev_move = move;
+ if (!you.duration[DUR_TIME_STEP])
+ {
+ _open_door(move.x, move.y, false);
+ you.prev_move = move;
+ }
+ else
+ {
+ mpr("You cannot change the temporal world while out of time.");
+ }
}
if (!targ_pass && grd(targ) == DNGN_TEMP_PORTAL && !attacking)
{
diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc
index 0020a39..c611c3c 100644
--- a/crawl-ref/source/misc.cc
+++ b/crawl-ref/source/misc.cc
@@ -2463,7 +2463,8 @@ void maybe_id_ring_TC()
void entered_malign_portal(actor* act)
{
if (you.can_see(act))
- mprf("The portal repels %s, its terrible forces doing untold damage!", (act->atype() == ACT_PLAYER) ? "you" : act->name(DESC_NOCAP_THE).c_str());
+ mprf("The portal repels %s, its terrible forces doing untold damage!",
+ (act->atype() == ACT_PLAYER) ? "you" : act->name(DESC_NOCAP_THE).c_str());
act->blink(false);
if (act->atype() == ACT_PLAYER)
@@ -2473,3 +2474,17 @@ void entered_malign_portal(actor* act)
return;
}
+
+std::string accumulated_step_noise_msg(int loudness)
+{
+ if (loudness == 0)
+ return "Your return to the flow of time is utterly silent.";
+ if (loudness < 7)
+ return "There is a soft thump as your footsteps all sound at once.";
+ else if (loudness < 12)
+ return "With a clatter, the sounds of your movement all occur at once.";
+ else if (loudness < 25)
+ return "There is a ruckus as all your accumulated noise sounds instantly!";
+ else
+ return "The accumulated sounds of your movement erupt in a simultaneous cacophony!";
+}
diff --git a/crawl-ref/source/misc.h b/crawl-ref/source/misc.h
index 835b05c..04bcff7 100644
--- a/crawl-ref/source/misc.h
+++ b/crawl-ref/source/misc.h
@@ -116,4 +116,6 @@ void swap_with_monster(monster* mon_to_swap);
void maybe_id_ring_TC();
void entered_malign_portal(actor* act);
+
+std::string accumulated_step_noise_msg(int loudness);
#endif
diff --git a/crawl-ref/source/ouch.cc b/crawl-ref/source/ouch.cc
index 00f07ff..156d714 100644
--- a/crawl-ref/source/ouch.cc
+++ b/crawl-ref/source/ouch.cc
@@ -1069,7 +1069,7 @@ void ouch(int dam, int death_source, kill_method_type death_type,
const char *aux, bool see_source, const char *death_source_name)
{
ASSERT(!crawl_state.game_is_arena());
- if (you.duration[DUR_TIME_STEP])
+ if (you.duration[DUR_TIME_HALT])
return;
if (you.dead) // ... but eligible for revival
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index a07aba2..3e700e2 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -507,7 +507,7 @@ static void _get_status_lights(std::vector<status_light>& out)
STATUS_SPEED, DUR_DEATH_CHANNEL, DUR_TELEPATHY, DUR_STEALTH,
DUR_BREATH_WEAPON, DUR_EXHAUSTED, DUR_POWERED_BY_DEATH,
DUR_TRANSFORMATION, DUR_AFRAID, DUR_MIRROR_DAMAGE, DUR_SCRYING,
- STATUS_CLINGING,
+ STATUS_CLINGING, DUR_TIME_FATIGUE
};
status_info inf;
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index c5600d9..ebd28d0 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -3432,6 +3432,7 @@ int get_expiration_threshold(duration_type dur)
return (3 * BASELINE_DELAY); // per client.qc
case DUR_FIRE_SHIELD:
+ case DUR_TIME_STEP:
case DUR_SILENCE: // no message
return (5 * BASELINE_DELAY);
diff --git a/crawl-ref/source/stairs.cc b/crawl-ref/source/stairs.cc
index 1515621..fb5f97d 100644
--- a/crawl-ref/source/stairs.cc
+++ b/crawl-ref/source/stairs.cc
@@ -745,7 +745,8 @@ void up_stairs(dungeon_feature_type force_stair,
_update_travel_cache(collect_travel_data, old_level, stair_pos);
viewwindow();
- seen_monsters_react();
+ if (!you.duration[DUR_TIME_STEP])
+ seen_monsters_react();
// Left Zot without enough runes to get back in (because they were
// destroyed), but need to get back in Zot to get the Orb?
diff --git a/crawl-ref/source/status.cc b/crawl-ref/source/status.cc
index dc00f7f..a74e09e 100644
--- a/crawl-ref/source/status.cc
+++ b/crawl-ref/source/status.cc
@@ -114,6 +114,9 @@ static duration_def duration_data[] =
{ DUR_SCRYING, false,
LIGHTBLUE, "Scry", "scrying",
"Your astral vision lets you see through walls." },
+ { DUR_TIME_FATIGUE, true,
+ BLUE, "Time", "temporally fatigued",
+ "You are unable to undertake any serious temporal manipulation." },
};
static int duration_index[NUM_DURATIONS];
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index b5a9a06..787cf54 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -122,7 +122,9 @@ void flush_comes_into_view()
void seen_monsters_react()
{
- if (you.duration[DUR_TIME_STEP] || crawl_state.game_is_arena())
+ if (you.duration[DUR_TIME_HALT] ||
+ crawl_state.game_is_arena() ||
+ you.duration[DUR_TIME_STEP])
return;
for (monster_iterator mi(you.get_los()); mi; ++mi)
@@ -566,6 +568,8 @@ static int _viewmap_flash_colour()
return (DARKGREY);
else if (you.berserk())
return (RED);
+ else if (you.duration[DUR_TIME_STEP])
+ return (LIGHTBLUE);
return (BLACK);
}
@@ -860,7 +864,7 @@ static bool _show_terrain = false;
//---------------------------------------------------------------
void viewwindow(bool show_updates)
{
- if (you.duration[DUR_TIME_STEP])
+ if (you.duration[DUR_TIME_HALT])
return;
screen_cell_t *cell(crawl_view.vbuf);
diff --git a/crawl-ref/source/wiz-you.cc b/crawl-ref/source/wiz-you.cc
index b8fc916..57500aa 100644
--- a/crawl-ref/source/wiz-you.cc
+++ b/crawl-ref/source/wiz-you.cc
@@ -766,6 +766,8 @@ static const char* dur_names[] =
"coloured smoke trail",
"slimify",
"time step",
+ "time halt",
+ "temporally fatigued",
"icemail depleted",
"misled",
"quad damage",
diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc
index 17b57bf..7c76cdc 100644
--- a/crawl-ref/source/xom.cc
+++ b/crawl-ref/source/xom.cc
@@ -3315,7 +3315,6 @@ static int _xom_colour_smoke_trail(bool debug = false)
const std::string speech = _get_xom_speech("colour smoke trail");
god_speaks(GOD_XOM, speech.c_str());
->>>>>>> 9d8bd352a1d3761df0dcd29e6fb6e46fb44e3fb5
return (XOM_BAD_COLOUR_SMOKE_TRAIL);
}
--
1.7.3.1
|