summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJude Brown <bookofjude@users.sourceforge.net>2009-12-27 16:12:46 +1000
committerJude Brown <bookofjude@users.sourceforge.net>2009-12-27 16:12:46 +1000
commit5de602e8c54b9d7fa52df931345d492c8f51a6d9 (patch)
tree241431aa940da91bd637e6dc550839531afba986
parent6f1c1d411eafdf99552c1de588fae951dfcee467 (diff)
parent79479ce91ed4542ed9ceec458f9260cc5d579283 (diff)
downloadcrawl-ref-5de602e8c54b9d7fa52df931345d492c8f51a6d9.tar.gz
crawl-ref-5de602e8c54b9d7fa52df931345d492c8f51a6d9.zip
Merge branch 'master' into wizlab
-rw-r--r--crawl-ref/docs/develop/levels/syntax.txt12
-rw-r--r--crawl-ref/settings/init.txt3
-rw-r--r--crawl-ref/source/beam.cc57
-rw-r--r--crawl-ref/source/beam.h2
-rw-r--r--crawl-ref/source/dat/float.des6
-rw-r--r--crawl-ref/source/dat/lab.des20
-rw-r--r--crawl-ref/source/dat/mini.des2
-rw-r--r--crawl-ref/source/dat/temple.des14
-rw-r--r--crawl-ref/source/dat/uniques.des4
-rw-r--r--crawl-ref/source/dat/vaults.des187
-rw-r--r--crawl-ref/source/hiscores.cc10
-rw-r--r--crawl-ref/source/initfile.cc2
-rw-r--r--crawl-ref/source/it_use3.cc2
-rw-r--r--crawl-ref/source/item_use.cc21
-rw-r--r--crawl-ref/source/kills.cc9
-rw-r--r--crawl-ref/source/makeitem.cc3
-rw-r--r--crawl-ref/source/mon-data.h120
-rw-r--r--crawl-ref/source/mon-stuff.cc11
-rw-r--r--crawl-ref/source/overmap.cc2
-rw-r--r--crawl-ref/source/religion.cc2
-rw-r--r--crawl-ref/source/rltiles/dc-mon.txt4
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/ice_statue.png (renamed from crawl-ref/source/rltiles/dc-mon/ice_statue.png)bin695 -> 695 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/orange_crystal_statue.png (renamed from crawl-ref/source/rltiles/dc-mon/orange_crystal_statue.png)bin694 -> 694 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/silver_statue.png (renamed from crawl-ref/source/rltiles/dc-mon/silver_statue.png)bin690 -> 690 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/statue_archer.pngbin0 -> 996 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/statue_axe.pngbin0 -> 1026 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/statue_base.pngbin0 -> 922 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/statue_crossbow.pngbin0 -> 1104 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/statue_mace.pngbin0 -> 979 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/statue_mage.pngbin0 -> 975 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/statue_scythe.pngbin0 -> 1008 bytes
-rw-r--r--crawl-ref/source/rltiles/dc-mon/statues/statue_sword.pngbin0 -> 993 bytes
-rw-r--r--crawl-ref/source/showsymb.cc8
-rw-r--r--crawl-ref/source/spl-book.cc20
-rw-r--r--crawl-ref/source/tilemcache.cc1
-rw-r--r--crawl-ref/source/wiz-item.cc4
-rw-r--r--crawl-ref/source/wiz-you.cc19
37 files changed, 366 insertions, 179 deletions
diff --git a/crawl-ref/docs/develop/levels/syntax.txt b/crawl-ref/docs/develop/levels/syntax.txt
index d99fb5faf9..b058e6387d 100644
--- a/crawl-ref/docs/develop/levels/syntax.txt
+++ b/crawl-ref/docs/develop/levels/syntax.txt
@@ -520,7 +520,7 @@ ITEM: (list of items, separated by comma)
provided. For example, "owner:Roxanne" may create "Roxanne's
Treatise on Mountains".
- NOTE: You can place multiple items on the same square by using the
+ NOTE: You can place multiple items on the same square by using the
KITEM directive. See that section for more information.
MONS: (list of monsters)
@@ -562,7 +562,7 @@ MONS: (list of monsters)
MONS: rat tile:mons_giant_bat
In tiles version, this would create a monster that uses the
- 'monst_giant_bat' tile, but is otherwise identical to a rat.
+ 'mons_giant_bat' tile, but is otherwise identical to a rat.
Obviously, this substition of one monster onto another should
never be used, but it can be useful for customised vault monsters
if an alternate tile exists. In ASCII mode, this will do nothing.
@@ -808,9 +808,9 @@ COLOUR: . = green / blue:5 / red / none
the COLOUR will transfer to the resulting transformed glyph.
There are two types of colour available: base and "elemental".
- Available base colours are as follows: blue, green, cyan,
- red, magenta, brown, lightgrey, darkgrey, lightblue, lightgreen,
- lightcyan, lightred, lightmagenta, yellow and white.
+ Available base colours are as follows: blue, green, cyan,
+ red, magenta, brown, lightgrey, darkgrey, lightblue, lightgreen,
+ lightcyan, lightred, lightmagenta, yellow and white.
Elemental colours are: fire, ice, earth, electricity, air, poison,
water, magic, mutagenic, warp, enchant, heal, holy, dark, death,
@@ -1041,7 +1041,7 @@ KPROP: x = bloody
Available properties are:
* "bloody": Causes features to appear as though splattered with
- blood. This should be used very, very sparingly!
+ blood. This should be used very, very sparingly!
* "no_cloud_gen": Prevents clouds from being generated over this
feature (usually lava). Does not stop fog generators or clouds
entering from nearby squares.
diff --git a/crawl-ref/settings/init.txt b/crawl-ref/settings/init.txt
index 49524d2ae7..795c463a43 100644
--- a/crawl-ref/settings/init.txt
+++ b/crawl-ref/settings/init.txt
@@ -165,8 +165,7 @@ drop_filter = useless_item
# explore_improved = true
#
# explore_stop_pickup_ignore = curare
-auto_exclude = oklob plant,silver statue,orange crystal statue,ice statue
-auto_exclude = curse skull,roxanne
+auto_exclude = oklob plant,statue,curse skull,roxanne
# tc_reachable = blue
# tc_dangerous = cyan
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index f2e247b4b8..cdeefc8204 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -1995,7 +1995,7 @@ bool bolt::hit_wall()
return (false);
}
-void bolt::affect_cell(bool avoid_self)
+void bolt::affect_cell()
{
// Shooting through clouds affects accuracy.
if (env.cgrid(pos()) != EMPTY_CLOUD)
@@ -2006,25 +2006,14 @@ void bolt::affect_cell(bool avoid_self)
const coord_def old_pos = pos();
const bool was_solid = feat_is_solid(grd(pos()));
- bool avoid_monster = false;
- bool avoid_player = false;
-
- if (avoid_self)
- {
- if (YOU_KILL(thrower))
- avoid_player = true;
- else if (MON_KILL(thrower))
- avoid_monster = true;
- }
-
if (was_solid)
{
// Some special casing.
if (monsters* mon = monster_at(pos()))
{
- if (can_affect_wall_monster(mon) && !avoid_monster)
+ if (can_affect_wall_monster(mon))
affect_monster(mon);
- else if (!avoid_monster)
+ else
{
mprf("The %s protects %s from harm.",
raw_feature_description(grd(mon->pos())).c_str(),
@@ -2040,26 +2029,19 @@ void bolt::affect_cell(bool avoid_self)
return;
}
- const bool still_wall = (was_solid && old_pos == pos());
-
- bool hit_player = false;
// If the player can ever walk through walls, this will need
// special-casing too.
- if (found_player() && !avoid_player)
- {
+ bool hit_player = found_player();
+ if (hit_player)
affect_player();
- hit_player = true;
- }
- // We don't want to hit a monster in a wall square twice. Also,
+ // We don't want to hit a monster in a wall square twice. Also,
// stop single target beams from affecting a monster if they already
// affected the player on this square. -cao
- if ((!hit_player || is_beam || is_explosion)
- && !still_wall && !avoid_monster)
- {
- if (monsters* m = monster_at(pos()) )
+ const bool still_wall = (was_solid && old_pos == pos());
+ if ((!hit_player || is_beam || is_explosion) && !still_wall)
+ if (monsters* m = monster_at(pos()))
affect_monster(m);
- }
if (!feat_is_solid(grd(pos())))
affect_ground();
@@ -2167,12 +2149,12 @@ void bolt::do_fire()
}
#endif
- bool avoid_self = (!aimed_at_feet && (!is_explosion || !in_explosion_phase));
-
msg_generated = false;
if (!aimed_at_feet)
{
choose_ray();
+ // Take *one* step, so as not to hurt the source.
+ ray.advance();
}
#if defined(TARGET_OS_WINDOWS) && !defined(USE_TILE)
@@ -2187,11 +2169,9 @@ void bolt::do_fire()
path_taken.push_back(pos());
if (!affects_nothing)
- affect_cell(avoid_self);
-
- if (!avoid_self)
- range_used++;
+ affect_cell();
+ range_used++;
if (range_used >= range)
break;
@@ -2205,7 +2185,7 @@ void bolt::do_fire()
break;
}
- ASSERT((!feat_is_solid(grd(pos())) || avoid_self)
+ ASSERT(!feat_is_solid(grd(pos()))
|| is_tracer && affects_wall(grd(pos())));
const bool was_seen = seen;
@@ -2228,8 +2208,6 @@ void bolt::do_fire()
draw(pos());
ray.advance();
-
- avoid_self = false;
}
if (!map_bounds(pos()))
@@ -5052,7 +5030,12 @@ void bolt::affect_monster(monsters* mon)
corpse = monster_die(mon, KILL_MON, beam_source_as_target());
}
else
- corpse = monster_die(mon, thrower, beam_source_as_target());
+ {
+ killer_type ref_killer = thrower;
+ if (!YOU_KILL(thrower) && reflector == NON_MONSTER)
+ ref_killer = KILL_YOU_MISSILE;
+ corpse = monster_die(mon, ref_killer, beam_source_as_target());
+ }
}
// Give the callbacks a dead-but-valid monster object.
diff --git a/crawl-ref/source/beam.h b/crawl-ref/source/beam.h
index aad832b574..61f5640d07 100644
--- a/crawl-ref/source/beam.h
+++ b/crawl-ref/source/beam.h
@@ -232,7 +232,7 @@ private:
// operate on the beam's current position (i.e., whatever pos()
// returns.)
public:
- void affect_cell(bool avoid_self = false);
+ void affect_cell();
void affect_wall();
void affect_monster( monsters* m );
void affect_player();
diff --git a/crawl-ref/source/dat/float.des b/crawl-ref/source/dat/float.des
index 17f3cd4b58..493d018b9e 100644
--- a/crawl-ref/source/dat/float.des
+++ b/crawl-ref/source/dat/float.des
@@ -954,8 +954,10 @@ KMONS: Z = col:gila wizard hd:15 name_descriptor \
. dagger ego:freezing | dagger ego:flaming | \
dagger ego:electrocution
: end
-KITEM: B = any book
-KITEM: | = staff of fire / staff of cold / staff of earth / staff of air
+KITEM: B = randbook disc:air / randbook disc:fire / randbook disc:ice / \
+ randbook disc:earth
+KITEM: | = staff of fire / staff of cold / staff of earth / staff of air / \
+ quarterstaff unrand:elemental_staff
MAP
ccccccccc
ccE+'''cwcc
diff --git a/crawl-ref/source/dat/lab.des b/crawl-ref/source/dat/lab.des
index e54833f85c..fd7c942d23 100644
--- a/crawl-ref/source/dat/lab.des
+++ b/crawl-ref/source/dat/lab.des
@@ -83,9 +83,10 @@ ENDMAP
#############################################################################
# Green exit
-NAME: labyrinth_green
-TAGS: minotaur generate_loot allow_dup
-MONS: patrolling minotaur
+NAME: labyrinth_green
+TAGS: minotaur generate_loot allow_dup
+MONS: patrolling minotaur
+WEIGHT: 2
MAP
........
.bbbbbb.
@@ -119,7 +120,7 @@ ENDMAP
NAME: labyrinth_hidden_loot
TAGS: minotaur generate_loot allow_dup
MONS: patrolling minotaur, minotaur zombie
-SUBST: d = 2%
+SUBST: d = 2%*
SUBST: c : cvv
MAP
............
@@ -183,11 +184,11 @@ WEIGHT: 2
MAP
..............
.cccccccccccc.
-.g..ddD+.cccc.
+.g.dddD+.cccc.
.c.ccccc.cccc.
-.g..ddD+.+1<c.
+.g.dddD+.+1<c.
.c.ccccc.cccc.
-.g..ddD+.cccc.
+.g.dddD+.cccc.
.cccccccccccc.
..............
ENDMAP
@@ -336,7 +337,7 @@ ENDMAP
# Baited teleport trap - this is evil!
NAME: labyrinth_baited_teleportation_trap
TAGS: lab allow_dup
-KFEAT: Y = teleport trap
+KFEAT: Y = teleport trap / zot trap / .
KITEM: Y = any good_item
SHUFFLE: cxv
WEIGHT: 1
@@ -368,6 +369,7 @@ ENDMAP
# A few monsters: Nothing is as it seems.
NAME: labyrinth_single_monster
TAGS: lab allow_dup generate_awake
+WEIGHT: 20
KFEAT: x = .
KMONS: x = trapdoor spider / w:2 wandering mushroom
MAP
@@ -377,7 +379,7 @@ ENDMAP
# Death by starvation?
NAME: labyrinth_hungry_ghost
TAGS: lab allow_dup generate_awake
-WEIGHT: 2
+WEIGHT: 40
KFEAT: x = .
KMONS: x = hungry ghost
MAP
diff --git a/crawl-ref/source/dat/mini.des b/crawl-ref/source/dat/mini.des
index 4f61617b69..2927e8362c 100644
--- a/crawl-ref/source/dat/mini.des
+++ b/crawl-ref/source/dat/mini.des
@@ -2667,7 +2667,7 @@ ENDMAP
#
NAME: archer_statue
DEPTH: D:8-, Vault, Elf
-MONS: statue name:archer name_adjective; longbow . arrow q:30
+MONS: statue tile:mons_archer_statue name:archer name_adjective; longbow . arrow q:30
MAP
ccc
ccccc1ccccc
diff --git a/crawl-ref/source/dat/temple.des b/crawl-ref/source/dat/temple.des
index 78df580778..20902ec963 100644
--- a/crawl-ref/source/dat/temple.des
+++ b/crawl-ref/source/dat/temple.des
@@ -1000,14 +1000,16 @@ WEIGHT: 5
SHUFFLE: {([
MAP
bbbbb
+ b...b
+ b.(.b
bbbbb...bbbbb
- b...b.(.b...b
+ b...bb.bb...b
b.B.......B.b
- bbbbb...bbbbb...bbbbb
- b...bb.bbbbbbbbbb...b
-bbbbb.{.b...bbbbb.....[.bbbbb
-b...b...b.B.......B.b...b...b
-b.B....bb...b...b...bb....B.b
+ bbbbb...b...b...bbbbb
+ b...bb.bb.B.bbbbb...b
+bbbbb.{.b...b...b.....[.bbbbb
+b...b...b.B.bbbbb.B.b...b...b
+b.B....bb...........bb....B.b
b...b...bbbbb.B.bbbbb...b...b
bbbbb.B....bb...bb....B.bbbbb
b...b...bbbbb...b...b
diff --git a/crawl-ref/source/dat/uniques.des b/crawl-ref/source/dat/uniques.des
index 365d66e8eb..0632db8edb 100644
--- a/crawl-ref/source/dat/uniques.des
+++ b/crawl-ref/source/dat/uniques.des
@@ -95,7 +95,7 @@ ENDMAP
################################################################################
NAME: uniq_agnes
-DEPTH: 14-16, !Lair, !Slime
+DEPTH: 12-18, !Lair, !Slime
: place_unique(_G, "Agnes")
NAME: uniq_aizul
@@ -216,7 +216,7 @@ DEPTH: 14-16
: place_unique(_G, "Maud")
NAME: uniq_mara
-DEPTH: 20-27, !Lair, !Slime
+DEPTH: 22-27, !Lair, !Slime
: place_unique(_G, "Mara")
NAME: uniq_maurice
diff --git a/crawl-ref/source/dat/vaults.des b/crawl-ref/source/dat/vaults.des
index cee6e36ea2..274a32e4df 100644
--- a/crawl-ref/source/dat/vaults.des
+++ b/crawl-ref/source/dat/vaults.des
@@ -230,7 +230,7 @@ ENDMAP
#
NAME: metal_show
ORIENT: float
-DEPTH: Vault:3-
+DEPTH: Vault:3-7
TAGS: no_secret_doors no_monster_gen no_item_gen no_wall_fixup
COLOUR: M = magenta
COLOUR: K = magenta
@@ -325,7 +325,7 @@ lua_marker('e', portal_desc { teleport_spot=1})
lua_marker('m', portal_desc { teleport_spot=2})
}}
ORIENT: float
-DEPTH: Vault:3-
+DEPTH: Vault:3-7
TAGS: no_secret_doors no_monster_gen no_item_gen uniq_the_teleporter \
patrolling
COLOUR: ME = yellow
@@ -489,8 +489,9 @@ ENDMAP
# tagged vault8_room should just provide loot. Note that the rooms
# are not all the same sizes.
#
+# about 24 |
NAME: vault8_rooms
-TAGS: vault8_quadrant
+TAGS: vault8_quadrant uniq_vault8_prize
SHUFFLE: AC/BD, EG/FH, IKN/MJL
SUBST: A=., B=xx=, C=+, D=x, E=+, F=xx=, G=., H=x
SUBST: I=., M=xx=, J=x, K=+, N=+, L=xx=
@@ -613,7 +614,7 @@ ENDMAP
##############################################################################
# Vault:8 - Cross Quadrant
-#
+# about 2 |
NAME: vault8_cross
TAGS: vault8_quadrant
NSUBST: U = 1:. / *:xxxx=
@@ -649,7 +650,7 @@ ENDMAP
##############################################################################
# Vault:8 - Diamond Quadrant
-#
+# about 4 |
NAME: vault8_diamond
TAGS: vault8_quadrant
SHUFFLE: !_
@@ -686,7 +687,7 @@ ENDMAP
##############################################################################
# Vault:8 - Stripes Quadrant
-#
+# about 5 |
NAME: vault8_stripes
TAGS: vault8_quadrant
# double use of Y=Y. and Z=Z. for decreasing variance
@@ -725,7 +726,7 @@ ENDMAP
##############################################################################
# Vault:8 - Clover Quadrant (by Mu.)
-#
+# about 4 |
NAME: vault8_clover
TAGS: vault8_quadrant
SUBST: Q = 8 9 .:20
@@ -761,9 +762,9 @@ ENDMAP
##############################################################################
# Vault:8 - Triangles Quadrant (by Mu.)
-#
+# about 19 |
NAME: vault8_triangles
-TAGS: vault8_quadrant
+TAGS: vault8_quadrant uniq_vault8_prize
SUBST: Q = 8 9 .:20
NSUBST: ? = 1:O / *:|
SUBST: " = =:1 x:99
@@ -781,11 +782,11 @@ x..Q..xx..Q..xx****xx.Q...x
x......xx.....xx**xx......x
x....Q..xx..Q.."xxx|Q.....x
x........xx.....xx||....Q.x
-x......Q.*x"..Q.."x|Q.....x
-x..Q.....**xx.....xx......x
-x......Q.*xxx"..Q..xx.Q...x
+x......Q.|x"..Q.."x|Q.....x
+x..Q.....*|xx.....xx......x
+x......Q.|xxx"..Q..xx.Q...x
x........xx||xx.....xx....x
-x....Q..xx||||xx..Q..xx.Q.x
+x....Q..xx||||xx..Q..xx.Q|x
x......xx..Q.Q.xx.....xx||x
x..Q..xx........xx..Q..xx?x
x....xx..Q.....Q.xx.....xxx
@@ -798,9 +799,9 @@ ENDMAP
##############################################################################
# Vault:8 - Not Diamond Quadrant (by Mu.)
-#
+# about 8 |
NAME: vault8_not_diamond
-TAGS: vault8_quadrant
+TAGS: vault8_quadrant
SUBST: Q = 8 9 *:20
: vault8_loot(_G)
: vault8_rune(_G)
@@ -832,7 +833,7 @@ ENDMAP
##############################################################################
# Vault:8 - Boxes (by Mu.)
-#
+# about 11 |
NAME: vault8_boxes
TAGS: vault8_quadrant
NSUBST: a = 1:+ / *:x
@@ -877,6 +878,160 @@ x..........xxexx..........x
xxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
+##############################################################################
+# Vault:8 - Corners Quadrant (by Mu.)
+# about 25 |
+NAME: vault8_corners
+TAGS: vault8_quadrant uniq_vault8_prize
+SUBST: Q = 8 9 .:10
+NSUBST: $ = 1:O / *:$
+SUBST: $ = | *:20 $
+SUBST: a = x.
+: vault8_loot(_G)
+: vault8_rune(_G)
+MAP
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+x$$$$x.......xQQ...x..$$$$x
+x$$$$x.......xQQ...x.x$$$$x
+x$$$$x..xxx..x..x..x.x$$$$x
+x$$$$x..xxx..x..x..x.x$$$$x
+x.xxxx..xxx..x..x..x.xxxxxx
+x.......xxx.....xQQ.......x
+xxxxxx..xxx.....xQQ.......x
+x.......xxxxxxxxxxxxxxxx..x
+x.......xQQ...$$$$xQQ.....x
+x..xxxxxxQQxxx$$$$xQQ.....x
+xQQ.....x..xxx$$$$x..xxxxxx
+xQQ.....x..xxx$$$$x.....QQx
+xxxxxx..x..xxxxxxxx.....QQx
+x.......x..xxxxxxxxxxxxx..x
+x.......x.................x
+x..xxxxxx.................x
+xQQ.....x..xxxxxxxxx.xxxxxx
+xQQ.....x..xxx$$$$xx.x$$$$x
+xxxxxx..x..xxx$$$$xx.x$$$$x
+a.......xQQxxx$$$$xx.x$$$$x
+ .......xQQ...$$$$xx..$$$$x
+ axxxxxxxxxxxxxxxxxxxxxxxx
+ENDMAP
+
+##############################################################################
+# Vault:8 - Flips Quadrant (by Mu.)
+# about 21 |
+NAME: vault8_flips
+TAGS: vault8_quadrant uniq_vault8_prize
+NSUBST: ; = 3:l / 3:z / 3:a / *:.
+SUBST: Q = 8 9
+SUBST: $ = | * $
+KFEAT: l = teleport trap
+KFEAT: z = zot trap
+KFEAT: a = alarm trap
+SUBST: s = .:250 =:1
+SUBST: a = x.
+: vault8_loot(_G)
+: vault8_rune(_G)
+MAP
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+xQQQ......................x
+xQQQxxxxxxxxxxxxxxxxxxxxs.x
+xQQQ....................x.x
+x.x.xxxxxxxxxxxxxxxxxxs.x.x
+x.x.xQQQ..............x.x.x
+x.x.xQQQxxxxxxxxxxxxs.x.x.x
+x.x.xQQQ;;;;;;;;$$$$x.x.x.x
+x.x.x.x;;;;;;;;;$$$$x.x.x.x
+x.x.x.x;;;;;;;;;$$$$x.x.x.x
+x.x.x.x;;;;;;;;;$$$$x.x.x.x
+x.x.x.x;;;;;;;;;$$$$x.x.x.x
+x.x.x.x;;;;;;;;;$$$$x.x.x.x
+x.x.x.x$$$$$$$$$$$$$x.x.x.x
+x.x.x.x$$$$$$$$$$$$$x.x.x.x
+x.x.x.x$$$$$$$$$$$$Ox.x.x.x
+x.x.x.sxxxxxxxxxxxxxx.x.x.x
+x.x.x................QQQx.x
+x.x.sxxxxxxxxxxxxxxxxQQQx.x
+x.x..................QQQx.x
+x.sxxxxxxxxxxxxxxxxxxxxxx.a
+x.........................
+xxxxxxxxxxxxxxxxxxxxxxxxa
+ENDMAP
+
+##############################################################################
+# Vault:8 - Construction Quadrant (by Mu.)
+# about 21 |
+NAME: vault8_construction
+TAGS: vault8_quadrant uniq_vault8_prize
+SUBST: Q = 8 9 .
+NSUBST: $ = 1:O / *:$
+SUBST: $ = |*$.
+SUBST: c = xnQ.
+NSUBST: D = 1:+ / *:x
+SUBST: a = xn..
+: vault8_loot(_G)
+: vault8_rune(_G)
+MAP
+ axxxxxxxxxxxxxxxxxxxxxxxx
+ ..c.c.c.c.c.c.c.c.c.c.c.cx
+a.c.c.c.c.c.c.c.c.c.c.c.c.x
+xc.c.c.c.c.c.c.c.c.c.c.c.cx
+x.c.c.c.c.c.c.c.c.c.c.c.c.x
+xc.c.c.c.c.c.c.c.c.c.c.c.cx
+x.c.c.c.c.c.c.c.c.c.c.c.c.x
+xc.c.c.c.c.c.c.c.c.c.c.c.cx
+x.c.c.c.c.c.c.c.c.c.c.c.c.x
+xc.c.c.c.c.c.c.c.c.c.c.c.cx
+x.c.c.c.c.c.c.c.c.c.c.c.c.x
+xDxDxDxDxDxDxDxDxDxDxDxDxDx
+x.........................x
+x.........................x
+x.Qx..x..x..xQx..x..x..xQ.x
+x.........................x
+x.........................x
+xxx+xxxx+xxxx+xxxx+xxxx+xxx
+x$$$$x$$$$$x$$$x$$$$$x$$$$x
+x$$$$x$$$$$x$$$x$$$$$x$$$$x
+x$$$$x$$$$$x$$$x$$$$$x$$$$x
+x$$$$x$$$$$x$$$x$$$$$x$$$$x
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+ENDMAP
+
+##############################################################################
+# Vault:8 - Long Quadrant (by Mu.)
+# about 8 |
+NAME: vault8_long
+TAGS: vault8_quadrant
+SUBST: Q = 8 9 .:10
+NSUBST: $ = 1:O / *:$
+SUBST: $ = |**$
+SUBST: a = x.
+: vault8_loot(_G)
+: vault8_rune(_G)
+MAP
+xxxxxxxxxxxxxxxxxxxxxxxxa
+x.........................
+x.........................a
+x.........................x
+x..xxxxxxxxxxxxxxxxxxxxx..x
+x....QQQ............$$$x..x
+x....QQQ............$$$x..x
+x..xxxxxxxxxxxxxxxxxxxxx..x
+x..x$$$............QQQ....x
+x..x$$$............QQQ....x
+x..xxxxxxxxxxxxxxxxxxxxx..x
+x....QQQ............$$$x..x
+x....QQQ............$$$x..x
+x..xxxxxxxxxxxxxxxxxxxxx..x
+x..x$$$............QQQ....x
+x..x$$$............QQQ....x
+x..xxxxxxxxxxxxxxxxxxxxx..x
+x....QQQ............$$$x..x
+x....QQQ............$$$x..x
+x..xxxxxxxxxxxxxxxxxxxxx..x
+x.........................x
+x.........................x
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+ENDMAP
+
##############################################################################
diff --git a/crawl-ref/source/hiscores.cc b/crawl-ref/source/hiscores.cc
index a64b191e73..bf684601c8 100644
--- a/crawl-ref/source/hiscores.cc
+++ b/crawl-ref/source/hiscores.cc
@@ -777,6 +777,13 @@ void scorefile_entry::init_death_cause(int dam, int dsrc,
death_type = dtype;
damage = dam;
+ // Save this here. We don't want to completely remove the status, as that
+ // would look odd in the "screenshot", but having DUR_MISLED as a non-zero
+ // value at his point in time will generate such odities as "killed by a
+ // golden eye, wielding an orcish crossbo [19 damage]", etc. {due}
+ int misled = you.duration[DUR_MISLED];
+ you.duration[DUR_MISLED] = 0;
+
// Set the default aux data value...
// If aux is passed in (ie for a trap), we'll default to that.
if (aux == NULL)
@@ -887,6 +894,9 @@ void scorefile_entry::init_death_cause(int dam, int dsrc,
if (auxkilldata.empty())
auxkilldata = "unknown source";
}
+
+ // And restore it here.
+ you.duration[DUR_MISLED] = misled;
}
void scorefile_entry::reset()
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc
index 529cbf4b04..506e49c56e 100644
--- a/crawl-ref/source/initfile.cc
+++ b/crawl-ref/source/initfile.cc
@@ -3527,7 +3527,9 @@ static void _print_version()
static void _print_save_version(char *name)
{
+#ifdef LOAD_UNPACKAGE_CMD
bool need_unlink = false;
+#endif
std::string basename = get_savedir_filename(name, "", "");
std::string filename = basename + ".sav";
diff --git a/crawl-ref/source/it_use3.cc b/crawl-ref/source/it_use3.cc
index 295b5d24e6..81dfb15479 100644
--- a/crawl-ref/source/it_use3.cc
+++ b/crawl-ref/source/it_use3.cc
@@ -487,7 +487,7 @@ void tome_of_power(int slot)
set_ident_flags(you.inv[slot], ISFLAG_KNOW_TYPE);
you.turn_is_over = true;
- if (!yesno("Read it?"))
+ if (!yesno("Read it?", false, 'n'))
return;
if (player_mutation_level(MUT_BLURRY_VISION) > 0
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 691ffb0217..38bf295a7a 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -517,6 +517,19 @@ void wield_effects(int item_wield_2, bool showMsgs)
// Right now that's always "uncursed". -- bwr
set_ident_flags(item, ISFLAG_KNOW_CURSE);
}
+ // Automatically identify rods; you can do this by wielding and then
+ // evoking them, so do it automatically instead. We don't need to give
+ // a message either, as the game will do that automatically. {due}
+ if (item_is_rod(item))
+ {
+ if (!item_type_known(item))
+ {
+ set_ident_type( OBJ_STAVES, item.sub_type, ID_KNOWN_TYPE );
+ set_ident_flags( item, ISFLAG_KNOW_TYPE );
+ }
+ if (!item_ident( item, ISFLAG_KNOW_PLUSES))
+ set_ident_flags( item, ISFLAG_KNOW_PLUSES );
+ }
break;
}
@@ -4142,7 +4155,7 @@ static bool _dont_use_invis()
}
else if (get_contamination_level() > 0
&& !yesno("Invisibility will do you no good right now; "
- "use anyways?"))
+ "use anyways?", false, 'n'))
{
return (true);
}
@@ -4547,14 +4560,14 @@ bool _drink_fountain()
potion_type fountain_effect = POT_WATER;
if (feat == DNGN_FOUNTAIN_BLUE)
{
- if (!yesno("Drink from the fountain?"))
+ if (!yesno("Drink from the fountain?", true, 'n'))
return (false);
mpr("You drink the pure, clear water.");
}
else if (feat == DNGN_FOUNTAIN_BLOOD)
{
- if (!yesno("Drink from the fountain of blood?"))
+ if (!yesno("Drink from the fountain of blood?", true, 'n'))
return (false);
mpr("You drink the blood.");
@@ -4562,7 +4575,7 @@ bool _drink_fountain()
}
else
{
- if (!yesno("Drink from the sparkling fountain?"))
+ if (!yesno("Drink from the sparkling fountain?", true, 'n'))
return (false);
mpr("You drink the sparkling water.");
diff --git a/crawl-ref/source/kills.cc b/crawl-ref/source/kills.cc
index f0ea8ee3f0..3d577cb283 100644
--- a/crawl-ref/source/kills.cc
+++ b/crawl-ref/source/kills.cc
@@ -279,7 +279,8 @@ void Kills::merge(const Kills &k)
void Kills::record_kill(const struct monsters *mon)
{
- // Handle player ghosts separately.
+ // Handle player ghosts separately, but don't handle summoned
+ // ghosts at all. {due}
if (mon->type == MONS_PLAYER_GHOST && !mon->is_summoned())
{
record_ghost_kill(mon);
@@ -365,6 +366,9 @@ void Kills::load(reader& inf)
void Kills::record_ghost_kill(const struct monsters *mon)
{
+ // We should never get to this point, but just in case... {due}
+ if (mon->is_summoned())
+ return;
kill_ghost ghostk(mon);
ghosts.push_back(ghostk);
}
@@ -482,7 +486,8 @@ void kill_def::merge(const kill_def &k, bool uniq)
void kill_def::add_kill(const struct monsters *mon, unsigned short place)
{
kills++;
- add_place(place, mons_is_unique(mon->type));
+ // They're only unique if they aren't summoned.
+ add_place(place, mons_is_unique(mon->type) && !mon->is_summoned());
}
void kill_def::add_place(unsigned short place, bool force)
diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc
index 3d8421ade8..ee473f1a04 100644
--- a/crawl-ref/source/makeitem.cc
+++ b/crawl-ref/source/makeitem.cc
@@ -1849,7 +1849,8 @@ static special_missile_type _determine_missile_brand(const item_def& item,
rc = SPMSL_REAPING;
else if (temp_rand < 110)
rc = SPMSL_SILVER;
- else if (temp_rand < 120)
+ // Make steel rarer at lower levels. {due}
+ else if (temp_rand < 120 && (you.your_level > 10 || one_chance_in(3)))
rc = SPMSL_STEEL;
else if (temp_rand < 130)
rc = SPMSL_DISPERSAL;
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index c0c251c67b..5d42867f4d 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -215,19 +215,7 @@ static monsterentry mondata[] = {
// Real monsters begin here {dlb}:
-// insects ('a')
-{
- MONS_GIANT_COCKROACH, 'a', BROWN, "giant cockroach",
- M_NO_SKELETON,
- MR_NO_FLAGS,
- 250, 10, MONS_GIANT_COCKROACH, MONS_GIANT_COCKROACH, MH_NATURAL, -1,
- { {AT_BITE, AF_PLAIN, 2}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 1, 3, 4, 0 },
- 3, 10, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SILENT,
- I_INSECT, HT_LAND, FL_NONE, 12, DEFAULT_ENERGY,
- MONUSE_NOTHING, MONEAT_NOTHING, SIZE_TINY
-},
-
+// ants ('a')
{
MONS_GIANT_ANT, 'a', RED, "giant ant",
M_NO_SKELETON,
@@ -241,6 +229,18 @@ static monsterentry mondata[] = {
},
{
+ MONS_QUEEN_ANT, 'a', LIGHTRED, "queen ant",
+ M_NO_SKELETON | M_NO_FLAGS,
+ MR_VUL_POISON,
+ 1200, 10, MONS_GIANT_ANT, MONS_QUEEN_ANT, MH_NATURAL, -3,
+ { {AT_STING, AF_POISON_NASTY, 20}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ { 13, 3, 5, 0 },
+ 14, 3, MST_NO_SPELLS, CE_POISONOUS, Z_SMALL, S_SILENT,
+ I_INSECT, HT_LAND, FL_NONE, 7, DEFAULT_ENERGY,
+ MONUSE_NOTHING, MONEAT_NOTHING, SIZE_SMALL
+},
+
+{
MONS_SOLDIER_ANT, 'a', LIGHTGREY, "soldier ant",
M_NO_SKELETON,
MR_VUL_POISON,
@@ -941,7 +941,19 @@ static monsterentry mondata[] = {
// killer bees ('k')
{
- MONS_KILLER_BEE, 'k', YELLOW, "killer bee",
+ MONS_QUEEN_BEE, 'k', YELLOW, "queen bee",
+ M_NO_SKELETON,
+ MR_VUL_POISON,
+ 200, 14, MONS_KILLER_BEE, MONS_QUEEN_BEE, MH_NATURAL, -3,
+ { {AT_STING, AF_POISON_NASTY, 20}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ { 7, 3, 5, 0 },
+ 10, 10, MST_NO_SPELLS, CE_POISONOUS, Z_SMALL, S_SILENT,
+ I_INSECT, HT_LAND, FL_FLY, 10, DEFAULT_ENERGY,
+ MONUSE_NOTHING, MONEAT_NOTHING, SIZE_LITTLE
+},
+
+{
+ MONS_KILLER_BEE, 'k', BROWN, "killer bee",
M_NO_SKELETON,
MR_VUL_POISON,
150, 11, MONS_KILLER_BEE, MONS_KILLER_BEE, MH_NATURAL, -3,
@@ -1393,7 +1405,19 @@ static monsterentry mondata[] = {
MONUSE_NOTHING, MONEAT_NOTHING, SIZE_LITTLE
},
-// spiders and scorpions ('s')
+// spiders and insects ('s')
+{
+ MONS_GIANT_COCKROACH, 's', BROWN, "giant cockroach",
+ M_NO_SKELETON,
+ MR_NO_FLAGS,
+ 250, 10, MONS_GIANT_COCKROACH, MONS_GIANT_COCKROACH, MH_NATURAL, -1,
+ { {AT_BITE, AF_PLAIN, 2}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ { 1, 3, 4, 0 },
+ 3, 10, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SILENT,
+ I_INSECT, HT_LAND, FL_NONE, 12, DEFAULT_ENERGY,
+ MONUSE_NOTHING, MONEAT_NOTHING, SIZE_TINY
+},
+
{
MONS_GIANT_MITE, 's', LIGHTRED, "giant mite",
M_NO_SKELETON,
@@ -1431,7 +1455,7 @@ static monsterentry mondata[] = {
},
{
- MONS_WOLF_SPIDER, 's', BROWN, "wolf spider",
+ MONS_WOLF_SPIDER, 's', WHITE, "wolf spider",
M_NO_SKELETON,
MR_VUL_POISON,
800, 10, MONS_WOLF_SPIDER, MONS_WOLF_SPIDER, MH_NATURAL, -3,
@@ -1443,7 +1467,7 @@ static monsterentry mondata[] = {
},
{
- MONS_TRAPDOOR_SPIDER, 's', BROWN, "trapdoor spider",
+ MONS_TRAPDOOR_SPIDER, 's', LIGHTCYAN, "trapdoor spider",
M_NO_SKELETON,
MR_VUL_POISON,
800, 10, MONS_TRAPDOOR_SPIDER, MONS_TRAPDOOR_SPIDER, MH_NATURAL, -3,
@@ -1466,19 +1490,6 @@ static monsterentry mondata[] = {
MONUSE_NOTHING, MONEAT_NOTHING, SIZE_TINY
},
-// minotaur ('t')
-{
- MONS_MINOTAUR, 't', RED, "minotaur",
- M_FIGHTER | M_WARM_BLOOD | M_SPEAKS,
- MR_NO_FLAGS,
- 1500, 10, MONS_MINOTAUR, MONS_MINOTAUR, MH_NATURAL, -3,
- { {AT_HIT, AF_PLAIN, 35}, {AT_GORE, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK },
- { 13, 3, 5, 0 },
- 5, 7, MST_NO_SPELLS, CE_CONTAMINATED, Z_BIG, S_BELLOW,
- I_NORMAL, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY,
- MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
-},
-
// ugly things ('u')
{
MONS_UGLY_THING, 'u', BLACK, "ugly thing",
@@ -2366,6 +2377,18 @@ static monsterentry mondata[] = {
},
{
+ MONS_MINOTAUR, 'H', LIGHTRED, "minotaur",
+ M_FIGHTER | M_WARM_BLOOD | M_SPEAKS,
+ MR_NO_FLAGS,
+ 1500, 10, MONS_MINOTAUR, MONS_MINOTAUR, MH_NATURAL, -3,
+ { {AT_HIT, AF_PLAIN, 35}, {AT_GORE, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK },
+ { 13, 3, 5, 0 },
+ 5, 7, MST_NO_SPELLS, CE_CONTAMINATED, Z_BIG, S_BELLOW,
+ I_NORMAL, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY,
+ MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
+},
+
+{
MONS_GRIFFON, 'H', YELLOW, "griffon",
M_WARM_BLOOD,
MR_NO_FLAGS,
@@ -2777,31 +2800,6 @@ static monsterentry mondata[] = {
MONUSE_NOTHING, MONEAT_NOTHING, SIZE_BIG
},
-// queen insects ('Q')
-{
- MONS_QUEEN_BEE, 'Q', YELLOW, "queen bee",
- M_NO_SKELETON,
- MR_VUL_POISON,
- 200, 14, MONS_KILLER_BEE, MONS_QUEEN_BEE, MH_NATURAL, -3,
- { {AT_STING, AF_POISON_NASTY, 20}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 7, 3, 5, 0 },
- 10, 10, MST_NO_SPELLS, CE_POISONOUS, Z_SMALL, S_SILENT,
- I_INSECT, HT_LAND, FL_FLY, 10, DEFAULT_ENERGY,
- MONUSE_NOTHING, MONEAT_NOTHING, SIZE_LITTLE
-},
-
-{
- MONS_QUEEN_ANT, 'Q', LIGHTGREY, "queen ant",
- M_NO_SKELETON | M_NO_FLAGS,
- MR_VUL_POISON,
- 1200, 10, MONS_GIANT_ANT, MONS_QUEEN_ANT, MH_NATURAL, -3,
- { {AT_STING, AF_POISON_NASTY, 20}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 13, 3, 5, 0 },
- 14, 3, MST_NO_SPELLS, CE_POISONOUS, Z_SMALL, S_SILENT,
- I_INSECT, HT_LAND, FL_NONE, 7, DEFAULT_ENERGY,
- MONUSE_NOTHING, MONEAT_NOTHING, SIZE_SMALL
-},
-
// rakshasas ('R')
{
MONS_RAKSHASA, 'R', YELLOW, "rakshasa",
@@ -4676,10 +4674,10 @@ static monsterentry mondata[] = {
MONS_MARA, 'R', LIGHTRED, "Mara",
M_SPELLCASTER | M_SEE_INVIS | M_ACTUAL_SPELLS | M_SPEAKS | M_UNIQUE,
MR_RES_POISON | MR_RES_ELEC,
- 0, 15, MONS_RAKSHASA, MONS_RAKSHASA, MH_DEMONIC, -10,
- { {AT_HIT, AF_PLAIN, 40}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ 0, 20, MONS_RAKSHASA, MONS_RAKSHASA, MH_DEMONIC, -8,
+ { {AT_HIT, AF_PLAIN, 30}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 20, 0, 0, 140 },
- 15, 15, MST_MARA, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT,
+ 10, 14, MST_MARA, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT,
I_HIGH, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY,
MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
},
@@ -4690,10 +4688,10 @@ static monsterentry mondata[] = {
MONS_MARA_FAKE, 'R', LIGHTRED, "Mara",
M_SPELLCASTER | M_SEE_INVIS | M_ACTUAL_SPELLS | M_SPEAKS,
MR_RES_POISON | MR_RES_ELEC,
- 0, 15, MONS_RAKSHASA_FAKE, MONS_RAKSHASA_FAKE, MH_DEMONIC, MAG_IMMUNE,
- { {AT_HIT, AF_PLAIN, 40}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ 0, 20, MONS_RAKSHASA_FAKE, MONS_RAKSHASA_FAKE, MH_DEMONIC, MAG_IMMUNE,
+ { {AT_HIT, AF_PLAIN, 30}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 20, 0, 0, 140 },
- 15, 15, MST_MARA_FAKE, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT,
+ 10, 14, MST_MARA_FAKE, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT,
I_HIGH, HT_LAND, FL_NONE, 10, DEFAULT_ENERGY,
MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_MEDIUM
},
diff --git a/crawl-ref/source/mon-stuff.cc b/crawl-ref/source/mon-stuff.cc
index add22f09c5..d8f0a8e7a2 100644
--- a/crawl-ref/source/mon-stuff.cc
+++ b/crawl-ref/source/mon-stuff.cc
@@ -533,14 +533,16 @@ static void _check_kill_milestone(const monsters *mons,
if (mons->props.exists("original_was_unique"))
is_unique = mons->props["original_was_unique"].get_bool();
- if (mons->type == MONS_PLAYER_GHOST)
+ // Don't give milestones for summoned ghosts {due}
+ if (mons->type == MONS_PLAYER_GHOST && !mons->is_summoned())
{
std::string milestone = _milestone_kill_verb(killer) + "the ghost of ";
milestone += get_ghost_description(*mons, true);
milestone += ".";
mark_milestone("ghost", milestone);
}
- else if (is_unique)
+ // Or summoned uniques, which a summoned ghost is treated as {due}
+ else if (is_unique && !mons->is_summoned())
{
mark_milestone("unique",
_milestone_kill_verb(killer)
@@ -3126,6 +3128,11 @@ bool mons_avoids_cloud(const monsters *monster, cloud_struct cloud,
if (placement)
extra_careful = true;
+ // Berserk monsters are less careful and will blindly plow through any
+ // dangerous cloud, just to kill you. {due}
+ if (!extra_careful && monster->berserk())
+ return (true);
+
switch (cl_type)
{
case CLOUD_MIASMA:
diff --git a/crawl-ref/source/overmap.cc b/crawl-ref/source/overmap.cc
index 647008b6a1..6e823ddcd9 100644
--- a/crawl-ref/source/overmap.cc
+++ b/crawl-ref/source/overmap.cc
@@ -831,7 +831,7 @@ void annotate_level()
{
if (get_level_annotation(li, true).length() > 0)
{
- if (!yesno("Really clear the annotation?"))
+ if (!yesno("Really clear the annotation?", false, 'n'))
return;
}
else
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index accadce94e..395db6af89 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -4809,7 +4809,7 @@ void offer_items()
const std::string msg =
"Really sacrifice " + item.name(DESC_NOCAP_A) + "?";
- if (!yesno(msg.c_str()))
+ if (!yesno(msg.c_str(), false, 'n'))
{
i = next;
continue;
diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt
index df137c5f11..ef0836c80b 100644
--- a/crawl-ref/source/rltiles/dc-mon.txt
+++ b/crawl-ref/source/rltiles/dc-mon.txt
@@ -287,12 +287,14 @@ vine-covered_golem MONS_VINE_GOLEM
## Statues (also '8')
%sdir dc-mon/unique
roxanne MONS_ROXANNE
-%sdir dc-mon
+%sdir dc-mon/statues
ice_statue MONS_ICE_STATUE
silver_statue MONS_SILVER_STATUE
orange_crystal_statue MONS_ORANGE_CRYSTAL_STATUE
+statue_archer MONS_ARCHER_STATUE
## Gargoyles ('9')
+%sdir dc-mon
gargoyle MONS_GARGOYLE
metal_gargoyle MONS_METAL_GARGOYLE
molten_gargoyle MONS_MOLTEN_GARGOYLE
diff --git a/crawl-ref/source/rltiles/dc-mon/ice_statue.png b/crawl-ref/source/rltiles/dc-mon/statues/ice_statue.png
index fa946250bd..fa946250bd 100644
--- a/crawl-ref/source/rltiles/dc-mon/ice_statue.png
+++ b/crawl-ref/source/rltiles/dc-mon/statues/ice_statue.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/orange_crystal_statue.png b/crawl-ref/source/rltiles/dc-mon/statues/orange_crystal_statue.png
index 04cdce0087..04cdce0087 100644
--- a/crawl-ref/source/rltiles/dc-mon/orange_crystal_statue.png
+++ b/crawl-ref/source/rltiles/dc-mon/statues/orange_crystal_statue.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/silver_statue.png b/crawl-ref/source/rltiles/dc-mon/statues/silver_statue.png
index ccd5986f35..ccd5986f35 100644
--- a/crawl-ref/source/rltiles/dc-mon/silver_statue.png
+++ b/crawl-ref/source/rltiles/dc-mon/statues/silver_statue.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/statues/statue_archer.png b/crawl-ref/source/rltiles/dc-mon/statues/statue_archer.png
new file mode 100644
index 0000000000..0358366f7c
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/statues/statue_archer.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/statues/statue_axe.png b/crawl-ref/source/rltiles/dc-mon/statues/statue_axe.png
new file mode 100644
index 0000000000..795928ef22
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/statues/statue_axe.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/statues/statue_base.png b/crawl-ref/source/rltiles/dc-mon/statues/statue_base.png
new file mode 100644
index 0000000000..41f174dfdd
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/statues/statue_base.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/statues/statue_crossbow.png b/crawl-ref/source/rltiles/dc-mon/statues/statue_crossbow.png
new file mode 100644
index 0000000000..80fa73380d
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/statues/statue_crossbow.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/statues/statue_mace.png b/crawl-ref/source/rltiles/dc-mon/statues/statue_mace.png
new file mode 100644
index 0000000000..c74efdd79e
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/statues/statue_mace.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/statues/statue_mage.png b/crawl-ref/source/rltiles/dc-mon/statues/statue_mage.png
new file mode 100644
index 0000000000..bc709937e2
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/statues/statue_mage.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/statues/statue_scythe.png b/crawl-ref/source/rltiles/dc-mon/statues/statue_scythe.png
new file mode 100644
index 0000000000..19ab6410ce
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/statues/statue_scythe.png
Binary files differ
diff --git a/crawl-ref/source/rltiles/dc-mon/statues/statue_sword.png b/crawl-ref/source/rltiles/dc-mon/statues/statue_sword.png
new file mode 100644
index 0000000000..6a8c005184
--- /dev/null
+++ b/crawl-ref/source/rltiles/dc-mon/statues/statue_sword.png
Binary files differ
diff --git a/crawl-ref/source/showsymb.cc b/crawl-ref/source/showsymb.cc
index 50a6272d41..6f3c77fea6 100644
--- a/crawl-ref/source/showsymb.cc
+++ b/crawl-ref/source/showsymb.cc
@@ -60,6 +60,14 @@ static int _get_mons_colour(const monsters *mons)
{
const monsterentry* mdat = get_monster_data(mons->get_mislead_type());
col = mdat->colour;
+ // Some monsters (specifically, ugly things and butterflies) are generated
+ // black. Ugly things are an object of mislead, but never a subject; however
+ // if a monster summons ugly things (such as Kirke) while under the Misled
+ // status effect, they will show up black instead of their assigned colour.
+ // Likewise with any other black-coloured monsters on-screen but not yet
+ // mislead. {due}
+ if (col == BLACK)
+ col = mons->colour;
}
if (mons->berserk())
diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc
index af1a551caa..6630e0c0db 100644
--- a/crawl-ref/source/spl-book.cc
+++ b/crawl-ref/source/spl-book.cc
@@ -1856,7 +1856,7 @@ bool learn_spell(spell_type specspell, int book, bool is_safest_book)
#ifdef WIZARD
if (!you.wizard)
return (false);
- else if (!yesno("Memorise anyway?"))
+ else if (!yesno("Memorise anyway?", true, 'n'))
return (false);
#else
return (false);
@@ -1924,23 +1924,7 @@ int staff_spell( int staff )
return (-1);
}
- bool need_id = false;
- if (!item_type_known(istaff))
- {
- set_ident_type( OBJ_STAVES, istaff.sub_type, ID_KNOWN_TYPE );
- set_ident_flags( istaff, ISFLAG_KNOW_TYPE );
- need_id = true;
- }
- if (!item_ident( istaff, ISFLAG_KNOW_PLUSES))
- {
- set_ident_flags( istaff, ISFLAG_KNOW_PLUSES );
- need_id = true;
- }
- if (need_id)
- {
- mprf(MSGCH_EQUIPMENT, "%s", istaff.name(DESC_INVENTORY_EQUIP).c_str());
- you.wield_change = true;
- }
+ // ID code got moved to item_use::wield_effects. {due}
const int num_spells = count_staff_spells(istaff, false);
diff --git a/crawl-ref/source/tilemcache.cc b/crawl-ref/source/tilemcache.cc
index 2a6ff9f6f8..3597fc9e3d 100644
--- a/crawl-ref/source/tilemcache.cc
+++ b/crawl-ref/source/tilemcache.cc
@@ -369,6 +369,7 @@ bool mcache_monster::get_weapon_offset(int mon_tile, int &ofs_x, int &ofs_y)
// Shift upwards.
case TILEP_MONS_GNOLL:
case TILEP_MONS_GRUM:
+ case TILEP_MONS_CRAZY_YIUF:
case TILEP_MONS_DEEP_ELF_DEATH_MAGE:
ofs_x = -1;
ofs_y = 0;
diff --git a/crawl-ref/source/wiz-item.cc b/crawl-ref/source/wiz-item.cc
index 42376be3ae..b4b94bb94f 100644
--- a/crawl-ref/source/wiz-item.cc
+++ b/crawl-ref/source/wiz-item.cc
@@ -165,7 +165,7 @@ void wizard_create_spec_object()
if (mons_weight(mon) <= 0)
{
if (!yesno("That monster doesn't leave corpses; make one "
- "anyway?"))
+ "anyway?", true, 'y'))
{
return;
}
@@ -630,7 +630,7 @@ void wizard_make_object_randart()
if (is_random_artefact(item))
{
- if (!yesno("Is already a randart; wipe and re-use?"))
+ if (!yesno("Is already a randart; wipe and re-use?", true, 'n'))
{
canned_msg(MSG_OK);
return;
diff --git a/crawl-ref/source/wiz-you.cc b/crawl-ref/source/wiz-you.cc
index 48fdeddba8..dfc4d32fbb 100644
--- a/crawl-ref/source/wiz-you.cc
+++ b/crawl-ref/source/wiz-you.cc
@@ -210,7 +210,8 @@ void wizard_heal(bool super_heal)
// Clear most status ailments.
you.rotting = 0;
you.disease = 0;
- you.duration[DUR_CONF] = 0;
+ you.duration[DUR_CONF] = 0;
+ you.duration[DUR_MISLED] = 0;
you.duration[DUR_POISONING] = 0;
set_hp(you.hp_max, false);
set_mp(you.max_magic_points, false);
@@ -453,7 +454,13 @@ bool wizard_add_mutation()
}
}
- bool force = yesno("Force mutation to happen?", true, 'n');
+ int answer = yesnoquit("Force mutation to happen?", true, 'n');
+ if (answer == -1)
+ {
+ canned_msg(MSG_OK);
+ return (false);
+ }
+ const bool force = (answer == 1);
if (player_mutation_level(MUT_MUTATION_RESISTANCE) == 3 && !force)
{
@@ -462,7 +469,13 @@ bool wizard_add_mutation()
return (false);
}
- bool god_gift = yesno("Treat mutation as god gift?", true, 'n');
+ answer = yesnoquit("Treat mutation as god gift?", true, 'n');
+ if (answer == -1)
+ {
+ canned_msg(MSG_OK);
+ return (false);
+ }
+ const bool god_gift = (answer == 1);
mpr("Which mutation (name, 'good', 'bad', 'any', 'xom')? ", MSGCH_PROMPT);
get_input_line( specs, sizeof( specs ) );