1################################################################################
2# vaults_rooms_ghost.des: Ghost subvaults for the Vaults.
3#
4# Content: These are vault rooms that place a player ghost. All vaults here
5# should call the function vaults_ghost_setup(). In addition to setting other
6# standard tags for ghost vaults, this function will add the vaults_ghost tag
7# that these vaults must have so they'll follow the global chance for placing a
8# ghost vault on a level.
9#
10# Do not use other tag selectors like vaults_room and vaults_hard in these
11# vaults, however any of the other standard vault room tags for orientation
12# etc. are fine. Set a different WEIGHT to make a specific vault more or less
13# common.
14################################################################################
15
16: crawl_require("dlua/ghost.lua")
17: crawl_require("dlua/vault.lua")
18
19NAME:   advil_vaults_ghost_guards
20TAGS:   allow_dup
21KITEM:  12 = superb_item / star_item
22KMONS:  1 = vault guard / ironbound convoker / ironbound preserver / \
23            vault warden
24KMONS:  2 = vault warden
25KMONS:  3 = player ghost
26SHUFFLE: 13
27: vaults_ghost_setup(_G)
28MAP
29........
30........
31..nnnn..
32..n31n..
33..n12n..
34..n==n..
35........
36........
37ENDMAP
38
39# based on st_lines
40NAME:   advil_vaults_ghost_lines
41TAGS:   allow_dup
42KITEM:  123 = superb_item / star_item
43KMONS:  1 = vault guard / ironbound convoker / ironbound preserver / \
44            vault warden
45KMONS:  2 = vault warden
46KMONS:  3 = player ghost
47SHUFFLE: 1239
48SUBST: 9 = 98
49: vaults_ghost_setup(_G)
50MAP
51........
52nnn==nnn
53..=92=..
54..=31=..
55nnn==nnn
56........
57ENDMAP
58
59NAME:   gammafunk_vaults_ghost_grave
60TAGS:   allow_dup
61TAGS:   vaults_orient_w
62: lone_ghost_guarded_loot(_G, "O")
63: lone_ghost_extra_loot(_G, ".")
64KMONS:  p = withered plant
65KMONS:  O = player ghost
66SUBST:  t : tp
67TILE:   G = dngn_gravestone
68TILE:   t = dngn_tree_dead
69COLOUR: t = brown
70: set_feature_name("granite_statue", "a gravestone")
71: set_feature_name("tree", "dead tree")
72: vaults_ghost_setup(_G)
73MAP
74..x.....
75..x.....
76..n.dt..
77..=.OGt.
78..n.et..
79..x.....
80..x.....
81ENDMAP
82
83NAME:   gammafunk_vaults_ghost_split
84TAGS:   allow_dup
85KMONS:  O = player ghost
86: ghost_good_loot(_G)
87SUBST:  fg = |*, p : b., q : b., b : xbcv
88NSUBST: D = 0 / 2=0. / 2=9 / 2=9. / 8 / 2=8. / .
89: vaults_ghost_setup(_G)
90MAP
91.............
92.............
93..xxxnnnxxx..
94..nD..D..Dx..
95..n..qpq..x..
96..=.Dpqpe.n..
97..=...OgdDn..
98..=.Dpqpf.n..
99..n..qpq..x..
100..nD..D..Dx..
101..xxxnnnxxx..
102.............
103.............
104ENDMAP
105
106NAME:    gammafunk_vaults_ghost_cemetery
107TAGS:    vaults_orient_s allow_dup
108KMONS:   DFH = player ghost
109KMONS:   p = withered plant
110# 1/12 chance for 5 ghosts, 1/6 for 4, 1/4 for 3, 1/2 for 2.
111SHUFFLE: FfrHhs / ZyzHhs / ZyzHhs / FfrZyz / FfrZyz / FfrZyz / ZyzZyz / \
112         ZyzZyz / ZyzZyz / ZyzZyz / ZyzZyz / ZyzZyz
113: ghost_good_loot(_G)
114# 1.5 items per ghost. One 'd' glyph and one 'e' glyph are used by the good
115# loot items, so we don't replace those.
116NSUBST:  d = d / |*.., e = e / |*.., f = |* / |*.., h = 2=|* / |*..
117SUBST:   qrs = G, Z = ., y = p, z = V, t : tp
118TILE:    G = dngn_gravestone
119TILE:    t = dngn_tree_dead
120: set_feature_name("granite_statue", "a gravestone")
121: vaults_ghost_setup(_G)
122MAP
123qd-frf-eq
124dD--F--De
125---------
126h-------h
127sH-----Hs
128h-------h
129xnn===nnx
130.........
131.........
132ENDMAP
133
134NAME:   gammafunk_vaults_ghost_necromancy
135TAGS:   vaults_orient_w allow_dup
136KMONS:  O = player ghost
137MONS:   simulacrum place:Vaults:5 / spectre place:Vaults:5, lich
138: ghost_good_loot(_G)
139SUBST:  fg = |*, h = *, i = %$, j = -
140NSUBST: 1 = 12 / 1, - = 3=1 / 6=1. / .
141: vaults_ghost_setup(_G)
142MAP
143..xxxxxxx
144..n1x1x1x
145..n---igx
146..=---exx
147..=---dOx
148..=---fxx
149..n---jhx
150..n1x1x1x
151..xxxxxxx
152ENDMAP
153
154NAME:   gammafunk_vaults_ghost_spectres
155TAGS:   vaults_orient_w
156KMONS:  O = player ghost
157MONS:   wraith / shadow
158MONS:   freezing wraith / shadow wraith / phantasmal warrior / flayed ghost w:5
159MONS:   eidolon, revenant / curse skull
160: ghost_good_loot(_G)
161SUBST:  fg = |*, h = *, i = %$--
162NSUBST: D = 2 / 3 / 2=3- / 4-, - = 2=1 / 2=1. / 2 / 3=2. / .
163: vaults_ghost_setup(_G)
164MAP
165..xxxxxxx
166..nDxDxDx
167..n----gx
168..=---exx
169..=--idOx
170..=---fxx
171..n----hx
172..nDxDxDx
173..xxxxxxx
174ENDMAP
175
176NAME:   gammafunk_vaults_ghost_fury_of_okawaru
177TAGS:   vaults_orient_s
178KFEAT:  O = altar_okawaru
179KMONS:  OP = player ghost
180# Bad Oka gift.
181KITEM:  O = hat damaged ident:all / cloak damaged ident:all / \
182        animal skin damaged ident:all / robe damaged ident:all / \
183        leather armour damaged ident:all / whip damaged ident:all / \
184        spear damaged ident:all / short sword damaged ident:all / \
185        dagger damaged ident:all / hand axe damaged ident:all / \
186        scythe damaged ident:all / club damaged ident:all / \
187        hunting sling damaged ident:all
188KITEM:  P = robe plus:-8 randart ident:all
189# An "Oka weapon gift" using the more useful types on 'd'
190ITEM:   quick blade good_item w:5 / rapier good_item / scimitar good_item / \
191        double sword good_item w:5 / demon blade good_item w:5 / \
192        triple sword good_item w:5 /  morningstar good_item / \
193        eveningstar good_item w:5 / demon whip good_item w:5 / \
194        dire flail good_item / great mace good_item / broad axe good_item / \
195        battleaxe good_item / executioner's axe good_item w:5 / \
196        demon trident good_item w:5 / glaive good_item / \
197        bardiche good_item w:5 / lajatang good_item w:5
198# An "Oka armour gift" on 'e'
199ITEM:   any armour good_item / any armour randart
200MONS:   centaur warrior / tengu warrior / orc knight / naga warrior / \
201        merfolk impaler / merfolk javelineer / deep elf knight / \
202        deep elf archer
203MONS:   minotaur / stone giant / orc warlord
204MONS:   fire giant / frost giant / deep elf blademaster / \
205        deep elf master archer / titan
206# Rarely place the robe of misfortune or a bad randart robe.
207SUBST:  O = O:49 P:1, fgh = |*, i = *%, j = %$..
208NSUBST: - = 3=1 / 4=1. / 2=2 / 2=2. / 2=3. / 3... / .
209: vaults_ghost_setup(_G)
210MAP
211GvvvvvvvG
212-igvOvhj-
213---edf---
214-vG---Gv-
215---------
216-vG---Gv-
217---------
218nnn===nnn
219.........
220.........
221ENDMAP
222
223NAME:   ebering_vaults_ghost_inner_flame
224TAGS:   vaults_orient_w
225KPROP:  xn'O = w:5 bloody / nothing
226KMONS:  O = player_ghost
227KITEM:  O = scroll of immolation ident:all
228NSUBST: ' = |* / |*$ / 998 / 2=F. / .
229MARKER: F = lua:fog_machine { cloud_type = "black smoke", \
230            pow_min = 10000, pow_max = 10000, delay = 1, \
231            size = 1, walk_dist = 0, start_clouds = 1 }
232: vaults_ghost_setup(_G)
233MAP
234..x....
235..x''..
236..n'''.
237..='O'.
238..n'''.
239..x''..
240..x....
241ENDMAP
242
243NAME:   ebering_vaults_ghost_reflecting_pool
244TAGS:   vaults_orient_s no_pool_fixup allow_dup
245: lone_ghost_guarded_loot(_G, "O")
246: lone_ghost_extra_loot(_G, ".")
247KMONS:  O = player_ghost
248KFEAT:  O = shallow_water
249: vaults_ghost_setup(_G)
250MAP
251.....
252.dOe.
253..w..
254..w..
255..w..
256..W..
257xn=nx
258.....
259.....
260ENDMAP
261
262NAME:   ebering_vaults_ghost_disaster_area
263TAGS:   vaults_orient_s allow_dup
264KMONS:  O = player ghost
265NSUBST: ' = d / e / 8=wWl / .
266: lone_ghost_guarded_loot(_G, "O")
267: lone_ghost_extra_loot(_G, ".")
268SUBST:  P = GTV
269: vaults_ghost_setup(_G)
270MAP
271'xx'x'x'
272x''O''x'
273'x'''''x
274''P'x''x
275x'''''''
276xnn==nnx
277........
278........
279ENDMAP
280
281NAME:   ebering_vaults_ghost_gozag
282: kitem("D = " .. dgn.loot_potions)
283# If ghost selectors ever happen this should be a gozag ghost
284KMONS:  O = player_ghost
285# D and F place an 8 monster plus potion or shop, respectively. D and J place
286# an abandoned shop for decor.
287KMONS:  DF = 8
288MONS:   obsidian statue
289NSUBST: M = 0 / 2=09 / 9 / 2=D / J
290SUBST:  D = DF
291# The ' glyph is used to place gold.
292: setup_gozag_gold(_G)
293KFEAT:  ODJ = abandoned_shop
294KFEAT:  F = antiques shop
295KFEAT:  _ = altar_gozag
296TILE:   G = dngn_golden_statue
297FTILE:  -_DFJ$0189OG = floor_limestone
298COLOUR: G = yellow
299: set_feature_name("granite_statue", "golden statue")
300: set_feature_name("stone_wall", "golden wall")
301: vaults_ghost_setup(_G)
302MAP
303.............
304.............
305...ccccccc...
306..ccMGOGMcc..
307..cM'''''Mc..
308..cG''1''Gc..
309..cM''_''Mc..
310..cc'''''cc..
311...nn===nn...
312.............
313.............
314ENDMAP
315
316NAME:   ebering_vaults_ghost_xom
317TAGS:   vaults_orient_s
318: lone_ghost_guarded_loot(_G, "O")
319: lone_ghost_extra_loot(_G, ".")
320: setup_xom_dancing_weapon(_G)
321KMONS:  O = player_ghost
322KFEAT:  _ = altar_xom
323: vaults_ghost_setup(_G)
324MAP
325...1...
326..d_e..
327...O...
328xxn=nxx
329.......
330.......
331ENDMAP
332
333NAME:   biasface_vaults_ghost_orc_armoury
334TAGS:   vaults_orient_s
335:item(dgn.good_aux_armour)
336ITEM:   any armour good_item, any weapon good_item, any jewellery good_item
337: item(dgn.loot_potions .. " / " .. dgn.loot_scrolls)
338KMONS:  O = player ghost
339MONS:   orc, orc warrior, orc knight, orc high priest, stone giant, orc warlord
340: setup_armoury_orcs(_G)
341NSUBST: - = 2=1 / 2=1. / 2=2 / 2=2. / 3=3 / 3=3. / 4 / 2=4. / F / 5 / 2=5. \
342            / 2=6F..
343KFEAT:  _ = altar_beogh
344: vaults_ghost_setup(_G)
345MAP
346I---fd_eg---I
347------h------
348-xIx--I--xIx-
349-xnx--O--xnx-
350----xxnxx----
351.............
352nnnnn===nnnnn
353I...........I
354.............
355ENDMAP
356
357NAME:   ploomutoo_gammafunk_vaults_ghost_potion_laboratory
358TAGS:   vaults_orient_s
359WEIGHT: 5
360ITEM:   potion of mutation ident:type q:1
361: item(dgn.loot_potions)
362ITEM:   hat randart / robe randart / pair of gloves randart / \
363        pair of boots randart / cloak randart
364KITEM:  O = potion of cancellation q:2 ident:type
365KMONS:  O = player ghost
366MONS:   shapeshifter, glowing orange brain, very ugly thing
367MONS:   glowing shapeshifter, cacodemon, tentacled monstrosity
368NSUBST: - = 2=P / 2=P; / ;, ' = 2=P` / `
369NSUBST: ; = d / d. / 4=e / 4=3 / 4=3. / 2 / 2. / 2=6 / 2=6. / .
370NSUBST: " = 3=d / d. / e / f / ", ` = 4=1 / 4=1. / 4 / 3=4. / 5 / 2=5. / .
371MARKER: P = lua:fog_machine { cloud_type = "mutagenic fog", pow_min = 3, \
372                pow_max = 5, delay = 5, start_clouds = 3, size = 1, \
373                spread_rate = 0, excl_rad = 0 }
374MARKER: U = lua:fog_machine { cloud_type = "mutagenic fog", pow_min = 3, \
375                pow_max = 5, delay = 5, start_clouds = 3, size = 2, \
376                spread_rate = 0, excl_rad = 0 }
377: vaults_ghost_setup(_G)
378MAP
379bU"P"Ub
380"""O"""
381'''''''
382'b'''b'
383```````
384nn===nn
385-------
386-x---x-
387x-x-x-x
388-x---x-
389;;;x;;;
390;x;;;x;
391;;;;;;;
392nn===nn
393.......
394.......
395ENDMAP
396
397NAME:   gammafunk_vaults_ghost_tricky_traps
398TAGS:   vaults_orient_s
399KFEAT:  ^ = zot trap / dispersal trap w:5 / alarm trap w:1 / floor w:16
400KFEAT:  ' = zot trap / dispersal trap w:5 / alarm trap w:1 / floor w:8
401: kitem("O = " .. dgn.randart_aux_armour)
402: ghost_good_loot(_G)
403KMONS:  O = player ghost
404MONS:   boggart, rakshasa
405SUBST:  f = |*, g = *, h = %$
406NSUBST: - = 1 / 2=1. / 5=0 / 6=0. / 2 / .
407SUBST:  G : GGtU
408: vaults_ghost_setup(_G)
409MAP
410G-'fdOeg'-G
411-n-n-h-n-n-
412'-'-'-'-'-'
413-'-n-n-n-'-
414G-'-'-'-'-G
415xxnn===nnxx
416^.^.....^.^
417.^.^.^.^.^.
418^.^.^.^.^.^
419.^.^.^.^.^.
420ENDMAP
421
422NAME:    gammafunk_vaults_ghost_crypt
423TAGS:    vaults_orient_s
424: item(dgn.loot_scrolls .. " / " .. dgn.loot_potions)
425# Always place one randart aux, one randart jewel, and one nice book, each
426# using the possible ghost locations.
427: kitem("D = " .. dgn.randart_aux_armour)
428KITEM:   EHK = any jewellery randart
429KITEM:   FJL = randbook owner:Kikubaaqudgha disc:necromancy numspells:6 \
430               / necronomicon / manual of necromancy
431KITEM:   12 = superb_item / star_item
432KMONS:   DEF = player ghost
433KMONS:   HJ1 =  lich
434KMONS:   KL2 =  ancient lich / dread lich
435# 1/7 chance for 3 ghosts, 2/7 chance for 2 ghosts, 4/7 chance for 1 ghost.
436# Any ghost that doesn't place will place a depth-appropriate lich instead.
437SHUFFLE: EF / EJ / EJ / HJ / HJ / HJ / HJ
438# For later branches, guarantee at least one ancient lich and upgrade ordinary
439# liches to ancient or dread liches.
440SUBST:   H = HHK, J = JJL
441NSUBST:  1 = 2 / 112
442# 1.5 loot items per ghost/lich total. Mix in good loot scrolls and potions.
443SUBST:   d = dd|*----, V = VY
444KFEAT:   _ = altar_kikubaaqudgha
445FTILE:   -d|*%$ODEFHJKL12VY_ = floor_pebble_brown / floor_pebble_darkgray
446: vaults_ghost_setup(_G)
447MAP
448 xxxDxxx
449xxExdxFxx
4501ddV_Vdd1
451x-------x
452xnn===nnx
453.........
454.........
455ENDMAP
456
457NAME:   gammafunk_vaults_ghost_door_vault
458WEIGHT: 2
459: ghost_good_loot(_G, "45")
460KMONS:  1 = 9
461KMONS:  2 = 8
462KMONS:  345 = player_ghost
463# Ghosts on 4 and 5 will get upgraded loot.
464NSUBST: 3 = 4 / 5 / 3, 1 = 5=23 / 3 / 1
465: door_vault_setup(_G)
466: vaults_ghost_setup(_G)
467MAP
468..............
469..............
470..aaaaaaaaaa..
471..a++++++++a..
472..a++++++++a..
473..a++1111++a..
474..a++1331++a..
475..a++1331++a..
476..a++1111++a..
477..a++++++++a..
478..a++++++++a..
479..aaaaaaaaaa..
480..............
481..............
482ENDMAP
483