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