|
From: <gi...@cr...> - 2025-01-16 23:10:18
|
via 19588f4062ee0d13e5e94c7ebb69d19dea5ac78f (commit)
via b98e54cbaef797c762a56390d68614fb92517f1b (commit)
via 4b739738c5417bfed8e3af1683f842eaa4bfcddc (commit)
via 81da2222505c5182360ed0eaaf7182e5df0746e6 (commit)
via bcc7e3493b417682cc21fcc0cd53eaaa617bda91 (commit)
from 64b092adc61cf12de668d21cd71d4673bcf25090 (commit)
-----------------------------------------------------------------------
commit 19588f4062ee0d13e5e94c7ebb69d19dea5ac78f
Author: regret-index <clo...@ho...>
Date: Thu Jan 16 08:00:15 2025 -0330
Initial distribution of the new trap quartet
Alongside the previous commits each placing traps naturally, this also
handles and tweaks a fair number of vaults and branches. Most worthy of
note:
* The Zot:5 entrance traps have been reworked, removing the chance for
both corridors to be completely blocked off by traps. 25% of the time,
one corridor will be blocked off by at least one trap, while the other
will be traversible but have two of the newer traps lining the entrance
and exit. This is meant to still punish standing in the corridor as
a chokepoint or retreating repeatedly through it, but also allow
reasonably consistently moving through the path compared to the
teleport or dispersal options, plus add a little more variety compared
to before.
* Tomb's traps have been diluted a little with tyrant's traps and
marginally less traps placed overall. If we get more traps in the
same buff / debuff veins as prior, then more probably should be
deployed in the branch- the power creep has been rather excessive
for the branch due to the binary nature of relying on torment.
* Snake and Vaults both now have a slightly higher natural-spawns trap
count, now that they have weaker traps to work with: Snake gets a
flat +2 per floor, and Vaults gets +1. As has been mentioned in
previous trap addition commits, both of these branches need more to
stand out with on variety and fanciness levels compared to other
branches near them; there is also zero guarantee these traps will
end up anywhere near monsters or vaults anyway.
* The two bailies with the worst kill statistics in the current stable
and trunk versions (bailey_axe_4 and bailey_polearm_nasty_gnolls)
both get tyrant's traps in them to both buff them and have a little bit
of an earlygame introduction to later trap mechanics.
* A small number of abyssal rune vaults with the worst kill statistics in
current and trunk versions, as well as several underperforming Abyss
vaults that can appear outside of the Abyss, now have harlequin's traps
and devourer's traps, for both connecting more flavour together and
helping said vaults along.
* To emphasize wizlabs having more prominent and fancy gimmicks,
Alistair's Party Mansion now gets harlequin traps, and Yara's Duelist
Academy gets archmage's traps, both far away from their given layout's
original bosses.
For the most part, these flavour-focused traps either should rely on
direct connections to gods, spells, or unrands appropriate to a branch
(e.g. archmage's traps for Vehumet vaults with several branch-sourced
spellcasters), or the branch placements already established in the
random_trap_for_place() function. The main exceptions are late D (where
there still should be some caution in throwing around too many of
these), Zot, and Ziggurats.
commit b98e54cbaef797c762a56390d68614fb92517f1b
Author: regret-index <clo...@ho...>
Date: Wed Jan 15 06:45:19 2025 -0330
New trap: devourer's trap, corroding players
This trap is a very-delayed follow-up to b65a573 producing the very strange
flavour of monsters praying to Lugonu to corrode their foes, while the
Abyss contains minimal corrosion and Lugonu contains zero corrosion
abilities. As such, this trap contains the most obviously divergent
flavour of any of the traps: the description mentions the stomaches of
unseen extradimensional beasts, akin to the tentacles of a tainted
otherworld like Malign Gateway creates (and keeping some space open for the
finishing of PR #3775).
This rather abstract trap corrodes the player (with normal rCorr
checks) 2/3 times it's stepped on. While a couple of branches
successfully deploy corrosive effects (entropy weavers in Spider, Slime,
Dis), the effect is relatively rare enough it can spare a bit more
broader usage. It's not the most exciting effect (neither using a new
buff like harlequin's traps nor combining player debuffs and buffs like
tyrant's traps and archmage's traps), but the capacity to use more traps
in branches and vaults overall benefits from simple traps that still
meaningfully affect combat.
This trap rarely spawns naturally in Slime, Pandemonium, and will be
placed in a number of Abyss vaults. Slime wants for more variety (even if
corrosion is pretty common already) and further obfuscates the origins
of Jiyva's invasion (hi, starry gem), the Abyss has its aforementioned
connection to corrupters, and Pandemonium is connected to the Abyss
as well as also being in need of more differentiating variety in its
infinite length.
The tile was composited from CC0 spell icons by 7Soul1 and Denzi's old
Warp Weapon spell icon.
commit 4b739738c5417bfed8e3af1683f842eaa4bfcddc
Author: regret-index <clo...@ho...>
Date: Tue Jan 14 08:44:07 2025 -0330
New trap: harlequin's trap, granting AF_CHAOS to monsters
With the reworks to chaos starting from 196b491 onwards, chaos effects
are safe enough to deploy in broader circumstances. With a multitude of
renewed and flavourful chaotic gods to lean on these days, a trap that
can be used in their vaults and which isn't reliant on weapon wielding
can reasonably distribute this in a novel fashion compared to the limted
ways chaos is currently deployed.
These harlequin's traps only have effects if monsters are in sight, and
grant 20 to 28 turns of a new chaos-wreathed status to two or three
highest-HD non-holy monsters in sight of the trap without the status
(or innate chaotic attacks). This works somewhat like the Ignis wrath
flame-wreathed status in replacing the attack flavour of a monster's
first attack, except with AF_CHAOTIC instead of AF_FIRE, and no damage
or speed buffs. (It thus stacks with monster melee weapons, but not
ranged weapons). It should provide an interesting variation of the
common use of Might throughout the game in letting monsters try to
apply debuffs or harder-to-resist damage in melee, and also provide a
more novel rare sight amongst the various other trap mechanics added
in this commit batch.
This trap rarely spawns naturally in the Depths, Zot, and Pandemonium.
Zot has some of the strongest chaotic monsters in the game (proteans /
klowns / orbs of fire / Tiamat), Pandemonium has its lords, and Depths
is close to both while benefitting from a little more explicit
connective tissue in its own burgeoning fae flavour. The performance
flavour for chaos hopefully will also help lead a little more into the
sudden appearance of klowns before their appearance in Zot, while
reasonably still feeling somewhat traditional in fantasy thematics; Xom
certainly would approve, anyway.
The hopefully-eye-catchingly animated tile was composited from CC0 spell
icons by 7Soul1 and the old deck item tiles by ontoclasm.
commit 81da2222505c5182360ed0eaaf7182e5df0746e6
Author: regret-index <clo...@ho...>
Date: Mon Jan 13 04:18:12 2025 -0330
New trap: archmage's trap, draining player mp + granting brilliance
The natural follow-up to a melee-focused trap is a magic-focused trap.
These mystic traps steal from the player's magic (by draining 33% of one's
current mp) to grant Brilliance to two or three strongest hostile
spellcasters without Brilliance in the trap's sight (i.e. 20-28 turns of
casting spells more often with higher effective HD). Draining mp affects
both spellcasters and a large number of invocations, while brilliance for
the right monsters should be reasonably dangerous.
(This doesn't preclude the usage of mp drain on Zot traps, as it is
only a portion of one's mp reliably versus Zot traps draining all of
one's mp on a rare basis.)
This trap spawns in Snake, Elf, and Depths naturally. Snake continues to
need more differentiation as a Lair branch, it heavily suits the flavour
of Elf and helps the branch a little more past its large vault dependence,
and Depths is one of the most magical branches in the game between the
fae, the magic giants and flighty animals, and literal walking spellbooks
even before all the various other wizards in it, helping more with the V
versus Depths split.
The tile was composited from CC0 spell icons by 7Soul1.
nerf archmage traps
commit bcc7e3493b417682cc21fcc0cd53eaaa617bda91
Author: regret-index <clo...@ho...>
Date: Sun Jan 12 21:45:34 2025 -0330
New trap: tyrant's trap, weakening players + mighting monsters
With the steady removal of mechanical / direct damage traps, there have
been strange consequences as well as large amounts of design space both
opened up by the lack of weaker trap types. The orb chamber's double-trap
arrangement can lead to fiddly, tedious tactics at what is meant to be the
climax of the game, Tomb has continued to creep more steadily upwards in
threat due to its extreme reliance on torment, and vaults can't establish
a place as fortified without jumping straight to alarm and net traps at
minimum (incidentally losing most of the original Ossuary gimmick).
As such, I'm starting up a set of weaker traps, aimed both at helping out
these cases and providing more flexible + tangible flavour for both vaults
and given branches than The Power of Zot or translocations or infinite
net machines. They will still follow the same current paradigm as Zot and
alarm traps, where players and hostiles alike walking onto a trap hurls an
effect at the player, to help keep the nature of traps straightforward
enough to easily learn.
Tyrant's traps are for militaristic contexts. Whenever the player or a
hostile monster steps on the trap, it will steal from the player's melee
capabilities (by inflicting 10-14 turns of Weak, capped at 50) in order to
empower two or three highest-hd monsters in sight (by granting 20-28 turns
of Might). If there are no monsters in sight, the Weak is still applied.
(While this and other upcoming traps could mildly annoying to rest off if
there aren't any further monsters in sight, with pre-revealed traps it's
rare to need to activate traps to explore a floor, and when it does block
off a path it's nowhere near the annoyance dispersal and teleport traps
can invoke in the same capacity, so it should be a net reduction in
annoyance.) This swing should hopefully force melee-centric characters
to switch tactics, while still being relevant for other characters as
Might has shown to work throughout the game.
These traps rarely spawn naturally in Orc, Snake, and Vaults. Orc could
do with more unique components beyond the orcs regularly used elsewhere,
Snake struggles in terms of variety and distinction versus the other Lair
branches (plus it contains both status effects already), and V needs
more thematic aspects to help establish it as an organized branch
versus the Depths shortly after it. Each of these traps will come with a
slight decrease for shafts (which are now mostly helpful for players in
the actually visible form) and dispersal traps (which are roughly
comparable in helping monsters and hurting the player on a short-term
basis).
(The messaging is kind of weird- I'm not super happy with my options, but
"constitution" reads as max hp drain and "power" is used regularly for mp.
With no actual statdrain in the game anymore as of de20453, hopefully
people will notice the Weak status being gained instead of expecting
actual lost "strength".)
The tile was composited from CC0 level block scraps by Surt and Bloax's
original tentacled monstrosity tile.
-----------------------------------------------------------------------
Summary of changes:
crawl-ref/source/dat/database/miscname.txt | 10 +
crawl-ref/source/dat/des/altar/overflow.des | 14 +-
crawl-ref/source/dat/des/branches/abyss.des | 69 +++---
.../source/dat/des/branches/depths_encompass.des | 2 +-
crawl-ref/source/dat/des/branches/pan.des | 5 +-
crawl-ref/source/dat/des/branches/tomb.des | 53 +++--
crawl-ref/source/dat/des/branches/zot.des | 73 ++++--
crawl-ref/source/dat/des/portals/bailey.des | 10 +-
crawl-ref/source/dat/des/portals/wizlab.des | 30 +--
crawl-ref/source/dat/des/variable/float.des | 6 +-
crawl-ref/source/dat/descript/features.txt | 46 +++-
crawl-ref/source/describe.cc | 10 +-
crawl-ref/source/dungeon-feature-type.h | 11 +-
crawl-ref/source/dungeon.cc | 11 +-
crawl-ref/source/enchant-type.h | 1 +
crawl-ref/source/feature-data.h | 7 +-
crawl-ref/source/hints.cc | 7 +-
crawl-ref/source/mon-cast.cc | 2 +
crawl-ref/source/mon-ench.cc | 7 +-
crawl-ref/source/mon-info-flag-name.h | 1 +
crawl-ref/source/mon-info.cc | 1 +
crawl-ref/source/mon-info.h | 1 +
crawl-ref/source/mon-util.cc | 2 +
crawl-ref/source/monster.cc | 4 +-
.../rltiles/{dngn/traps => UNUSED/floor}/arrow.png | Bin
.../rltiles/{dngn/traps => UNUSED/floor}/blade.png | Bin
.../rltiles/{dngn/traps => UNUSED/floor}/dart.png | Bin
.../{dngn/traps => UNUSED/floor}/needle.png | Bin
crawl-ref/source/rltiles/dc-feat.txt | 12 +-
crawl-ref/source/rltiles/dc-icons.txt | 1 +
crawl-ref/source/rltiles/dc-misc.txt | 3 +
crawl-ref/source/rltiles/dngn/traps/archmage.png | Bin 0 -> 8209 bytes
crawl-ref/source/rltiles/dngn/traps/devourer.png | Bin 0 -> 8176 bytes
crawl-ref/source/rltiles/dngn/traps/harlequin0.png | Bin 0 -> 1155 bytes
crawl-ref/source/rltiles/dngn/traps/harlequin1.png | Bin 0 -> 1103 bytes
crawl-ref/source/rltiles/dngn/traps/harlequin2.png | Bin 0 -> 1112 bytes
crawl-ref/source/rltiles/dngn/traps/harlequin3.png | Bin 0 -> 1061 bytes
crawl-ref/source/rltiles/dngn/traps/harlequin4.png | Bin 0 -> 1116 bytes
crawl-ref/source/rltiles/dngn/traps/tyrant.png | Bin 0 -> 6994 bytes
crawl-ref/source/rltiles/effect/chaos_buff0.png | Bin 0 -> 1664 bytes
crawl-ref/source/rltiles/effect/chaos_buff1.png | Bin 0 -> 1412 bytes
.../icons/laced_with_chaos.png} | Bin 5604 -> 5553 bytes
crawl-ref/source/tilepick.cc | 32 +--
crawl-ref/source/tileview.cc | 11 +-
crawl-ref/source/trap-type.h | 16 +-
crawl-ref/source/traps.cc | 257 +++++++++++++++++++--
crawl-ref/source/traps.h | 2 +
crawl-ref/source/view.cc | 6 +-
.../webserver/game_data/static/dungeon_renderer.js | 3 +-
49 files changed, 560 insertions(+), 166 deletions(-)
rename crawl-ref/source/rltiles/{dngn/traps => UNUSED/floor}/arrow.png (100%)
rename crawl-ref/source/rltiles/{dngn/traps => UNUSED/floor}/blade.png (100%)
rename crawl-ref/source/rltiles/{dngn/traps => UNUSED/floor}/dart.png (100%)
rename crawl-ref/source/rltiles/{dngn/traps => UNUSED/floor}/needle.png (100%)
create mode 100644 crawl-ref/source/rltiles/dngn/traps/archmage.png
create mode 100644 crawl-ref/source/rltiles/dngn/traps/devourer.png
create mode 100644 crawl-ref/source/rltiles/dngn/traps/harlequin0.png
create mode 100644 crawl-ref/source/rltiles/dngn/traps/harlequin1.png
create mode 100644 crawl-ref/source/rltiles/dngn/traps/harlequin2.png
create mode 100644 crawl-ref/source/rltiles/dngn/traps/harlequin3.png
create mode 100644 crawl-ref/source/rltiles/dngn/traps/harlequin4.png
create mode 100644 crawl-ref/source/rltiles/dngn/traps/tyrant.png
create mode 100644 crawl-ref/source/rltiles/effect/chaos_buff0.png
create mode 100644 crawl-ref/source/rltiles/effect/chaos_buff1.png
copy crawl-ref/source/rltiles/{gui/spells/summoning/surprising_crocodile.png => misc/icons/laced_with_chaos.png} (54%)
diff --git a/crawl-ref/source/dat/database/miscname.txt b/crawl-ref/source/dat/database/miscname.txt
index fad1850b02..bd5c5739ad 100644
--- a/crawl-ref/source/dat/database/miscname.txt
+++ b/crawl-ref/source/dat/database/miscname.txt
@@ -67,6 +67,16 @@ Seething terrors besiege your sanity!
Lucidity slithers from your feeble grasp.
%%%%
+harlequin_trap_lines
+
+Strange impish giggling echoes through your mind as
+
+The roar of a mocking crowd runs through your mind as
+
+A round of applause drowns out your thoughts as
+
+A cruel sense of mischief rushes through your surroundings as
+%%%%
# How great is the Orb of Zot?
_great_adj_
diff --git a/crawl-ref/source/dat/des/altar/overflow.des b/crawl-ref/source/dat/des/altar/overflow.des
index 689a652d1e..8c62f5ca8c 100644
--- a/crawl-ref/source/dat/des/altar/overflow.des
+++ b/crawl-ref/source/dat/des/altar/overflow.des
@@ -1923,7 +1923,7 @@ ENDMAP
NAME: nemelex_lonely_heart_becter
TAGS: uniq_altar_nemelex_xobeh transparent decor
-TAGS: temple_overflow_1 temple_overflow_nemelex
+TAGS: temple_overflow_1 temple_overflow_nemelex no_wall_fixup
TAGS: no_rotate no_vmirror no_monster_gen no_item_gen vaults_room_empty
DEPTH: D:3-, Vaults, Depths
# Boris misses Natasha, Bai Suzhen misses Xu Xian,
@@ -2006,14 +2006,18 @@ TAGS: transparent decor vaults_empty
DEPTH: D:3-, Vaults, Orc
WEIGHT: 3
KFEAT: _ = altar_okawaru
+KFEAT: ^ = tyrant's trap
+: if not you.in_branch("Vaults") then
+SUBST: ^ = .
+: end
: interest_check(_G)
MAP
.......
-...v...
+.^.v...
..v.v..
.v._.v.
..v.v..
-...v...
+...v.^.
.......
ENDMAP
@@ -3435,9 +3439,9 @@ MONS: rakshasa ; dire flail ego:chaos | scimitar ego:chaos | partisan ego:chao
ITEM: gold q:1 no_pickup
KFEAT: _ = altar_xom
: if you.depth() == dgn.br_depth(you.branch()) then
-KFEAT: ~ = teleport trap w:20 / alarm trap w:3 / dispersal trap
+KFEAT: ~ = teleport trap w:20 / harlequin's trap w:3 / dispersal trap
: else
-KFEAT: ~ = shaft trap / teleport trap / alarm trap w:3 / dispersal trap
+KFEAT: ~ = shaft trap / teleport trap / harlequin's trap w:3 / dispersal trap
: end
NSUBST: " = 1:_ / 1:*% / 8:M / *:?, G = 1:G / 1:bvGGTU~ / 2 = vGl~???? / * = '?
NSUBST: ' = 10 = W:60 w:50 x:20 n:80 v / 8:d / * = xxxxnv
diff --git a/crawl-ref/source/dat/des/branches/abyss.des b/crawl-ref/source/dat/des/branches/abyss.des
index 7d3e77509f..a787183736 100644
--- a/crawl-ref/source/dat/des/branches/abyss.des
+++ b/crawl-ref/source/dat/des/branches/abyss.des
@@ -101,12 +101,13 @@ NAME: abyss_entry_glasseish
TAGS: nolayout_encompass
WEIGHT: 5
: abyss_entry(_G, 'O')
-KPROP: T = no_tele_into
-KMASK: .O = !opaque
-SUBST: T : T l 1 2 A X
+SUBST: T : T12^S
MONS: tentacled starspawn / starcursed mass / wretched star
MONS: demonic plant
-KFEAT: X : stone_arch
+KFEAT: S = stone_arch
+KFEAT: ^ = devourer's trap
+KPROP: Tl12^S = no_tele_into
+KMASK: .O = !opaque
MAP
nnn nnn
nTn.nTn
@@ -859,25 +860,26 @@ DEPTH: D:4-, Depths, Abyss
WEIGHT: 5 (D), 10
ITEM: ring of poison resistance / any beam wand charges:1 / \
demon whip ego:venom pre_id / throwing net q:1
+KFEAT: ^ = harlequin's trap / devourer's trap w:13
: if you.in_branch("Abyss") then
SUBST: x : XXCB, c : CB, X = xxxxcb, C = xccccb, B = xcbbbb
SUBST: HIJ = cbw, ' = 000., " = dd.
: else
-SUBST: '" = ., c : xxc, H : xc.., I : xc.., J : xc..
+SUBST: '"^ = ., c : xxc, H : xc.., I : xc.., J : xc..
: end
MAP
.c
.xc
.xcc
- @x..c......
+ @x^.c......
@x..'ccxx...
.x..H"c".xxx.
- .x..H'"c'.....
+ .x^.H'"c'.....
.xc.'"""c.I...
ccccccccc...J.
- .c"'..x....
+ .c"'..x.^..
.x..I..x...
- .xx.....xx.
+ .xx...^.xx.
..x..J..xx.
..x........
....
@@ -919,13 +921,14 @@ TAGS: transparent no_pool_fixup decor
DEPTH: D:8-, Depths, Abyss
KFEAT: @ = +
KFEAT: > = abyssal_stair
+KFEAT: ^ = harlequin's trap / devourer's trap w:13
SHUFFLE: ABCDEFGH
: if you.in_branch("Abyss") then
SUBST: b = wlb., AB = wl., CD = xcb., EFGH = .
-SUBST: x = xxxxcccb, ' = 00., " = >>.
+SUBST: x = xxxxcccb, ' = 00., " = >>., + = ^
: else
TAGS: extra
-SUBST: b : bbwww., A : @, B : @xx, C : @xxxx, DEFGH = x, '" = .
+SUBST: b : bbwww., A : @, B : @xx, C : @xxxx, DEFGH = x, '"^ = .
: end
MAP
xxAxx
@@ -951,12 +954,13 @@ NAME: hangedman_abyss_or_decor_passed
TAGS: transparent no_pool_fixup decor
DEPTH: D:4-, Depths, Abyss
ITEM: any weapon ego:pain / any weapon ego:electrocution
+KFEAT: ^ = harlequin's trap w:7 / devourer's trap w:13
: if you.in_branch("Abyss") then
SUBST: ' = 00., " = dd.
SUBST: x = xxxxcb, XY = ww...
: else
TAGS: extra
-SUBST: x : xxxc, Y = x, X : x..
+SUBST: x : xxxc, Y = x, X : x.., ^ = .
NSUBST: ; = 1:@ / *:., : = 1:@ / *:., ` = 1:@ / *:.
: end
MAP
@@ -964,9 +968,9 @@ MAP
;;;;x::::
;YX.x.XY:
;X..x..X:
- ;.......:
+ ;....^..:
xxxx.x.xxxx
- `.......'x
+ `..^....'x
`X..x.X'"x
`YX.x.'Y"x
````x'""xx
@@ -979,18 +983,19 @@ DEPTH: D:4-, Depths, Abyss
ITEM: great mace ego:distortion randart / wand of mindburst pre_id / \
dart ego:atropa q:4 w:4 / potion of moonshine pre_id w:4 / \
randbook numspells:1 spells:alistair's_intoxication
+KFEAT: ^ = harlequin's trap w:7 / devourer's trap w:13
: if you.in_branch("Abyss") then
SUBST: ' = 00., " = ddd.., X = xxcccb, x = xxxxxcccb
SUBST: yY = ...xxxcbw, zZ = ...xxxcbl
: else
TAGS: extra
SHUFFLE: yY, zZ
-SUBST: x : xxxxc, X : xxc, y : x.., z : x.., YZ'" = .
+SUBST: x : xxxxc, X : xxc, y : x.., z : x.., YZ'"^ = .
: end
MAP
..........
.xxxXxxx..
-...'X"..z...
+.^.'X"..z...
..."X'..Z...
.xxxXXXxxx..
..Y.."X'..z...
@@ -1000,7 +1005,7 @@ MAP
...y.."X'..Z..
..xxxXXXxxx.
...Y.."X'...
- ...y..'X"...
+ ...y..'X".^.
..xxxXxxx.
..........
ENDMAP
@@ -1216,6 +1221,7 @@ ITEM: potion of enlightenment q:1 pre_id
KMONS: O = patrolling war gargoyle
KITEM: O = abyssal rune of Zot
KFEAT: A = stone_arch
+KFEAT: ^ = devourer's trap
KFEAT: "@6 = runelight
SHUFFLE: 23 / 57
SUBST: ! = 2, 0 = 222234555
@@ -1233,7 +1239,7 @@ MAP
"cc.c0"l"0cccc"
.c.ccclccccc.
c.c0"l"0ccc
-"cc.ccclcccdcc"
+"cc^ccclcccdcc"
.c+c2c!c5c+c.
c 3 c1c 7 c
6cc2 2+ +5 5cc6
@@ -1582,6 +1588,7 @@ MONS: fire bat, chaos spawn, fire dragon / ice dragon, ogre mage
KMONS: OL = lich / ancient lich w:1 / dread lich w:1
KITEM: O = abyssal rune of Zot
KFEAT: A = stone_arch
+KFEAT: ^ = harlequin's trap / devourer's trap w:4
KFEAT: ' = runelight
NSUBST: L = 1:O / *:L
MARKER: ! = lua:fog_machine { cloud_type = "seething chaos", \
@@ -1595,9 +1602,9 @@ MAP
ccLccLcc
cccc+c+cccX
cLccc1.ccc X
-cc+c2.1+LcX X
-ccc1.2.ccc X X
-cL+.1.++Cxx X X
+cc+c^21+LcX X
+ccc12.^ccc X X
+cL+.1^++Cxx X X
cccc+c++.4xx X X
cccLcC.c.3xx X X
X ccccx4.1.2xx X
@@ -1624,6 +1631,7 @@ MONS: tentacled monstrosity / tentacled starspawn / thrashing horror w:6
KMONS: O = starcursed mass
KITEM: O = abyssal rune of Zot
KFEAT: _ = altar_lugonu
+KFEAT: ^ = harlequin's trap / devourer's trap w:13
KFEAT: A = stone_arch
KFEAT: "@ = runelight
SUBST: X = c', c = ccv, N : nb.
@@ -1634,11 +1642,11 @@ MAP
XbbbXXXXXXXXXX@
XXb1bbbbbcccccc+
XXbblblblccwc..c"
-XXbb+......3...c
-Xbb4n.N...llb.cc"
-XbOnn.1_.3l2l3wcA
-Xbb4n.N...llb.cc
-XXbb+......3...c"
+XXbb+^.....3...c
+Xbb4n.N...llb3cc"
+XbOnn^1_.3l2l^wcA
+Xbb4n.N...llb3cc
+XXbb+^.....3...c"
XXbblblblccwc..c
XXb1bbbbbcccccc+
XbbbXXXXXXXXXX@
@@ -1695,6 +1703,7 @@ MONS: tormentor / hellion / shadow demon / \
KMONS: 3O = spatial maelstrom
KITEM: O = abyssal rune of Zot
KFEAT: A = stone_arch
+KFEAT: ^ = harlequin's trap / devourer's trap w:13
KFEAT: " = runelight
SUBST: X : b", x = xv, n = nnnnnc, m = n
FTILE: A123$Onc = floor_crystal_squares
@@ -1702,13 +1711,13 @@ COLOUR: 123$O = lightmagenta
MAP
""xxxxxxxxxxxxxxxx
.....1xxnnnnnnnnnxxx
-........1nnnnnnnnxxxxx
-....X......xxnnnnnxxxx
+..^.....1nnnnnnnnxxxxx
+....X.....^xxnnnnnxxxx
.........2..nnnn33xxxx
A.....X...x.2$mm3Oxxxx
.........2..nnnn33xxxx
-....X......xxnnnnnxxxx
-........1nnnnnnnnxxxxx
+....X.....^xxnnnnnxxxx
+..^.....1nnnnnnnnxxxxx
.....1xxnnnnnnnnnxxx
""xxxxxxxxxxxxxxxx
ENDMAP
diff --git a/crawl-ref/source/dat/des/branches/depths_encompass.des b/crawl-ref/source/dat/des/branches/depths_encompass.des
index 1f68cb7234..5b1cb130c2 100644
--- a/crawl-ref/source/dat/des/branches/depths_encompass.des
+++ b/crawl-ref/source/dat/des/branches/depths_encompass.des
@@ -792,7 +792,7 @@ MONS: spriggan defender w:30 / titan w:30 / ancient lich w:30 / \
draconian annihilator / draconian knight
KMONS: Z = draconian knight / draconian annihilator
KITEM: Z = midnight gem
-KFEAT: z^ = zot trap / dispersal trap
+KFEAT: z^ = harlequin's trap
KFEAT: Z = enter_zot
SHUFFLE: Y], {([>, HI / HI / IH, JK / JK / KJ
SHUFFLE: NO / NO / ON, PQ / PQ / QP, RS / RS / SR, lm / lm / ml
diff --git a/crawl-ref/source/dat/des/branches/pan.des b/crawl-ref/source/dat/des/branches/pan.des
index d7f4fb4dc9..6f63fbacac 100644
--- a/crawl-ref/source/dat/des/branches/pan.des
+++ b/crawl-ref/source/dat/des/branches/pan.des
@@ -3237,6 +3237,7 @@ ENDMAP
##################################
NAME: reaverb_pan_chaos_star
TAGS: extra transparent pandec
+KFEAT: ^ = devourer's trap
MAP
...
.... ..x.. ....
@@ -3245,11 +3246,11 @@ MAP
...x.. .x. ..x...
..x...x...x..
..x.....x..
- ... ....x.... ...
+ ... ..^.x.... ...
..x.....xxx.....x..
.x.xxx.xxxxx.xxx.x.
..x.....xxx.....x..
- ... ....x.... ...
+ ... ....x.^.. ...
..x.....x..
..x...x...x..
...x.. .x....x...
diff --git a/crawl-ref/source/dat/des/branches/tomb.des b/crawl-ref/source/dat/des/branches/tomb.des
index 415281b7b4..21afafc395 100644
--- a/crawl-ref/source/dat/des/branches/tomb.des
+++ b/crawl-ref/source/dat/des/branches/tomb.des
@@ -9,6 +9,8 @@
##############################################################################
{{
+crawl_require('dlua/vault.lua')
+
function tomb_1_mummy_set(e)
e.mons("mummy / skeletal warrior w:1 / nothing")
end
@@ -79,6 +81,24 @@ function tomb_guardian_set(e, include_nothing)
end
end
+-- If we get a lot more traps suited for large numbers in Tomb, setting them up
+-- to vary per floor would help Tomb's variety a bunch. As is, just keep the
+-- trap definition consistent between each of the uses.
+function tomb_trap_set(e)
+--[[
+ if e.is_validating() then return end
+
+ if dgn.persist.tomb_trap_sets == nil then
+ local opt = { "tyrant's trap", "lobbyist's trap", "doom trap" }
+ dgn.persist.tomb_trap_sets = { util.random_from(opt), util.random_from(opt),
+ util.random_from(opt) }
+ end
+]]
+ e.kfeat("^ = alarm trap / net trap / zot trap / dispersal trap / tyrant's trap")
+ -- e.kfeat("~ = " .. dgn.persist.tomb_trap_sets[you.depth()])
+ -- e.subst("^ = ^:36 ~:14")
+end
+
--[[
Setup Tomb:1 central vault. For monsters, define plain mummies on '1', the
guardian set on '2', priest-level monsters on '3', greater-mummy-level monsters
@@ -119,7 +139,7 @@ function tomb_1_stairs_setup(e)
tomb_1_mummy_priest_set(e)
e.subst(". = 3:12 ^ .:230")
- e.kfeat("^ = alarm trap / dispersal trap / net trap / zot trap")
+ tomb_trap_set(e)
end
--[[
@@ -142,7 +162,7 @@ function tomb_2_ambush_setup(e)
e.nsubst("S = 1:< / *:.")
e.subst(". = ^ .:740")
- e.kfeat("^ = alarm trap / dispersal trap / net trap / zot trap")
+ tomb_trap_set(e)
end
function tomb_3_khufu(e, glyph)
@@ -167,8 +187,8 @@ function tomb_3_rune_setup(e)
tomb_3_khufu(e, "K")
- e.kfeat("^ = alarm trap / dispersal trap / net trap / zot trap")
e.subst(". = ^ .:490")
+ tomb_trap_set(e)
end
}}
@@ -485,8 +505,8 @@ SUBST: FIJKLMNOPQ = G
: end
# Add greater mummies and traps to the long hall. About 16 greater mummies and
# 6 traps on-average.
-SUBST: ' = 2:24 ^ .:210
-KFEAT: ^ = alarm trap / net trap / zot trap / dispersal trap
+SUBST: ' = 2:24 ^:8 .:212
+: tomb_trap_set(_G)
: set_feature_name("escape_hatch_down", "one-way staircase leading down")
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
@@ -670,6 +690,7 @@ SHUFFLE: AaBbQqDd/EeFfGgHh/IiJjKkLl/MmNnOoPp/RrSsUuVv
SHUFFLE: Aa/Bb/Qq/Dd, Ee/Ff/Gg/Hh, Ii/Jj/Kk/Ll, Mm/Nn/Oo/Pp, Rr/Ss/Uu/Vv
SUBST: AEIMR = +, a = >, ei = *|, mr = %, bq = 4, dhlpv = 3
SUBST: BQDFGHJKLNOPSUV = c, fgjknosu = ', ' = ^--112
+: tomb_trap_set(_G)
: tomb_1_centre_setup(_G)
SUBST: - = .
MAP
@@ -850,9 +871,9 @@ MARKER: I = lua:hatch_dest_name("tomb3_exit_2")
SUBST: HI = .
# Add traps near doors and both traps and monsters throughout both groups of
# rooms.
-SUBST: T = ^..., ' = ^ ':210, ' = 1:5 2:5 3:1 .:89
-SUBST: " = ^ ":130, " = 2:3 3:1 .:96
-KFEAT: ^ = alarm trap / net trap / zot trap / dispersal trap
+SUBST: T = ^..., ' = ^ ':220, ' = 1:5 2:5 3:1 .:89
+SUBST: " = ^ ":140, " = 2:3 3:1 .:96
+: tomb_trap_set(_G)
#
# Number of ' symbols is 211+3=214, hence statistically in the lower
# circumference we'll have 10.7 mummies, another 10.7 guardian mummies
@@ -1048,7 +1069,7 @@ KITEM: | = | no_pickup
: tomb_guardian_set(_G)
# Randomize some loot placement in the treasure rooms, and add the zig fig in
# the loot pile. Add traps to treasure rooms and the arrival area.
-SUBST: ' = $., $ = |:1 *:2 $:17, . = ^ .:240
+SUBST: ' = $., $ = |:1 *:2 $:17, . = ^ .:260
NSUBST: | = d / |
MARKER: D = lua:hatch_dest_name("tomb3_entry_1")
MARKER: E = lua:hatch_dest_name("tomb3_entry_2")
@@ -1056,7 +1077,7 @@ SUBST: DE = .
MARKER: F = lua:hatch_name("tomb3_exit_1")
MARKER: H = lua:hatch_name("tomb3_exit_2")
SUBST: FH = <
-KFEAT: ^ = alarm trap / net trap / zot trap / dispersal trap
+: tomb_trap_set(_G)
: set_border_fill_type("permarock_wall")
: set_feature_name("escape_hatch_down", "one-way staircase leading down")
: set_feature_name("escape_hatch_up", "one-way staircase leading up")
@@ -1357,9 +1378,9 @@ KITEM: * = * no_pickup
: tomb_guardian_set(_G)
# Randomize some loot placement in the treasure rooms, and add the zig fig in
# the loot pile. Add traps to treasure rooms and the arrival area.
-SUBST: ' = $., $ = |:1 *:2 $:17, . = ^ .:240
+SUBST: ' = $., $ = |:1 *:2 $:17, . = ^ .:240, " = .
NSUBST: | = 1:d / *:|
-KFEAT: ^ = alarm trap / net trap / zot trap / dispersal trap
+: tomb_trap_set(_G)
: set_border_fill_type("permarock_wall")
MAP
ccccccccccccccccccccccccccccccccccccccccccc
@@ -1394,10 +1415,10 @@ ccc|||||$$'.......c......c.....'$$$$$$$$ccc
cccc|||||$'.......c......c....'$$$$$$$$cccc
ccccc||||$$'......c......c....'$$$$$$$ccccc
cccccc||||$'......c......c....'$$$$$$cccccc
-ccccccc|||$$'.....c......c...'$$$$$$ccccccc
-cccccccc|||$'....cc..{...cc..'$$$$$cccccccc
-ccccccccc||$'....cc...(..cc.'$$$$$ccccccccc
-cccccccccc|$'..cccc..[...cccc$$$$cccccccccc
+ccccccc|||$$'.....c."""".c...'$$$$$$ccccccc
+cccccccc|||$'....cc."{"".cc..'$$$$$cccccccc
+ccccccccc||$'....cc.""(".cc.'$$$$$ccccccccc
+cccccccccc|$'..cccc."["".cccc$$$$cccccccccc
ccccccccccccccccccccccccccccccccccccccccccc
ccccccccccccccccccccccccccccccccccccccccccc
ENDMAP
diff --git a/crawl-ref/source/dat/des/branches/zot.des b/crawl-ref/source/dat/des/branches/zot.des
index d7239e885f..842f81ae17 100644
--- a/crawl-ref/source/dat/des/branches/zot.des
+++ b/crawl-ref/source/dat/des/branches/zot.des
@@ -2456,9 +2456,10 @@ DEPTH: Zot, !Zot:$
MONS: laughing skull, lich, ancient lich / dread lich, necromancer
MONS: vampire mage
ITEM: any book mimic:10 w:20 / any scroll mimic:10
+KFEAT: ^ = archmage's trap
SUBST: x : xv, w : w?, G : Gg
NSUBST: ? = 12 = 11. / *:.
-SUBST: 4 = 4 5:2 .:4
+SUBST: 4 = 4 5:2 .:4, ^ : ^..
TILE: G = dngn_statue_depths_zot_lich / dngn_statue_zot_old_guardian
TILE: c = wall_studio
: vault_metal_statue_setup(_G, "g", "soul conduit")
@@ -2467,7 +2468,7 @@ wwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwww
wwxxxxxxxxx+xxxxxxxxxww
wwx....x.......x....xww
-wwx....+...G...+....xww
+wwx....+..^G^..+....xww
wwx.4..x.......x..4.xww
wwx4.4.xxxx+xxxx.4.4xww
wwx.4.4xxx...xxc4.4.xww
@@ -2481,7 +2482,7 @@ wwx...xxxxx.xxxxxxxxxww
wwxx+xxxxxx.xxcdddddxww
wwxx.xxxxxx.xxcd232dxww
wwxx.xxxxxx.xxxd...dxww
-wwxx......+...+....dxww
+wwxx......+^..+....dxww
wwxxxxxxxxxmxxxd...dxww
wwxxxxxxxxxGxxcdddddxww
wwxxxxxxxxxxxxxxxxxxxww
@@ -2571,6 +2572,7 @@ DEPTH: Zot, !Zot:$
ORIENT: centre
MONS: oklob plant, acid blob, jelly, yellow draconian
MONS: any nonbase yellow draconian
+KFEAT: ^ = devourer's trap
SUBST: 1 = 1:2 .
SUBST: . = .:20 3:3 2:1
SUBST: } = }:80 >, ) = ):80 >, ] = ]:80 >
@@ -2581,7 +2583,7 @@ MAP
xx....4554....xx
xx.....cccc.....xx
x....ccc..ccc....x
-xx...cc......cc...xx
+xx...cc^....^cc...xx
x...cc..1111..cc...x
x...c...1}11...c...x
x.5.c...11]1...c.5.x
@@ -2805,7 +2807,8 @@ MONS: oklob plant w:4 / lightning spire w:3
MONS: orange crystal statue / curse skull
# Not quite the orb, but but close enough
ITEM: orb randart no_pickup, randbook disc:forgecraft spells:diamond_sawblades
-NSUBST: 1 = 1:1 / 6 = 11. / *:., 3 = 1:1 / 4 = 11....... / *:.
+KFEAT: ^ = archmage's trap / harlequin's trap / devourer's trap
+NSUBST: 1 = 1:1 / 6 = 11^ / *:., 3 = 1:1 / 4 = 11....... / *:.
SUBST: } = }:80 >, ) = ):80 >, ] = ]:80 >
: vault_metal_statue_setup(_G, "G", "enigmatic dynamo")
MAP
@@ -2851,7 +2854,7 @@ KMONS: 8&! = protean progenitor
KMONS: _ = ghost moth
KMONS: 90 = moth of wrath / butterfly w:30
KFEAT: B = cache of baked goods
-KFEAT: 0 = zot trap
+KFEAT: 0 = harlequin's trap
KFEAT: ^~ = teleport trap / dispersal trap
KFEAT: _ = altar_xom
KFEAT: > = } mimic
@@ -3431,20 +3434,21 @@ KMONS: Z = killer klown ; club randart plus:12 ego:chaos / \
KITEM: BEHKN = $ w:15 / % w:25 / *
KITEM: z = any good_item
KITEM: Z = superb_item
+KFEAT: ^ = harlequin's trap
# Rotates out loot, upstairs, downstairs,
# both (in an enclosed bubble), or nothing, at either end.
SHUFFLE: defg{>Z' / defg{<'' / fgde>{'Z / fgde<{'' / defg'|Z' / fgde|''Z / \
fgfgZ'() / fgfg'Z)( / dede'''' / dede'''' / dede''''
SHUFFLE: ABC / DEF / GHI / JKL / MNO
-SUBST: d = @, e = ., f = x, g = c, c : ccb, Z = z Z:6, {' = ., ? : ?.
+SUBST: d = @, e = ., f = x, g = c, c : ccb, Z = z Z:6, {' = ., ? : ?., ^ : ^..
NSUBST: < = 1:{ / 1:[, > = 1:} / 1:]
: vault_granite_statue_setup(_G, "?", "scintillating statue")
MAP
xxxxxxxfffff
xcccccgggggff
xxxxxcKKcc..>.ggf
- xcccccJ.J+...Z.gf
- xcccccc..+..Z.>gf
+ xcccccJ.J+..^Z.gf
+ xcccccc..+..Z^>gf
xcHHccc..ccc...gf
xxxxxcG.Gcc..Lcc...gx
xcccccc..++..?Lc++ccx
@@ -3462,8 +3466,8 @@ xcccc..Ccc++cccccDEcx
xcc.+..?Cc++ccccccccx
xe..+.........Acccccx
de{.cc..........Bcxxx
-de..'c++ccccccA.Bcx
-de.'....cxxxxcccccx
+de.^'c++ccccccA.Bcx
+de.'^...cxxxxcccccx
dee..{.ccxxxxxxxxxx
ddeeeeeccx
dddddxxxx
@@ -3755,6 +3759,7 @@ KFEAT: T = fountain_eyes
KFEAT: C = altar_ecumenical
KFEAT: D = altar_lugonu / altar_jiyva / altar_beogh w:5 / altar_ignis w:5
KFEAT: ~ = zot trap
+KFEAT: ^ = archmage's trap / harlequin's trap / zot trap w:2
KFEAT: y = x
SHUFFLE: Xy / Xy / Xy / Aa
NSUBST: A = 1:. / 19 = X:9 .:1 / *:X
@@ -3787,8 +3792,8 @@ SHUFFLE: ])deOG, OGUCD~, GM
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xx1.............+''''''''''''''''''''''''''''''
-xx1.............+'''''''''''''''''''''''''''''''
+xx1...........^.+''''''''''''''''''''''''''''''
+xx1..........^..+'''''''''''''''''''''''''''''''
xXX......XXXXXXXXXXXXXXX......XXXXXXXXXXXXXX'''''
xzXX......XyyyyyyyyyyyX......XXyyyyyyyyyyyyXX''''
xyyXX.....XXyxxxxxxxyXX.....XXyyxxxxxxxxxxyyXX'''
@@ -3798,8 +3803,8 @@ xxxxyX.....zyyyyyyyyyyz1....XyxxxxxxxxxxxxxxxxyX'
xxxxyX....Xzy..`2`..yzX....XyxxxxxxxxxxxxxxxxyX'
xxxyyX....Xzy1y`]`y1yzX....XyyxxxxxxxxxxxxxxxyX''
xxyyXX...Xzzzzzz+zzzzzzX...XXyyxxxyyyyyyyyyyzzX''
-xxyXX...zzz1....2....1zzz...XXyxxyyd``....2zzX'''
-xxyX...zzX1...........1Xzz...Xyyyyyyyy1..1zzX''''
+xxyXX...zzz1....2....1zzz.^.XXyxxyyd``....2zzX'''
+xxyX...zzX1...........1Xzz.^.Xyyyyyyyy1..1zzX''''
xxXX+++z.................z+++XXXXXXXzzzz+zzX''''
xx1....................................112z1'''
xxXX.........................XXXXXXXzzzz+zzX''''
@@ -4442,14 +4447,14 @@ ENDMAP
##############################################################################
NAME: hall_of_Zot
+TAGS: no_dump no_trap_gen
PLACE: Zot:$
ORIENT: north
-TAGS: no_dump no_trap_gen
+MONS: patrolling orb guardian, orange crystal statue / w:20 obsidian statue
+MONS: electric golem, killer klown, ancient lich / dread lich, orb of fire
KITEM: R = prismatic gem
KITEM: Z = Orb of Zot
KFEAT: Z = orb dais
-MONS: patrolling orb guardian, orange crystal statue / w:20 obsidian statue
-MONS: electric golem, killer klown, ancient lich / dread lich, orb of fire
# Traps to spread throughout the vault. Fewer alarm traps as those have a big
# effect on the vault as a whole.
KFEAT: ~ = zot trap / dispersal trap / permanent teleport trap / net trap \
@@ -4457,7 +4462,30 @@ KFEAT: ~ = zot trap / dispersal trap / permanent teleport trap / net trap \
# Flat distribution of traps for specific sections.
KFEAT: ^ = zot trap / dispersal trap / permanent teleport trap / alarm trap \
/ net trap
+# Weaker trap lua for replacing the old rare double-trapped entrances option.
+{{
+local weaker_t = { { t = "tyrant's trap", weight = 12 },
+ { t = "harlequin's trap w:7", weight = 10 },
+ { t = "archmage's trap", weight = 7 },
+ { t = "devourer's trap w:5", weight = 5}, }
+local t_choice_a = util.random_weighted_from("weight", weaker_t)
+local t_choice_b = t_choice_a
+while t_choice_a == t_choice_b do
+ t_choice_b = util.random_weighted_from("weight", weaker_t)
+end
+}}
KMASK: ^~ = no_item_gen
+SHUFFLE: DdOo / HhPp
+# As a replacement to the small chance of both wing entrances being covered in
+# traps, cover up one and use weaker traps along the full path of the other.
+: if crawl.one_chance_in(4) then
+NSUBST: H = 1:^ / * = ^.
+SUBST: D = .
+: kfeat("oO = " .. t_choice_a.t .. " / " .. t_choice_b.t)
+: else
+SUBST: D = ^.., O = d, o = .
+: end
+SUBST: P = h, Hp = .
# Place a minimum number of traps and some extra liches in each lower wing.
NSUBST: d = 2=5. / 4=~ / ., h = 2=5. / 4=~ / .
# In a each upper wing, place a few monsters along with locations for the main
@@ -4466,14 +4494,11 @@ NSUBST: f = 3 / 4 / 6 / 9 = ? .:8 / e, k = 3 / 4 / 6 / 9 = ? .:8 / j
# Minimum number of traps in each upper wing.
NSUBST: e = 4=~ / ., j = 4=~ / .
# Each upper wing has equal chance to get one of three sets that most heavily
-# weight a specific monster: killer klown, ancient lich, or orb of fire.
+# weight specific monsters: killer klown, ancient / dread lich, or orb of fire.
SUBST: ? : KLM
SUBST: K = 0 4:40 5 6 ., L = 0 4 5:40 6 ., M = 0 4 5 6:40 .
# Make a final sprinkling of traps throughout the vault.
SUBST: . = ~ .:600
-# Put traps in wing entrances with decreased odds on one side to make double
-# trapped entrances rarer.
-SUBST: D = ^..., H = ^.
# For upper-wing entrances, sometimes put statue monsters, traps, or statues.
SUBST: E = 2 ^:20 G .:80, J = 2 ^:20 G .:80
# For the orb chamber, some guaranteed and random traps. About 4 on-average.
@@ -4509,7 +4534,7 @@ XXXXXXXXXXXeeeeeeeeeeeeeeeeeeeeeecccccccccccccccjjjjjjjjjjjjjjjjjjjjjjXXXXXXXXXX
XXXXXXXXXXXXeeeeeeeeeeeeeeeeeeeXcccccccccccccccccXjjjjjjjjjjjjjjjjjjjXXXXXXXXXXX
XXXXXXXXXXXXXeeeeeeeeeeeeeeeXXXXcccccccccccccccccXXXXjjjjjjjjjjjjjjjXXXXXXXXXXXX
XXXXXXXXXXXXXXE111EccXXXXXXXXXXXcccccccccccccccccXXXXXXXXXXXccJ111JXXXXXXXXXXXXX
-XXXXXXXXXXXccdddddddddddddddDD1.ccccccccccccccccc.1HHhhhhhhhhhhhhhhhccXXXXXXXXXX
+XXXXXXXXXXXccddddddddddddddODDo1ccccccccccccccccc1pHHPhhhhhhhhhhhhhhccXXXXXXXXXX
XXXXXXXXXXccddddddddddddddddcc1...ccccccccccccc...1cchhhhhhhhhhhhhhhhccXXXXXXXXX
XXXXXXXXXccddddddddddddddddddccc...ccccccccccc...ccchhhhhhhhhhhhhhhhhhccXXXXXXXX
XXXXXXXXXcddddddddddddddddddddccc...............ccchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
@@ -4520,7 +4545,7 @@ XXXXXXXXXcddddddddddddddddddddcXXXc...........cXXXchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
XXXXXXXXXcddddddddddddddddddddcXXcc...........ccXXchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
XXXXXXXXXccddddddddddddddddddccXXc.............cXXcchhhhhhhhhhhhhhhhhhccXXXXXXXX
XXXXXXXXXXccddddddddddddddddccXXcc.............ccXXcchhhhhhhhhhhhhhhhccXXXXXXXXX
-XXXXXXXXXXXccddddddddddddddccXXXc...............cXXXcchhhhhhhhhhhhhhccXXXXXXXXXX
+XXXXXXXXXXXccddddddddddddddccXXXcp.............ocXXXcchhhhhhhhhhhhhhccXXXXXXXXXX
XXXXXXXXXXXXccccccccccccccccXXXXcccccccc@ccccccccXXXXccccccccccccccccXXXXXXXXXXX
ENDMAP
diff --git a/crawl-ref/source/dat/des/portals/bailey.des b/crawl-ref/source/dat/des/portals/bailey.des
index 7539bf476f..8e09b780cd 100644
--- a/crawl-ref/source/dat/des/portals/bailey.des
+++ b/crawl-ref/source/dat/des/portals/bailey.des
@@ -387,6 +387,7 @@ TAGS: bailey_polearm no_rotate
MONS: gnoll ; halberd ego:draining | halberd ego:electrocution pre_id
MONS: orc warrior ; halberd ego:electrocution pre_id . plate armour /\
orc knight ; halberd
+KFEAT: ^ = tyrant's trap
NSUBST: d = 1:ddde / *:d, 1 = 5:1 / *=1., 2 = 5:2 / *=2.
: item(dgn.loot_potions)
ITEM: potion of experience pre_id q:1 /\
@@ -397,9 +398,9 @@ ccc ccc ccccc ccc ccc
cAccc1ccc2+2ccc1ccc1c
cc+cc+cc+ccc+cc+cc+cc
cc.....cc cc.....cc
-ccc.....ccccc.....ccc
+ccc.^...ccccc.^...ccc
c1+..<..+1c1+..T..+1c
-ccc.....ccccc.....ccc
+ccc.....ccccc...^.ccc
cc....dcc ccd....cc
cc+cc+cc+ccc+cc+cc+cc
c1ccc1ccc2c2ccc1ccc2c
@@ -409,7 +410,7 @@ cc+cc+cc+ccc+cc+cc+cc
ccd.d.dcc ccd....cc
ccc.d2d.ccccc.....ccc
c1+d2U3d+1c1+..Y..+1c
-ccc.d2d.ccccc.....ccc
+ccc.d2d.ccccc...^.ccc
ccd.d.dcc cc.....cc
cc+cc+cc+ccc+cc+cc+cc
c<ccc1ccc2+2ccc1ccc1c
@@ -497,6 +498,7 @@ NSUBST: C = 1:+ / *:c
SUBST: D = c
#
KFEAT: ^ = alarm trap
+KFEAT: - = tyrant's trap
SUBST: W = w:2 .:1 W:1
SUBST: ? = c.
SUBST: N = nc
@@ -529,7 +531,7 @@ cccccccccc1.1...cEc...^.....^...ccc1Wwwwwwwxxxxxxxx
xxxxxwwwwwwwW1.1..c1.cccc+cccc.1c1Hwwwwwwwxxxxxxxxx
xxxxxxxwwwwwww~wW1cncc2.2.2.2ccncwwwwwwxxxxxxxxxxxx
xxxxxxxxx....~wwwwww(c.2.g.2.c(wwwwwxxxxxxxxxxxxxxx
-xxxxxxxxxx......Wwwwwccncncnccwwwwxxxxxxxxxxxxxxxxx
+xxxxxxxxxx....-.Wwwwwccncncnccwwwwxxxxxxxxxxxxxxxxx
xxxxxxxxxxx.......Wwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxx........WwwwwwwwWxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx.............xxxxxxxxxxxxxxxxxxxxxx
diff --git a/crawl-ref/source/dat/des/portals/wizlab.des b/crawl-ref/source/dat/des/portals/wizlab.des
index 9a0d9fa529..956543d740 100644
--- a/crawl-ref/source/dat/des/portals/wizlab.des
+++ b/crawl-ref/source/dat/des/portals/wizlab.des
@@ -2280,13 +2280,14 @@ kmons("5 = patrolling Head Instructor dbname:Head_Instructor name:"
ITEM: any book w:15 / randbook disc:hexes owner:Yara w:4 / spellbinder w:1
ITEM: scroll of enchant armour pre_id / scroll of enchant weapon pre_id
KFEAT: C = cache of fruit / cache of meat / cache of baked goods
+KFEAT: ^ = archmage's trap
NSUBST: * = 4:d / 4:e / *=*., 5 = 1:5 / *:1, D = 1:2 / * = 1G
NSUBST: E = 1:2 / *:1, 3 = 1:4 / * = 3", A = 1:< / *:A, C = 3 = C.. / *:.
SUBST: P : Pt", F = 211111, 1 = 1...., x = xxxx., - = x
-FTILE: 125.C*de$GS+ = floor_limestone
+FTILE: 125.^C*de$GS+ = floor_limestone
FTILE: Tt"PA<34 = floor_dirt / floor_grass:15
-TILE: x = wall_brick
TILE: c = wall_church
+LROCKTILE: wall_brick
: vault_metal_statue_setup(_G, "S", "misfortune conduit")
: set_random_mon_list(
: "mana viper / tengu conjurer / ogre mage / " ..
@@ -2313,19 +2314,19 @@ t".1xx.11.xx.............1xx"""ttt
t".xx..1.xx...1.xxt""txx..1xxttt
t".xx..1xx...1.xx"3""3"xx...xxcccccccccccc
t"1x...xx.....xx"3""""3"xx.....11......11c
-t".x...x.....xx"""c""c"""xx..............c
+t".x...x.....xx"""c""c"""xx...^..^.....^.c
t".x11.x..t..x""c""33""c""xx...cc"cc"cc..c
t".t...t..t..t""""PWWP""""txx..cD"D""Dc..c
-t".........."""c"PWWWWP"c"".x..""""""""..c
+t".........."""c"PWWWWP"c"".x.^""""""""^.c
t"1....11.t."""c"WWWWWW"c""....c""cc"Dc.1c
cccc++cccct."""""WWWWWW""""t...cD"cc""c.1c
-c*Cc..cC*ctt"""c"PWWWWP"c""x...""""""""..c
+c*Cc..cC*ctt"""c"PWWWWP"c""x..^""""""""^.c
cE.+..+.Ec-t""""c"PWWP"c"""x...cD""D"Dc..c
ccccE.cccc-t""""""""""""""txt..cc"cc"cc..c
-cE.+..+CEc-t""""""c33c""""---............c
-c*Cc..cE*c---"""""t""t""""---..11......11c
-ccccE.cccc --"""tt""tt"""--cccccccccccccc
-c*Cc..cE*c --"""t""t"""--
+cE.+..+CEc-t""""""c33c""""---.^.....^..^.c
+c*Cc^.cE*c---"""""t""t""""---..11......11c
+ccccE^cccc --"""tt""tt"""--cccccccccccccc
+c*Cc^.cE*c --"""t""t"""--
cEE+..+CEc --""""""""--
cccc.Ecccc --""""""--
cE.+..+CEc --""""--
@@ -2557,6 +2558,7 @@ KITEM: Q = star_item
KITEM: JKL = potion of moonshine pre_id
KFEAT: C = cache of meat / cache of fruit / cache of baked goods
KFEAT: E = shallow_water
+KFEAT: ^ = harlequin's trap
KFEAT: N = granite_statue
NSUBST: A = 1:< / *:A, D = 1:D/*:-, W = 1:E / * = E:1 W:16, F = 1:F / * = F----
NSUBST: H = 1:H / *:", e = 4:e / 1:g / *=eedg, 5 = 3:5 / *=5..
@@ -2599,10 +2601,10 @@ ce5.c3.Cc..33..33..c
ccccccccc+cccccccc+c
cee3c'''NNNN'''cccccccccc
c444c''''''''''+....4..4c
- ccc+c''N''''N''+..WWWW?.c
+ ccc+c''N''''N''+.^WWWW?.c
c44.c''''''''''n.WWWWWW4c
c3..+''''NN''''n.WWWWWW.c
- c..CcN''""""'''n.?WWWW..c
+ c..CcN''""""'''n.?WWWW^.c
c+ccc'''"HH"'''n4......4c
c..3c'N'"HH"'N'cccccnn+nctttttt
c4..+'''""""'''c4eecF----ttt-?tttttttttt
@@ -2612,14 +2614,14 @@ ccccccccc+cccccccc+c
c...+''''''''''c..4ct---tt------WWW---tt
c..CcNN'''''NN'+..CcttFtttt-----F----ttt
c+ccccccc++ccccccccctt--tttt-?tt--tttt
- c..4.4.G.?..G.4.4.Cct--Fttttttttttttt
+ c..4^4.G.?..G.4^4.Cct--Fttttttttttttt
c.3..............3.ct--tttttttttttttt
c..4G..........G4..ctt-tttt
ttc+ccccccc++ccccccc+ctF-tttt
tttc.....4cG..Gc4.....ct-J-ttt
ttttc..3...c....c...3..ct--ttt
-ttttc......+.??.+......ct-tttt
-ttttc4...3.c....c.3...4ct--ttt
+ttttc.^....+.??.+....^.ct-tttt
+ttttc4...3.c^..^c.3...4ct--ttt
ttttccccccccc++ccccccccc---tt
ttttt--------DD----------Fttt
tttttF--J------------------tt
diff --git a/crawl-ref/source/dat/des/variable/float.des b/crawl-ref/source/dat/des/variable/float.des
index a4f923822e..9a0142fa63 100644
--- a/crawl-ref/source/dat/des/variable/float.des
+++ b/crawl-ref/source/dat/des/variable/float.des
@@ -6587,6 +6587,8 @@ NSUBST: % = 2:| / 4:% / *:$
CLEAR: z
: end
KFEAT: ^ = teleport trap
+KFEAT: ~ = archmage's trap
+KFEAT: _ = altar_sif_muna / altar_vehumet
KITEM: | = any book w:5 / any magical staff / any ring / any amulet / \
any misc / any wand w:5
SUBST: ! = 56
@@ -6598,7 +6600,7 @@ zccccc$$+e...3..%|ccccccc|%..2....c$$cccccz
zcc..c$.c....7..%%ccccccc%%..7....c.$c..ccz
zc..%+.+cccc.7.ccccccccccccc.7.c+ccc.c.*.cz
zc.*.cc+.c.ccwcc.%.ccccc.%.cclcc.c.cc+%..cz
-zcc..cc..c..ccc..c.?ccc?.c..ccc..c..cc..ccz
+zcc..cc..c..ccc..c.?c_c?.c..ccc..c..cc..ccz
zcc.ccc......c...c..!U!..c...c......ccc.ccz
cc.cc$..c......4c...?...c4......c..$cc.cc
c.cc$$$c%%.c...%...c...%...c.%%c$$$cc.c
@@ -6612,7 +6614,7 @@ zcc+ccc..c.c..cc...ccccc...cc..c.c..+cc.ccz
zcc..ccccc+cccccb...bbb...bccccc+cccc+..ccz
zc..%ccc.....ccclb...?...bwccc.....ccc%..cz
zc.%.cc.......ccccccccccccccc.......cc.%.cz
-zcc..cc...!...cccc...^...cccc...!...cc..ccz
+zcc..cc...!...cccc~..^..~cccc...!...cc..ccz
zcccclc.......ccc..cc.cc..ccc.......cwccccz
zzzzzccc.1..5..$..ccc.ccc..$..6..1.ccczzzzz
zzccc...ccccccccc.ccccccccc...ccczz
diff --git a/crawl-ref/source/dat/descript/features.txt b/crawl-ref/source/dat/descript/features.txt
index 64f479cc2f..8a7694e687 100644
--- a/crawl-ref/source/dat/descript/features.txt
+++ b/crawl-ref/source/dat/descript/features.txt
@@ -768,33 +768,67 @@ noise it creates, it will apply an enchantment making monsters all over the
level aware of your location. Hostile monsters may trigger this trap themselves
to invoke its effects against you, but your allies will avoid stepping on it.
%%%%
+An archmage's trap
+
+A magical trap crafted by some avaricious master wizard. When you or a hostile
+monster steps on it, you will lose a percentage of your mp, while up to three of
+the strongest hostile spellcasters in sight will have their spells empowered.
+Your allies will avoid stepping on it.
+%%%%
+A devourer's trap
+
+A magical trap linked by divine cruelty to the stomachs of some unfathomable
+interdimensional predators. When you or a hostile monster steps on it, it has a
+high chance it will expel digestive acid onto you, corroding you. Your allies
+will avoid stepping on it.
+%%%%
A dispersal trap
Anyone stepping on this trap will translocate themself and anyone else in view
to a new location nearby. Hostile monsters may trigger this trap, but your
allies will avoid stepping on it.
%%%%
+A harlequin's trap
+
+A magical trap left behind by the ineffable, spectacular revues of chaos. When
+you or a hostile monster steps on it, up to three of the strongest monsters in
+sight will have their attacks temporarily interwoven with a touch of chaos. Your
+allies will avoid stepping on it.
+%%%%
A net trap
A large concealed net launcher hanging from the dungeon's ceiling. Enchanted by
the power of Zot, whenever an intelligent creature steps here - whether friend
or foe - the net will land only on you.
%%%%
+A permanent teleport trap
+
+A magical trap which will displace anyone passing over it to a random place on
+the same dungeon level.
+%%%%
A pressure plate
A trigger of some sort. You cannot tell what kind of trap it is attached to.
Its complicated detection system will trigger the trap even when someone flies
over it.
%%%%
+A spike launcher
+
+A magical contraption which skewers nearby monsters with sharp spikes. It will
+disintegrate after a short length of time or if the caster strays too far away
+from it.
+%%%%
A teleport trap
A magical trap which will displace anyone passing over it to a random place on
the same dungeon level. It is worn with age, and will dissipate on use.
%%%%
-A permanent teleport trap
+A tyrant's trap
-A magical trap which will displace anyone passing over it to a random place on
-the same dungeon level.
+A magical trap built to bolster the armies of some conquering despot. When you
+or a hostile monster steps on it, your melee attacks will be weakened to make
+up to three of the most dangerous monsters in sight become stronger. Your
+allies will avoid stepping on it.
%%%%
A web
@@ -809,12 +843,6 @@ contaminated with enormous amounts of wild magic, have mighty fiends summoned
against you, or the like. Hostile monsters may trigger this trap themselves to
invoke its effects against you, but your allies will avoid stepping on it.
%%%%
-A spike launcher
-
-A magical contraption which skewers nearby monsters with sharp spikes. It will
-disintegrate after a short length of time or if the caster strays too far away
-from it.
-%%%%
########################################################################
### Portal vault entrances
########################################################################
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index ce4a32eaf4..15989f28fe 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -872,21 +872,25 @@ static string _artefact_descrip(const item_def &item)
static const char *trap_names[] =
{
#if TAG_MAJOR_VERSION == 34
- "dart", "arrow", "spear",
+ "harlequin's", "archmage's", "spear",
#endif
#if TAG_MAJOR_VERSION > 34
+ "tyrant's",
+ "archmage's",
+ "harlequin's",
+ "devourer's",
"dispersal",
"teleport",
#endif
"permanent teleport",
"alarm",
#if TAG_MAJOR_VERSION == 34
- "blade", "bolt",
+ "tyrant's", "bolt",
#endif
"net",
"Zot",
#if TAG_MAJOR_VERSION == 34
- "needle",
+ "devourer's",
#endif
"shaft",
"passage",
diff --git a/crawl-ref/source/dungeon-feature-type.h b/crawl-ref/source/dungeon-feature-type.h
index 8c77016bb6..d4e385b5cd 100644
--- a/crawl-ref/source/dungeon-feature-type.h
+++ b/crawl-ref/source/dungeon-feature-type.h
@@ -91,6 +91,10 @@ enum dungeon_feature_type
DNGN_TRAP_SHAFT,
DNGN_TRAP_WEB,
#if TAG_MAJOR_VERSION > 34
+ DNGN_TRAP_TYRANT,
+ DNGN_TRAP_ARCHMAGE,
+ DNGN_TRAP_HARLEQUIN,
+ DNGN_TRAP_DEVOURER,
DNGN_TRAP_ALARM,
DNGN_TRAP_ZOT,
DNGN_TRAP_DISPERSAL,
@@ -341,10 +345,10 @@ enum dungeon_feature_type
DNGN_SEALED_CLEAR_DOOR,
DNGN_TOXIC_BOG,
- DNGN_TRAP_ARROW,
+ DNGN_TRAP_ARCHMAGE,
DNGN_TRAP_SPEAR,
- DNGN_TRAP_BLADE,
- DNGN_TRAP_DART,
+ DNGN_TRAP_TYRANT,
+ DNGN_TRAP_HARLEQUIN,
DNGN_TRAP_BOLT,
DNGN_TRAP_NET,
DNGN_TRAP_PLATE,
@@ -376,6 +380,7 @@ enum dungeon_feature_type
DNGN_CACHE_OF_BAKED_GOODS,
DNGN_DECORATIVE_FLOOR, // XXX: dummy for redefinition until we rewrite code
DNGN_SPIKE_LAUNCHER,
+ DNGN_TRAP_DEVOURER,
#endif
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index b98939b962..3221c0b0f4 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -3550,7 +3550,16 @@ static bool _builder_normal()
static void _place_traps()
{
- const int num_traps = random2avg(2 * trap_rate_for_place(), 2);
+
+ int num_traps = random2avg(2 * trap_rate_for_place(), 2);
+
+ // Snake and Vaults don't have a lot of unique terrain types or open
+ // themes compared to their adjacent branches, and have themed weaker
+ // trap options to fall back on, so they get extra traps.
+ if (player_in_branch(BRANCH_SNAKE))
+ num_traps += 2;
+ else if (player_in_branch(BRANCH_VAULTS))
+ num_traps += 1;
ASSERT(num_traps >= 0);
dprf("attempting to place %d traps", num_traps);
diff --git a/crawl-ref/source/enchant-type.h b/crawl-ref/source/enchant-type.h
index 125d2ecaea..b62bd90752 100644
--- a/crawl-ref/source/enchant-type.h
+++ b/crawl-ref/source/enchant-type.h
@@ -234,6 +234,7 @@ enum enchant_type
ENCH_TEMPERED,
ENCH_HATCHING,
ENCH_BLINKITIS,
+ ENCH_CHAOS_LACE,
// Update enchant_names[] in mon-ench.cc when adding or removing
// enchantments.
NUM_ENCHANTMENTS
diff --git a/crawl-ref/source/feature-data.h b/crawl-ref/source/feature-data.h
index 22057b8462..e8e456cd84 100644
--- a/crawl-ref/source/feature-data.h
+++ b/crawl-ref/source/feature-data.h
@@ -333,10 +333,7 @@ static feature_def feat_defs[] =
#if TAG_MAJOR_VERSION == 34
TRAP(DNGN_TRAP_MECHANICAL, "mechanical trap", "trap_mechanical", LIGHTCYAN),
-TRAP(DNGN_TRAP_ARROW, "arrow trap", "trap_mechanical", LIGHTCYAN),
TRAP(DNGN_TRAP_SPEAR, "spear trap", "trap_mechanical", LIGHTCYAN),
-TRAP(DNGN_TRAP_BLADE, "blade trap", "trap_mechanical", LIGHTCYAN),
-TRAP(DNGN_TRAP_DART, "dart trap", "trap_mechanical", LIGHTCYAN),
TRAP(DNGN_TRAP_BOLT, "bolt trap", "trap_mechanical", LIGHTCYAN),
#endif
TRAP(DNGN_TRAP_NET, "net trap", "trap_mechanical", LIGHTCYAN),
@@ -348,6 +345,10 @@ TRAP(DNGN_TRAP_TELEPORT_PERMANENT, "permanent teleport trap", "trap_teleport_per
TRAP(DNGN_TRAP_SHADOW, "shadow trap", "trap_shadow", BLUE),
TRAP(DNGN_TRAP_SHADOW_DORMANT, "dormant shadow trap", "trap_shadow_dormant", BLUE),
#endif
+TRAP(DNGN_TRAP_TYRANT, "tyrant's trap", "trap_tyrant", WHITE),
+TRAP(DNGN_TRAP_ARCHMAGE, "archmage's trap", "trap_archmage", BLUE),
+TRAP(DNGN_TRAP_HARLEQUIN, "harlequin's trap", "trap_harlequin", YELLOW),
+TRAP(DNGN_TRAP_DEVOURER, "devourer's trap", "trap_devourer", LIGHTGREEN),
TRAP(DNGN_TRAP_ALARM, "alarm trap", "trap_alarm", LIGHTRED),
TRAP(DNGN_TRAP_ZOT, "Zot trap", "trap_zot", LIGHTMAGENTA),
TRAP(DNGN_PASSAGE_OF_GOLUBRIA, "passage of Golubria", "passage of golubria", GREEN),
diff --git a/crawl-ref/source/hints.cc b/crawl-ref/source/hints.cc
index 7132388502..649622dabd 100644
--- a/crawl-ref/source/hints.cc
+++ b/crawl-ref/source/hints.cc
@@ -2456,14 +2456,15 @@ static void _hints_describe_feature(int x, int y, ostringstream& ostr)
{
case DNGN_TRAP_TELEPORT:
case DNGN_TRAP_TELEPORT_PERMANENT:
+ case DNGN_TRAP_TYRANT:
+ case DNGN_TRAP_ARCHMAGE:
+ case DNGN_TRAP_HARLEQUIN:
+ case DNGN_TRAP_DEVOURER:
case DNGN_TRAP_ALARM:
case DNGN_TRAP_ZOT:
#if TAG_MAJOR_VERSION == 34
case DNGN_TRAP_MECHANICAL:
- case DNGN_TRAP_ARROW:
case DNGN_TRAP_SPEAR:
- case DNGN_TRAP_BLADE:
- case DNGN_TRAP_DART:
case DNGN_TRAP_BOLT:
#endif
case DNGN_TRAP_NET:
diff --git a/crawl-ref/source/mon-cast.cc b/crawl-ref/source/mon-cast.cc
index b36a803abd..957b2dcb84 100644
--- a/crawl-ref/source/mon-cast.cc
+++ b/crawl-ref/source/mon-cast.cc
@@ -2800,6 +2800,8 @@ static bool _mons_call_of_chaos(const monster& mon, bool check_only = false)
15, BEAM_INNER_FLAME);
enchant_actor_with_flavour(*mi, &mon, flavour);
+ flash_tile(mi->pos(), random_choose(RED, BLUE, GREEN, YELLOW, MAGENTA),
+ 80, TILE_BOLT_CHAOS_BUFF);
affected++;
if (you.can_see(**mi))
diff --git a/crawl-ref/source/mon-ench.cc b/crawl-ref/source/mon-ench.cc
index cbfea3648b..9c5e735349 100644
--- a/crawl-ref/source/mon-ench.cc
+++ b/crawl-ref/source/mon-ench.cc
@@ -978,6 +978,10 @@ void monster::remove_enchantment_effect(const mon_enchant &me, bool quiet)
if (!quiet)
simple_monster_message(*this, " looks more stable.");
+ case ENCH_CHAOS_LACE:
+ if (!quiet)
+ simple_monster_message(*this, " is no longer laced with chaos.");
+
default:
break;
}
@@ -1386,6 +1390,7 @@ void monster::apply_enchantment(const mon_enchant &me)
case ENCH_CHANGED_APPEARANCE:
case ENCH_KINETIC_GRAPNEL:
case ENCH_TEMPERED:
+ case ENCH_CHAOS_LACE:
decay_enchantment(en);
break;
@@ -2143,7 +2148,7 @@ static const char *enchant_names[] =
"magnetised",
"armed",
"misdirected", "changed appearance", "shadowless", "doubled_vigour",
- "grapnel", "tempered", "hatching", "blinkitis",
+ "grapnel", "tempered", "hatching", "blinkitis", "chaos_laced",
"buggy", // NUM_ENCHANTMENTS
};
diff --git a/crawl-ref/source/mon-info-flag-name.h b/crawl-ref/source/mon-info-flag-name.h
index f59487f8e3..a5a8c2bcef 100644
--- a/crawl-ref/source/mon-info-flag-name.h
+++ b/crawl-ref/source/mon-info-flag-name.h
@@ -155,4 +155,5 @@ static const vector<monster_info_flag_name> monster_info_flag_names = {
{ MB_KINETIC_GRAPNEL, "grapneled", "grapneled", "grapneled"},
{ MB_TEMPERED, "tempered", "tempered", "tempered"},
{ MB_BLINKITIS, "untethered", "untethered in space", "untethered"},
+ { MB_CHAOS_LACE, "chaos-laced", "interlaced with chaos", "chaos-laced"},
};
diff --git a/crawl-ref/source/mon-info.cc b/crawl-ref/source/mon-info.cc
index e00d54ee7c..32f4790c51 100644
--- a/crawl-ref/source/mon-info.cc
+++ b/crawl-ref/source/mon-info.cc
@@ -142,6 +142,7 @@ static map<enchant_type, monster_info_flags> trivial_ench_mb_mappings = {
{ ENCH_KINETIC_GRAPNEL, MB_KINETIC_GRAPNEL },
{ ENCH_TEMPERED, MB_TEMPERED },
{ ENCH_BLINKITIS...
[truncated message content] |