Don't crash when dropping removed foods
[crawl.git] / crawl-ref / source / dat / des / altar / overflow.des
1 ###############################################################################
2 # overflow.des: This is the place where vaults containing overflow altars go.
3 #
4 # Altar vaults do not just provide flavour. They are crucial for ensuring
5 # that granted gods without altars in the Temple will be present in the
6 # early part of the dungeon. Such altars are called "overflow temples".
7 # Sometimes, ordinary altar maps featuring a single C glyph (random altar)
8 # are used. However, there are also vaults dedicated to a special god.
9 # These look much more interesting, of course.
10 # There are two TAGs to be used for single-altar maps with a specified god:
11 #
12 # TAG: temple_overflow_1 temple_overflow_FOO
13 #      Says the map will only ever be used for overflow temples to god FOO.
14 #      (The 1 indicates there's only one god placed by this vault.)
15 # TAG: uniq_altar_FOO
16 #      If you also add this, then the map can be placed randomly even if
17 #      that altar has been chosen at new-game time to be an overflow temple
18 #      on a specific level. If it happens to be randomly placed before being
19 #      generated specifically then it will only be placed once, rather than
20 #      being placed a second time at the location chosen at new-game time.
21 #
22 # And there is a TAG if you want a single-altar map to a random god:
23 #
24 # TAG: temple_overflow_generic_1
25 #      Allows any of the overflow temple altars to be used.
26 #      For this, use one B glyph in your map.
27 #
28 # If you want to check overflow temple placement in wizard mode, use the &:
29 # command. The levels overflow temples are placed on, and which gods are
30 # in them, are chosen at new-game time.
31 #
32 ###############################################################################
33
34 {{
35 function interest_check(e)
36   if not you.in_branch("D") or you.absdepth() > 9 then
37     e.tags('extra')
38   end
39 end
40
41 function get_overflow_altar_count(e)
42   local params = dgn.map_parameters()
43   if params ~= nil then
44     local tag = unpack(params)
45     if tag ~= nil then
46       -- temple_overflow_generic_ is 24 characters
47       return string.sub(tag, 25)
48     end
49   end
50
51   return nil
52 end
53
54 function altar_check(e)
55   if e.is_validating() then
56     e.subst('C = B')
57     return
58   end
59   if get_overflow_altar_count(e) ~= nil then
60     e.subst('C = B')
61   else
62     e.tags('extra')
63   end
64 end
65
66 function callback.vampire_church_blood(data, triggerable, triggerer, marker, ev)
67   local slaves = dgn.find_marker_positions_by_prop("slave_name", "vampire_church_blood")
68   crawl.god_speaks("Kikubaaqudgha", "As you approach the altar, the fountains"
69                                  .. " begin to flow with blood!")
70   for i, slave in ipairs(slaves) do
71     dgn.terrain_changed(slave.x, slave.y, "fountain_blood", false)
72   end
73 end
74
75 function callback.hep_ancestral_shrine_los(data, triggerable, triggerer, marker, ev)
76   if not dgn.persist.hep_ancestral_shrine_reborn and you.god() == "Hepliaklqana" then
77     local trees = dgn.find_marker_positions_by_prop("dead_tree", 1)
78     for i, slave in ipairs(trees) do
79       dgn.tile_feat_changed(slave.x, slave.y, "DNGN_TREE")
80     end
81     dgn.reset_feature_name_for(trees[1].x, trees[1].y, "tree")
82     local slime = dgn.find_marker_positions_by_prop("green_water", 1)
83     for i, slave in ipairs(slime) do
84       dgn.colour_at(slave.x, slave.y, "blue")
85     end
86     crawl.god_speaks("Hepliaklqana", "Let the past return from memory!")
87     dgn.persist.hep_ancestral_shrine_reborn = true
88   end
89 end
90
91 function callback.xom_greatest_gift(data, triggerable, triggerer, marker, ev)
92   if not dgn.persist.xom_gg_heard and you.god() == "Xom" then
93     dgn.persist.xom_gg_heard = true
94     dgn.persist.xom_gg_granted = true
95   elseif not dgn.persist.xom_gg_heard and you.god() ~= "Xom" then
96     crawl.god_speaks("Xom", '"WORSHIP ME, MORTAL," Xom booms, "AND I SHALL'
97                             .. ' GRANT YOU THE GREATEST GIFT OF ALL."')
98     dgn.persist.xom_gg_heard = true
99   elseif not dgn.persist.xom_gg_granted and you.god() == "Xom" then
100     local pos = dgn.find_marker_positions_by_prop("gift", "altar")
101     dgn.create_monster(pos[1].x, pos[1].y, "generate_awake att:good_neutral goblin")
102     crawl.god_speaks("Xom", 'A goblin pops into existence! It looks at you'
103                      .. ' with admiration.')
104     crawl.god_speaks("Xom", '"Friendship. The greatest gift is friendship!"')
105
106     dgn.persist.xom_gg_granted = true
107   end
108 end
109
110 function species_mock(e)
111   if you.race() == "Barachi" then
112     return "cane toad"
113   elseif you.race() == "Gnoll" then
114     return "jackal"
115   elseif you.race() == "Centaur" then
116     return "dart slug"
117   elseif you.race() == "Demigod" then
118     return "titan simulacrum"
119   elseif you.race() == "Demonspawn" then
120     return "hell beast"
121   elseif you.race():find("Draconian") then
122     return "wyvern"
123   elseif you.race() == "Deep Dwarf" then
124     return "deep dwarf zombie"
125   elseif you.race() == "Deep Elf" then
126     return "insubstantial wisp"
127   elseif you.race() == "Halfling" then
128     return "hobgoblin ; mundane hunting sling"
129   elseif you.race() == "Hill Orc" then
130     return "goblin ; mundane hand axe . mundane ring mail"
131   elseif you.race() == "Human" then
132     return "killer klown"
133   elseif you.race() == "Felid" then
134     return "sphinx zombie"
135   elseif you.race() == "Formicid" then
136     return "soldier ant"
137   elseif you.race() == "Gargoyle" then
138     return "earth elemental"
139   elseif you.race() == "Ghoul" then
140     return "death ooze"
141   elseif you.race() == "Kobold" then
142     return "boggart"
143   elseif you.race() == "Merfolk" then
144     return "bullfrog"
145   elseif you.race() == "Minotaur" then
146     return "yak"
147   elseif you.race() == "Mummy" then
148     return "human zombie"
149   elseif you.race() == "Naga" then
150     return "torpor snail"
151   elseif you.race() == "Octopode" then
152     return "tentacled monstrosity"
153   elseif you.race() == "Ogre" then
154     return "ettin skeleton"
155   elseif you.race() == "Spriggan" then
156     return "unseen horror"
157   elseif you.race() == "Tengu" then
158     return "caustic shrike"
159   elseif you.race() == "Troll" then
160     return "necrophage"
161   elseif you.race() == "Vampire" then
162     return "tyrant leech"
163   elseif you.race() == "Vine Stalker" then
164     return "thorn hunter"
165   else
166     return "spectral ugly thing"
167   end
168 end
169
170 function callback.do_species_mock(data, triggerable, triggerer, marker, ev)
171   if data.seen then return else data.seen = true end
172   local positions = dgn.find_marker_positions_by_prop("mock_location", 1)
173   for i, pos in ipairs(positions) do
174     local x, y = pos:xy()
175     dgn.create_monster(x, y, "generate_awake " .. species_mock())
176   end
177 end
178 }}
179
180 default-depth: D, Depths
181
182 # These must feature one of the temple_overflow_* TAGs (see header).
183 # Altars are sorted alphabetically by god, with the Shining One coming
184 # after Zin. At the end, there are altar vaults which can be used for
185 # more than just one god.
186
187 ### Ashenzari overflow altars #################################################
188
189 NAME:   ashenzari_altar_1
190 TAGS:   uniq_altar_ashenzari temple_overflow_1 temple_overflow_ashenzari
191 TAGS:   transparent decor
192 KFEAT:  _ = altar_ashenzari
193 : interest_check(_G)
194 MAP
195 b@b
196 @_@
197 b@b
198 ENDMAP
199
200 # A ruined temple
201 NAME:   evilmike_ruin_ashenzari
202 TAGS:   uniq_altar_ashenzari temple_overflow_1 temple_overflow_ashenzari
203 TAGS:   transparent decor
204 SUBST:  x = xxxxx-, - = ----.
205 TILE:   x = WALL_BRICK_VINES
206 FTILE:  -V_ = FLOOR_SANDSTONE
207 KFEAT:  _ = altar_ashenzari
208 SUBST:  - = .
209 : interest_check(_G)
210 MAP
211       .......
212       .xx+xx.
213      ..x---x..
214    ....x---x....
215    .xxxx---xxxx.
216   ..xV-xx+xx-Vx..
217 ....x---------x....
218 .xxxxx-------xxxxx.
219 .x---x-------x---x.
220 .x---+---_---+---x.
221 .x---x-------x---x.
222 .xxxxx-------xxxxx.
223 ....x---------x....
224   ..xV-xx+xx-Vx..
225    .xxxx---xxxx.
226    ....x---x....
227      ..x---x..
228       .xxxxx.
229       .......
230 ENDMAP
231
232 NAME:   ashenzari_conservatory_becter
233 TAGS:   temple_overflow_1 temple_overflow_ashenzari transparent
234 DEPTH:  D:2-9
235 KFEAT:  _ = altar_ashenzari
236 MAP
237    .....
238  .........
239  .........
240 ....mmm....
241 ....m_m....
242 ....c+c....
243 xxxxx.xxxxx
244      @
245 ENDMAP
246
247 NAME:  cheibrodos_ashenzari_chains
248 TAGS:  temple_overflow_1
249 TAGS:  temple_overflow_ashenzari uniq_altar_ashenzari transparent
250 DEPTH: D:3-9
251 KFEAT: _ = altar_ashenzari
252 KFEAT: m = iron_grate
253 MAP
254 .............
255 .mmm.....mmm.
256 .mcmmc_cmmcm.
257 .mmm.....mmm.
258 .............
259 ENDMAP
260
261 NAME: nicolae_ashenzari_panopticon
262 TAGS: uniq_altar_ashenzari temple_overflow_1 temple_overflow_ashenzari \
263       transparent decor
264 SHUFFLE: ABCDEF/abcdef
265 SUBST: ACEbdf = x, Ba = m, Dc = ., Fe = @
266 NSUBST: m = + / m
267 KFEAT: _ = altar_ashenzari
268 MAP
269 E....F..E..F...CE
270 CC...D..C..D..CC.
271 .CC..DD.C.DD.CC..
272 ..CC..D.C.D.CC...
273 ...CC.DDCDDCC....
274 FDD.CC.DCDCC..DDF
275 ..DDDCABABA.DDD..
276 ....DDB...BDD....
277 ECCCCCA._.ACCCCCE
278 ....DDB...BDD....
279 ..DDD.ABABACDDD..
280 FDD..CCDCD.CC.DDF
281 ....CCDDCDD.CC...
282 ...CC.D.C.D..CC..
283 ..CC.DD.C.DD..CC.
284 .CC..D..C..D...CC
285 EC...F..E..F....E
286 ENDMAP
287
288 ### Cheibriados overflow altars ###############################################
289
290 NAME:   cheibriados_altar_1
291 TAGS:   uniq_altar_cheibriados temple_overflow_1 temple_overflow_cheibriados
292 TAGS:   transparent decor
293 KFEAT:  _ = altar_cheibriados
294 : interest_check(_G)
295 MAP
296 ...
297 ._.
298 ...
299 ENDMAP
300
301 NAME:    cheibriados_altar_2
302 TAGS:    uniq_altar_cheibriados temple_overflow_1 temple_overflow_cheibriados
303 TAGS:    transparent decor
304 DEPTH:   D:2-
305 WEIGHT:  1
306 KPROP:   1 = no_tele_into
307 KFEAT:   _ = altar_cheibriados
308 MONS:    torpor snail
309 SUBST:   1 : 1:50 2:30 3:10 4:10
310 NSUBST:  4 = 1:1 / 1:2 / 1:3
311 : interest_check(_G)
312 MAP
313 .......
314 .mmm...
315 .m1m...
316 .mmmmm.
317 .._m1m.
318 .mmmmm.
319 .m1m...
320 .mmm...
321 .......
322 ENDMAP
323
324 NAME:  slow_altar_1
325 DEPTH: D:5-9
326 TAGS:  patrolling no_monster_gen no_item_gen transparent
327 TAGS:  uniq_slow_altar temple_overflow_1 temple_overflow_cheibriados
328 KMONS: _ = worm / mummy / iron imp
329 KFEAT: _ = altar_cheibriados
330 SUBST: x : xxxcccmnvb
331 MAP
332 xxx..@..xxx
333 xxx.....xxx
334 xxx.....xxx
335 ...........
336 ...........
337 @...._....@
338 ...........
339 ...........
340 xxx.....xxx
341 xxx.....xxx
342 xxx..@..xxx
343 ENDMAP
344
345 NAME:    slow_altar_2
346 DEPTH:   D:5-9
347 TAGS:    patrolling no_monster_gen no_item_gen
348 TAGS:    uniq_slow_altar temple_overflow_1 temple_overflow_cheibriados
349 KMONS:   _ = worm / mummy / iron imp
350 KFEAT:   _ = altar_cheibriados
351 SUBST:   x : xxxcccvb
352 MAP
353 x@@G@@x
354 x.....x
355 x.....x
356 xx+++xx
357 x.....x
358 x.....x
359 x.....x
360 x.....x
361 x.._..x
362 xxxxxxx
363 ENDMAP
364
365 NAME:   chei_slow_surprise
366 TAGS:   uniq_slow_altar overflow_altar_cheibriados transparent no_monster_gen
367 TAGS:   transparent
368 DEPTH:  D:4-9
369 WEIGHT: 5
370 KMONS:  a = worm / mummy / iron imp
371 NSUBST: ' = 1:a / *:.
372 KFEAT:  _ = altar_cheibriados
373 MAP
374  ........
375 ..xxxxxx..
376 .xx''''xx.
377 .x'xxxx'x.
378 .x'm.<x'x.
379 .xx+._x'x.
380 ..xxxxx'x.
381 .x.....xx.
382 .xxxxxxx..
383 .........
384 ENDMAP
385
386 NAME:   cheibrodos_worm_habitat
387 TAGS:   no_item_gen no_monster_gen temple_overflow_1 transparent
388 TAGS:   uniq_slow_altar temple_overflow_cheibriados uniq_altar_cheibriados
389 DEPTH:  D:5-9
390 WEIGHT: 5
391 KFEAT:  _ = altar_cheibriados
392 MONS:   worm
393 MAP
394 .............
395 .xxxxx.xxxxx.
396 .xTWWxxxWWTx.
397 .xWWWWWWWWWx.
398 .xWWWxWxWWWx.
399 .xxWxx.xxWxx.
400 ..xWm._.mWx..
401 .xxWxx1xxWxx.
402 .xWWWxmxWWWx.
403 .xWWWWWWWWWx.
404 .xTWWx+xWWTx.
405 .xxxxx.xxxxx.
406 ......@......
407 ENDMAP
408
409 NAME:   kennysheep_slug_shrine
410 TAGS:   uniq_altar_cheibriados temple_overflow_1 temple_overflow_cheibriados
411 TAGS:   no_pool_fixup no_monster_gen transparent
412 DEPTH:  D:2-6
413 MONS:   patrolling dart slug
414 KMASK:  1 = opaque
415 KFEAT:  _ = altar_cheibriados
416 MAP
417   .WWW
418  .WwwwWbb
419 @.Ww1WW_b
420  .WwwwWbb
421   .WWW
422 ENDMAP
423
424 ### Dithmenos overflow altars ################################################
425
426 NAME:   grunt_dithmenos_smoke
427 TAGS:   uniq_altar_dithmenos temple_overflow_1 temple_overflow_dithmenos
428 TAGS:   transparent decor
429 DEPTH:  D:2-
430 KFEAT:  C = altar_dithmenos
431 MARKER: C = lua:fog_machine { cloud_type = "black smoke", \
432                               pow_min = 10, pow_max = 20, \
433                               delay = 100, size = 1, walk_dist = 1 }
434 : interest_check(_G)
435 MAP
436 ...
437 .C.
438 ...
439 ENDMAP
440
441 # Reflect upon the darkness, mortal.
442 NAME:   grunt_dithmenos_smoke_and_mirrors
443 TAGS:   uniq_altar_dithmenos temple_overflow_1 temple_overflow_dithmenos
444 TAGS:   transparent decor
445 DEPTH:  D:2-
446 KFEAT:  C = altar_dithmenos
447 KFEAT:  O = .
448 MARKER: O = lua:fog_machine { cloud_type = "black smoke", \
449                               pow_min = 25, pow_max = 25, \
450                               delay = 30, size = 1, walk_dist = 0 }
451 : interest_check(_G)
452 MAP
453   b@b
454  b.O.b
455 b.b.b.b
456 @O.C.O@
457 b.b.b.b
458  b.O.b
459   b@b
460 ENDMAP
461
462 NAME:  grunt_dithmenos_shadows
463 TAGS:  uniq_altar_dithmenos temple_overflow_1 temple_overflow_dithmenos decor
464 DEPTH: D:4-
465 KFEAT: C = altar_dithmenos
466 {{
467   if you.absdepth() >= 14 then
468      mons("shadow")
469   else
470      local imp_weight = 9 - you.absdepth()
471      if imp_weight > 0 then
472          local phantom_weight = 9 - imp_weight
473          mons("phantom w:" .. phantom_weight ..
474               " / shadow imp w:" .. imp_weight)
475      else
476          mons("shadow imp")
477      end
478   end
479 }}
480 : interest_check(_G)
481 MAP
482 ccccc
483 c.C.c
484 c.1.c
485 c...c
486 cc+cc
487 ENDMAP
488
489 NAME: nicolae_dithmenos_the_darkroom
490 TAGS: temple_overflow_dithmenos temple_overflow_1 uniq_altar_dithmenos
491 TAGS: decor transparent
492 DEPTH: D:4-
493 KFEAT: _ = altar_dithmenos
494 MARKER: ' = lua:fog_machine { cloud_type = "black smoke", pow_min = 30, \
495    pow_max = 50, delay_min = 50, delay_max = 90, size = 1, walk_dist = 1, \
496    spread_rate = 10 }
497 : interest_check(_G)
498 MAP
499 xxxx@@@xxxx
500 xxx.....xxx
501 xx'.....'xx
502 x.........x
503 @.........@
504 @...._....@
505 @.........@
506 x.........x
507 xx'.....'xx
508 xxx.....xxx
509 xxxx@@@xxxx
510 ENDMAP
511
512 NAME: nicolae_dithmenos_shadow_blocks
513 TAGS: temple_overflow_dithmenos temple_overflow_1 uniq_altar_dithmenos
514 TAGS: decor transparent
515 DEPTH: D:2-
516 COLOUR: s' = magenta, c = white
517 TILE: c = dngn_stone_wall_white
518 TILE: s = dngn_stone_dark
519 FTILE: 's_ = floor_pebble_darkgray
520 KFEAT: cs = stone_wall
521 KFEAT: _ = altar_dithmenos
522 : interest_check(_G)
523 MAP
524       .....
525       ..c..
526   .....ccc.....
527   .cc..scs..cc.
528   .ccs''s''scc.
529   ..ss'''''ss..
530 ....'''''''''....
531 ..cs'''''''''sc..
532 .cccs'''_'''sccc.
533 ..cs'''''''''sc..
534 ....'''''''''....
535   ..ss'''''ss..
536   .ccs''s''scc.
537   .cc..scs..cc.
538   .....ccc.....
539       ..c..
540       .....
541 ENDMAP
542
543 NAME: nicolae_dithmenos_through_a_glass_darkly
544 TAGS: temple_overflow_dithmenos uniq_altar_dithmenos temple_overflow_1
545 TAGS: decor transparent
546 DEPTH: D:2-
547 COLOUR: x = magenta, m = lightmagenta
548 TILE: m = dngn_transparent_wall_darkgray
549 TILE: x = wall_brick_darkgray
550 KFEAT: _ = altar_dithmenos
551 : interest_check(_G)
552 MAP
553   ..xxx
554  .....xx
555 ...mm..xx
556 ..mm....x
557 @.m._...x
558 ..mm....x
559 ...mm..xx
560  .....xx
561   ..xxx
562 ENDMAP
563
564 ### Elyvilon overflow altars ##################################################
565
566 NAME:   elyvilon_altar_1
567 TAGS:   uniq_altar_elyvilon temple_overflow_1 temple_overflow_elyvilon
568 TAGS:   transparent decor
569 DEPTH:  D:2-
570 KFEAT:  C = altar_elyvilon
571 SUBST:  X : T G t 1 2 3
572 MONS:   plant, bush, fungus
573 KMASK:  T = no_monster_gen
574 : interest_check(_G)
575 MAP
576       xx@xx
577       x...x
578       x.X.x
579       x...x
580       xx.xx
581        x.x
582 xxxxx xx.xx xxxxx
583 x...xxx...xxx...x
584 @.X.....C.....X.@
585 x...xxx...xxx...x
586 xxxxx xx.xx xxxxx
587        x.x
588       xx.xx
589       x...x
590       x.X.x
591       x...x
592       xx@xx
593 ENDMAP
594
595 NAME:   elyvilon_altar_3
596 TAGS:   uniq_altar_elyvilon temple_overflow_1 temple_overflow_elyvilon
597 TAGS:   no_pool_fixup decor transparent
598 DEPTH:  D:2-
599 KFEAT:  C = altar_elyvilon
600 KMASK:  wW = no_monster_gen
601 : interest_check(_G)
602 MAP
603        xxxxxxxxxxxxxxx
604       xxtttttttttttttxx
605       xtttttttttttttttx
606       tttttttt.tttttttt
607   .....ttttt.....ttttt.....
608  .......ttt.......ttt.......
609 ...wWw...t...wWw...t...wWw...
610 ..wwWww.....wwWww.....wwWww..
611 @.WWtWW.....WWCWW.....WWtWW.@
612 ..wwWww.....wwWww.....wwWww..
613 ...wWw...t...wWw...t...wWw...
614  .......ttt.......ttt.......
615   .....ttttt.....ttttt.....
616       tttttttt.tttttttt
617       xtttttttttttttttx
618       xxtttttttttttttxx
619        xxxxxxxxxxxxxxx
620 ENDMAP
621
622 NAME:   elyvilon_altar_4
623 TAGS:   uniq_altar_elyvilon temple_overflow_1 temple_overflow_elyvilon
624 TAGS:   no_monster_gen transparent decor
625 DEPTH:  D:2-
626 KFEAT:  C = altar_elyvilon
627 MONS:   patrolling quokka att:good_neutral
628 : interest_check(_G)
629 MAP
630 xxx.@.xxx
631 xWW...WWx
632 xW..t..Wx
633 ....1....
634 @.t.C.t.@
635 .........
636 xW..t..Wx
637 xWW...WWx
638 xxx.@.xxx
639 ENDMAP
640
641 NAME:   elyvilon_altar_5
642 TAGS:   uniq_altar_elyvilon temple_overflow_1 temple_overflow_elyvilon decor transparent
643 DEPTH:  D:2-
644 KFEAT:  C = altar_elyvilon
645 KMASK:  T = no_monster_gen
646 : interest_check(_G)
647 MAP
648 .............
649 .c.c.c.c.c.c.
650 .............
651 ...T.....T...
652 @.....C.....@
653 ...T.....T...
654 .............
655 .c.c.c.c.c.c.
656 .............
657 ENDMAP
658
659 ### Fedhas overflow altars ####################################################
660
661 NAME:   fedhas_altar_1
662 TAGS:   uniq_altar_fedhas temple_overflow_1 temple_overflow_fedhas
663 TAGS:   transparent decor
664 DEPTH:  D:2-
665 KFEAT:  C = altar_fedhas
666 MONS:   plant
667 : interest_check(_G)
668 MAP
669 .....
670 .1.1.
671 ..C..
672 .1.1.
673 .....
674 ENDMAP
675
676 NAME:   fedhas_altar_2
677 TAGS:   uniq_altar_fedhas temple_overflow_1 temple_overflow_fedhas
678 TAGS:   transparent decor
679 DEPTH:  D:2-
680 KFEAT:  C = altar_fedhas
681 NSUBST: w = 2:W / *:w
682 SUBST:  . = ..wW
683 SUBST:  w = wwwP
684 : interest_check(_G)
685 MAP
686 .....
687 .www.
688 .wCw.
689 .www.
690 .....
691 ENDMAP
692
693 NAME:   fedhas_altar_3
694 TAGS:   uniq_altar_fedhas temple_overflow_1 temple_overflow_fedhas
695 TAGS:   transparent decor
696 DEPTH:  D:2-
697 KFEAT:  C = altar_fedhas
698 NSUBST: b = 1:. / *:1
699 MONS:   plant w:5 / fungus / nothing w:3
700 : interest_check(_G)
701 MAP
702 @111@
703 1b1b1
704 11C11
705 1b1b1
706 @111@
707 ENDMAP
708
709 NAME:   fedhas_altar_4
710 TAGS:   uniq_altar_fedhas temple_overflow_1 temple_overflow_fedhas
711 TAGS:   decor
712 DEPTH:  D:2-
713 KFEAT:  C = altar_fedhas
714 FTILE:  . = floor_moss
715 FTILE:  t = floor_moss
716 : interest_check(_G)
717 MAP
718 xxxxxxxxxxxxxxx
719 xxxtttttttxxxxx
720 xxtttttttttxxxx
721 xtttt.ttttttxxx
722 xtttt.C.ttttttt
723 xxtttt...ttttt.
724 xxtttttt......@
725 xxxxttttttttt..
726 xxxxxxttttttttx
727 xxxxxxxtttttttx
728 xxxxxxxxxxxxxxx
729 ENDMAP
730
731 # The oklob plant may be abusable (if so, remove it).
732 NAME:    tgw_fedhas
733 TAGS:    no_item_gen no_monster_gen
734 TAGS:    temple_overflow_1 temple_overflow_fedhas uniq_altar_fedhas
735 DEPTH:   Lair, D:2-
736 KFEAT:   _ = altar_fedhas
737 KPROP:   xzd3P = no_tele_into
738 MONS:    plant, fungus, oklob plant, bush, toadstool
739 KFEAT:   d = floor
740 SUBST:   x = TTPPPPP.
741 # Only make "oklob behind bushes" situation possible a bit deeper.
742 : if you.absdepth() > 5 then
743 SHUFFLE: PQR
744 SUBST:   Q = 114, R = 11124
745 : end
746 SUBST:   P = 112
747 SUBST:   z = .
748 SHUFFLE: ...", TU
749 SUBST:   T = xt, U = xx
750 SUBST:   " = .....5
751 COLOUR:  . = green / none
752 COLOUR:  ' = green
753
754 MAP
755 ccccccccccccccccccccccc
756 cxxxxxxxxxxxxxxxxxxxxxc
757 cxxxxxxxxxxxxxxPxxd3xxc
758 cxxxxxxxxxxxxxxPddddxxc
759 cxxxxxxxxxxxxxxPPPxzdxc
760 cxxxxxxx.......xxPPxxxc
761 cxxxxxx..ww.ww..xxPPxxc
762 cxxxxx..www.www..xxxPxc
763 cxxxx..wwww.wwww..xxxxc
764 cxxxx.wwwww.wwwww.xxxxc
765 cxxxx.wwww'''wwww.xxxxc
766 cxxxx.wwww'_'wwww.xxxxc
767 cxxxx.wwww'''wwww.xxxxc
768 cxxxx.wwwwwwwwwww.xxxxc
769 cxxxx..wwwwwwwww..xxxxc
770 cxxxxx..wwwwwww..xxxxxc
771 cxxxxxx..wwwww..xxxxxxc
772 cxxxxxxx.......xxxxxxxc
773 cxxxxxxxxxc.cxxxxxxxxxc
774 cxxxxxxxxxc.cxxxxxxxxxc
775 ccccccccccc@ccccccccccc
776 ENDMAP
777
778 NAME:  fedhas_ov_isle_minmay
779 TAGS:  temple_overflow_1 temple_overflow_fedhas uniq_altar_fedhas no_monster_gen
780 TAGS:  transparent
781 DEPTH: D:2-9
782 MONS:  plant / bush w:5
783 SUBST: 1 = 111t'''
784 KFEAT: _ = altar_fedhas
785 KMASK: _1'<> = opaque
786 MAP
787      .....
788    ...www...
789   ..wwwwwww..
790  ..wwwwwwwww..
791  .wwwwwwwwwww.
792 ..wwww1<1wwww..
793 .wwww11111wwww.
794 .wwww11_11wwww.
795 .wwww11111wwww.
796 ..wwww1>1wwww..
797  .wwwwwwwwwww.
798  ..wwwwwwwww..
799   ..wwwwwww..
800    ...www...
801      .....
802 ENDMAP
803
804 NAME:   fedhas_altar_fruit_tree
805 TAGS:   uniq_altar_fedhas temple_overflow_1 temple_overflow_fedhas
806 TAGS:   no_item_gen no_rotate no_vmirror decor
807 DEPTH:  D:2-
808 NSUBST: g = 4:f/*:.
809 NSUBST: f = 4:A/*:.
810 NSUBST: w = 2:4 / *:w
811 KFEAT:  C = altar_fedhas
812 KFEAT:  A = .
813 FTILE:  .tfCA = floor_moss
814 FTILE:  d = floor_hall
815 COLOUR: fd = brown
816 COLOUR: AC. = green
817 : interest_check(_G)
818 MAP
819 xxxxxxxxxxxxxxxxx
820 xtttttttttttttttx
821 xtttttttttttttttx
822 xttttttgfgttttttx
823 xtttttgf.fgtttttx
824 xttttgf.f.fgttttx
825 xtttgf..C..fgtttx
826 xtttgf.f.f.fgtttx
827 xttgfffffffffgttx
828 xttgt.......tgttx
829 xttttttdddttttttx
830 xttttttdddttttttx
831 xtttttdd@ddtttttx
832 ENDMAP
833
834 NAME:  fedhas_bush_and_centaur_altar
835 TAGS:  temple_overflow_1 temple_overflow_fedhas uniq_altar_fedhas transparent
836 DEPTH: D:4-
837 KFEAT: _ = altar_fedhas
838 MONS:  centaur, bush
839 : interest_check(_G)
840 MAP
841     x
842  .......
843  .2222..
844  .21222.
845 x.22_22.x
846  ...22..
847  .222...
848     x
849 ENDMAP
850
851 NAME:   fedhas_altar_decomposition
852 TAGS:   uniq_altar_fedhas temple_overflow_1 temple_overflow_fedhas
853 TAGS:   no_item_gen no_monster_gen no_trap_gen
854 DEPTH:  D:6-13
855 MONS:   bush, plant, necrophage, zombie
856 KFEAT:  _ = altar_fedhas
857 FTILE:  '!12@ = floor_moss
858 COLOUR: '!@ = green
859 NSUBST: 3 = 3:3 / 3 = 3 4:25 / 3 = 4 .:25 / *:.
860 KPROP:  .3 = no_tele_into
861 MAP
862  xxxxxxxxx
863 xx33...33xx
864 x33.222.33x
865 x332111233x
866 x3321_1233x
867 x3321'1233x
868 x3.2x'x2.3x
869 x3..x'x..3x
870 xxxxx'xxxxx
871    xx'xx
872    x2@2x
873 ENDMAP
874
875 ### Gozag overflow altars #####################################################
876
877 NAME:   grunt_gozag_statues
878 DEPTH:  D:2-
879 TAGS:   transparent no_item_gen no_monster_gen no_trap_gen temple_overflow_1
880 TAGS:   temple_overflow_gozag uniq_altar_gozag
881 KFEAT:  _ = altar_gozag
882 TILE:   G = dngn_golden_statue
883 FTILE:  _-G = floor_limestone
884 RTILE:  x = wall_sandstone
885 COLOUR: xG = yellow
886 : set_feature_name("granite_statue", "golden statue")
887 : interest_check(_G)
888 MAP
889      @
890   xxx-xxx
891  xx-----xx
892  x-G---G-x
893  x-------x
894 @----_----@
895  x-------x
896  x-G---G-x
897  xx-----xx
898   xxx-xxx
899      @
900 ENDMAP
901
902 NAME:   grunt_gozag_breadcrumbs
903 DEPTH:  D:2-
904 TAGS:   transparent no_item_gen no_monster_gen no_trap_gen temple_overflow_1
905 TAGS:   temple_overflow_gozag uniq_altar_gozag
906 KFEAT:  _ = altar_gozag
907 ITEM:   gold q:1
908 KITEM:  e = gold q:1
909 TILE:   G = dngn_golden_statue
910 FTILE:  _-Ge = floor_limestone
911 RTILE:  x = wall_sandstone
912 COLOUR: xG = yellow
913 : set_feature_name("granite_statue", "golden statue")
914 : interest_check(_G)
915 MAP
916         xxxxx
917 .@......x-eGx
918 @d.d.d.d-e-_x
919 .@......x-eGx
920         xxxxx
921 ENDMAP
922
923 NAME:  nicolae_gozag_cash_rules_everything_around_me
924 TAGS:  temple_overflow_gozag temple_overflow_1 uniq_altar_gozag \
925        no_hmirror no_vmirror no_rotate no_item_gen transparent decor
926 DEPTH: D:2-
927 KFEAT: _ = altar_gozag
928 : interest_check(_G)
929 MAP
930 bbb@bbb
931 b....$b
932 b.b.bbb
933 b.._..b
934 bbb.b.b
935 b$....b
936 bbb@bbb
937 ENDMAP
938
939 # No, you probably can't afford any of it.
940 # You should have thought of that before being poor.
941 NAME:  nicolae_gozag_zags_fifth_avenue
942 TAGS:  temple_overflow_gozag temple_overflow_1 uniq_altar_gozag
943 TAGS:  no_pool_fixup no_item_gen no_monster_gen decor transparent
944 DEPTH: D:2-
945 WEIGHT: 5
946 FTILE: '_TS = floor_limestone
947 KFEAT: _ = altar_gozag
948 KFEAT: S = general shop name:Gozag type:Platinum suffix:Reserve count:4 \
949         greed:100 ; any weapon randart | any armour randart | any jewellery randart
950 : interest_check(_G)
951 MAP
952 wwwwwww....
953 w'''''wwww.
954 w'T'T''''w.
955 w''S'''_''@
956 w'T'T''''w.
957 w'''''wwww.
958 wwwwwww....
959 ENDMAP
960
961 NAME:  nicolae_gozag_seed_capital
962 TAGS:  temple_overflow_gozag temple_overflow_1 uniq_altar_gozag decor
963 TAGS:  transparent no_item_gen
964 DEPTH: D:2-
965 ITEM:  gold q:1 / gold q:2
966 KFEAT: _ = altar_gozag
967 : interest_check(_G)
968 MAP
969 ddd
970 d_d
971 ddd
972 ENDMAP
973
974 ### Hepliaklqana overflow altars #############################################
975
976 NAME: worldfamousw_hep_ancestral_shrine
977 TAGS: uniq_overflow_hepliaklqana temple_overflow_hepliaklqana
978 TAGS: no_monster_gen no_item_gen no_pool_fixup
979 KFEAT: _ = altar_hepliaklqana
980 COLOUR: w = green
981 TILE: G = dngn_gravestone
982 TILE: t = DNGN_TREE_DEAD
983 {{
984 set_feature_name("granite_statue", "a gravestone")
985 set_feature_name("tree", "dead tree")
986 dgn.persist.hep_ancestral_shrine_reborn = false
987
988 local los_marker = TriggerableFunction:new {
989   func="callback.hep_ancestral_shrine_los",
990   repeated=true
991 }
992 los_marker:add_triggerer(DgnTriggerer:new {
993   type="player_los"})
994
995 lua_marker('_', los_marker)
996 lua_marker("t", portal_desc { dead_tree=1 })
997 lua_marker("w", portal_desc { green_water=1 })
998 }}
999 MAP
1000  xxxxx
1001 xxwwwxx
1002 xwwwwwx
1003 xwwwwwx
1004 xwtGtwx
1005 xt...tx
1006 x.._..x
1007 xt...tx
1008 xxt.txx
1009  xx+xx
1010    @
1011 ENDMAP
1012
1013 ### Kikubaaqudgha overflow altars #############################################
1014
1015 NAME:   lemuel_zombie_altar_kikubaaqudgha
1016 DEPTH:  D:2-, Crypt
1017 TAGS:   no_pool_fixup uniq_zombie_altar no_monster_gen temple_overflow_1
1018 TAGS:   temple_overflow_kikubaaqudgha
1019 KFEAT:  _ = altar_kikubaaqudgha
1020 MONS:   rat zombie / bat zombie / nothing w:90
1021 : interest_check(_G)
1022 MAP
1023 xxxxxxxxxxxxxxxx
1024 xxxxwwwwwwwwxxxx
1025 xxxx11111111xxxx
1026 @............._x
1027 xxxx11111111xxxx
1028 xxxxwwwwwwwwxxxx
1029 xxxxxxxxxxxxxxxx
1030 ENDMAP
1031
1032 NAME:   lemuel_mausoleum_altar_kikubaaqudgha
1033 TAGS:   uniq_altar_kikubaaqudgha temple_overflow_1
1034 TAGS:   temple_overflow_kikubaaqudgha uniq_mausoleum_altar
1035 DEPTH:  D:7-, Crypt
1036 MONS:   w:50 human zombie/orc zombie/elf zombie/w:5 ogre zombie/w:5 troll zombie
1037 MONS:   w:50 human skeleton/orc skeleton/elf skeleton/w:5 ogre skeleton/\
1038         w:5 troll skeleton
1039 MONS:   mummy, wight, wraith, necrophage
1040 NSUBST: ? = 1:_ / *:1
1041 SUBST:  1 = 1:25 2 3 4:8 5:7 6:5
1042 KFEAT:  _ = altar_kikubaaqudgha
1043 KMONS:  _ = human zombie
1044 : if not you.in_branch("D") or you.absdepth() > 14 then
1045 TAGS:   extra
1046 : end
1047 MAP
1048 ccccccccccccccc
1049 c?c?c?c?c?c?ccG
1050 c+c+c+c+c+c+ccc
1051 c............+@
1052 c+c+c+c+c+c+ccc
1053 c?c?c?c?c?c?ccG
1054 ccccccccccccccc
1055 ENDMAP
1056
1057 NAME:   kiku_gazebo_garden_becter
1058 TAGS:   temple_overflow_1 temple_overflow_kikubaaqudgha transparent
1059 DEPTH:  D:2-9
1060 KMONS:  f = withered plant
1061 KFEAT:  _ = altar_kikubaaqudgha
1062 SUBST:  ` = f....
1063 COLOUR: c = magenta
1064 COLOUR: i' = brown
1065 COLOUR: " = yellow
1066 TILE:   c = dngn_stone_wall_magenta
1067 FTILE:  '"_ = floor_pebble_yellow
1068 MAP
1069 ..````
1070 .ccc`````
1071 .c'c"`````
1072 .c''""````
1073 .c'''"c````
1074 .c'_''cc```
1075 .c'''"c````
1076 .c''""````
1077 .c'c"`````
1078 .ccc`````
1079 ..````
1080 ENDMAP
1081
1082 NAME:   kiku_gazebo_pond_becter
1083 TAGS:   temple_overflow_1 temple_overflow_kikubaaqudgha transparent
1084 DEPTH:  D:2-9
1085 KFEAT:  _ = altar_kikubaaqudgha
1086 KMASK:  Ww = no_monster_gen
1087 SUBST:  M = W..
1088 COLOUR: c = magenta
1089 COLOUR: i' = brown
1090 COLOUR: " = yellow
1091 COLOUR: w = green
1092 COLOUR: W = lightgreen
1093 TILE:   c = dngn_stone_wall_magenta
1094 FTILE:  '"_ = floor_pebble_yellow
1095 MAP
1096 ..........
1097 .cccccccc.
1098 .c''''cc...
1099 .c'_'""..V.
1100 .c'W""MMM..
1101 .c'"WWWwwM.
1102 .cc".MWwwM.
1103 .cc..MwwwM.
1104 .c...MwwwM.
1105 ...V..MMM..
1106 .........
1107 ENDMAP
1108
1109 NAME:   kennysheep_vampire_church
1110 TAGS:   no_monster_gen temple_overflow_1 temple_overflow_kikubaaqudgha
1111 DEPTH:  D:2-9
1112 MONS:   vampire bat / nothing w:7, bat skeleton / bat zombie
1113 KFEAT:  A = altar_kikubaaqudgha
1114 NSUBST: . = 4:2 / 3 = 2. / *:.
1115 {{
1116 local trig_marker = TriggerableFunction:new {
1117   func="callback.vampire_church_blood",
1118   repeated = false
1119 }
1120 trig_marker:add_triggerer(DgnTriggerer:new { type = "player_move" })
1121 lua_marker("A", trig_marker)
1122 lua_marker("V", portal_desc { slave_name = "vampire_church_blood" })
1123 }}
1124 MAP
1125   xxxxxxxxx
1126   xx.V1V.xx
1127 xxx..1A1..xxx
1128 xx.x.VdV.x.xx
1129 x.V.x...x.V.x
1130 xx.x.x.x.x.xx
1131 x.x.V.x.V.x.x
1132 xx.x.x.x.x.xx
1133 x.V.x.V.x.V.x
1134 xx.x.x.x.x.xx
1135 xxx.V.x.V.xxx
1136 xx.x.x.x.x.xx
1137 xx..x.V.x..xx
1138 xx.x.x.x.x.xx
1139 xxx.V.x.V.xxx
1140 xxxx.....xxxx
1141 xxxxx+++xxxxx
1142 ENDMAP
1143
1144 ### Makhleb overflow altars ###################################################
1145
1146 NAME:    demons_altar
1147 DEPTH:   D:3-11, Orc, !Orc:$
1148 TAGS:    no_monster_gen patrolling temple_overflow_1 temple_overflow_makhleb transparent
1149 TAGS:    layout_rooms layout_city layout_open
1150 KFEAT:   _ = altar_makhleb
1151 # Either one type 3 or 4 demon (rust devil or smoke demon) or
1152 # three slow type 5 demons (iron imp).
1153 # The higher demons can only come up in D:9-11.
1154 : if you.absdepth() > 9 then
1155 SHUFFLE: 123
1156 NSUBST:  1 = 1:1 / *:.
1157 NSUBST:  2 = 1:2 / *:.
1158 : end
1159 MONS:    rust devil, smoke demon, iron imp
1160 MAP
1161 xxxxxxxxxxxxxxx
1162 x.............x
1163 x.ll.......ll.x
1164 x.ll..3_3..ll.x
1165 x.ll...3...ll.x
1166 x..ll.....ll..x
1167 x...lll.lll...x
1168 x....llGll....x
1169 x......l......x
1170 x.............x
1171 x.............x
1172 x.............x
1173 x.............x
1174 ENDMAP
1175
1176 NAME:  bloody_makhleb
1177 TAGS:  uniq_altar_makhleb temple_overflow_1 temple_overflow_makhleb
1178 TAGS:  transparent decor
1179 DEPTH: D:2-12, Orc, Vaults
1180 KPROP: . = bloody / nothing
1181 KFEAT: _ = altar_makhleb
1182 KITEM: _ = robe, whip
1183 : interest_check(_G)
1184 MAP
1185 ...
1186 ._.
1187 ...
1188 ENDMAP
1189
1190 NAME:  makhleb_altar_promises_db
1191 TAGS:  uniq_altar_makhleb temple_overflow_1 temple_overflow_makhleb
1192 DEPTH: D:2-
1193 KFEAT: _ = altar_makhleb
1194 KPROP: 12 = no_tele_into
1195 KMASK: 12 = no_trap_gen
1196 MONS:  executioner / balrug / green death / cacodemon / blizzard demon
1197 MONS:  orange demon / ynoxinul / neqoxec / hellwing / smoke demon
1198 : interest_check(_G)
1199 MAP
1200   ccc
1201   c1c
1202 cccnccc
1203 c2n_n2c
1204 ccc.ccc
1205   c.c
1206   c@c
1207 ENDMAP
1208
1209 NAME:   makhleb_blood_cavern_becter
1210 TAGS:   uniq_altar_makhleb temple_overflow_1 temple_overflow_makhleb
1211 DEPTH:  D:2-9
1212 : if you.absdepth() < 6 then
1213 : dgn.delayed_decay(_G, '1', 'human corpse')
1214 KMONS:  2 = hound
1215 : else
1216 KMONS:  1 = necrophage
1217 KMONS:  2 = hound skeleton
1218 : end
1219 KFEAT:  _ = altar_makhleb
1220 KPROP:  y' = bloody
1221 TILE:   c = wall_hall
1222 SUBST:  ' = .
1223 SUBST:  y = x
1224 : interest_check(_G)
1225 MAP
1226   @@@
1227  x..'.xxx
1228  xx...'yxx
1229  xxxx..'yxx
1230  xxxxxx.'yx
1231  xxxxxxy'.x
1232 xxxx.'y'.xx
1233 xcc.12'.xx
1234 xcA_'.xxx
1235 xcc..xxx
1236 xxxxxx
1237 ENDMAP
1238
1239 NAME:   makhleb_heckhound_becter
1240 TAGS:   uniq_altar_makhleb temple_overflow_1 temple_overflow_makhleb
1241 TAGS:   no_monster_gen
1242 DEPTH:  D:2-9
1243 KFEAT:  _ = altar_makhleb
1244 KMONS:  _ = patrolling hound
1245 TILE:   c = wall_hall
1246 SUBST:  y = xx.
1247 : interest_check(_G)
1248 MAP
1249  xxxxx
1250 xxcccxx
1251 xycAcyx
1252 x.._..x
1253 xy...yx
1254  y...y
1255   @@@
1256 ENDMAP
1257
1258 NAME:   makhleb_grotto_becter
1259 TAGS:   no_monster_gen temple_overflow_1 temple_overflow_makhleb
1260 DEPTH:  D:2-9
1261 MONS:   iron imp w:1 / shadow imp w:1 / crimson imp
1262 KFEAT:  _ = altar_makhleb
1263 TILE:   c = wall_hall
1264 FTILE:  A_'1 = floor_grey_dirt
1265 SUBST:  ' = .
1266 : interest_check(_G)
1267 MAP
1268  xxxxx
1269 xxcccxx
1270 xwcAcwx
1271 xww_wwx
1272 xww1wwx
1273 x.w'w.x
1274 xx...xx
1275  xx+xx
1276    @
1277 ENDMAP
1278
1279 ### Nemelex overflow altars ###################################################
1280
1281 NAME:  nemelex_xobeh_ov_fountains_minmay
1282 TAGS:  temple_overflow_1 temple_overflow_nemelex_xobeh uniq_altar_nemelex_xobeh
1283 TAGS:  transparent decor
1284 KFEAT: _ = altar_nemelex_xobeh
1285 : interest_check(_G)
1286 MAP
1287 U@U
1288 @_@
1289 U@U
1290 ENDMAP
1291
1292 ###################################################################
1293 # Nemelex altar (Shiori)
1294 # Perhaps could have different parameters for the two types of clouds,
1295 # and different patterns.
1296 NAME:   nemelex_altar_shiori
1297 DEPTH:  D, Depths, Elf, Vaults
1298 TAGS:   temple_overflow_1 temple_overflow_nemelex_xobeh uniq_altar_nemelex_xobeh
1299 TAGS:   no_pool_fixup no_monster_gen no_item_gen
1300 TAGS:   generate_awake patrolling no_rotate
1301 TAGS:   layout_rooms layout_city layout_open
1302 KPROP:  abcdefghBR' = no_tele_into
1303 KFEAT:  _ = altar_nemelex_xobeh
1304 SUBST:  b:aa. , a:n. , d:c. , c:nn. , f:ee. , e:nn. , h:g. , g:n.
1305 SUBST:  G:GTUVblw> , C=c
1306 SUBST:  ':.
1307 MARKER: R = lua:fog_machine { cloud_type="flame", walk_dist=1, size=9, \
1308             pow_max=20, delay=10, buildup_amnt=14, buildup_time=7, \
1309             spread_rate=3, start_clouds=1 }
1310 MARKER: B = lua:fog_machine { cloud_type="foul pestilence", walk_dist=1, \
1311             size=9,  pow_max=20, delay=10, buildup_amnt=14, buildup_time=7, \
1312             spread_rate=3, start_clouds=1 }
1313 KFEAT:  RB = floor
1314 MAP
1315 CCCCCCCC+++CCCCCCCC
1316 Cnnnnnnn...nnnnnnnC
1317 Cnab'ban...ncd'dcnC
1318 Cnb'''bn.G.nd'''dnC
1319 Cn''B''n...n''R''nC
1320 Cnb'''bn...nd'''dnC
1321 Cnab'ban...ncd'dcnC
1322 Cnnnnnnn...nnnnnnnC
1323 CG......._.......GC
1324 Cnnnnnnn...nnnnnnnC
1325 Cnef'fen...ngh'hgnC
1326 Cnf'''fn...nh'''hnC
1327 Cn''R''n...n''B''nC
1328 Cnf'''fn.G.nh'''hnC
1329 Cnef'fen...ngh'hgnC
1330 Cnnnnnnn...nnnnnnnC
1331 CCCCCCCC+++CCCCCCCC
1332 ENDMAP
1333
1334 NAME:    nemelex_dance_club_becter
1335 TAGS:    overflow_altar_nemelex_xobeh transparent
1336 TAGS:    no_rotate no_vmirror no_monster_gen no_item_gen
1337 DEPTH:   D:2-9
1338 : if you.depth() <= 4 then
1339 MONS:    orc ; club
1340 : else
1341 MONS:    ogre ; giant club
1342 : end
1343 MONS:    ooze
1344 KFEAT:   _ = altar_nemelex_xobeh
1345 SHUFFLE:  12_
1346 COLOUR:  12' = random
1347 TILE:    x = wall_pebble_darkgray
1348 MAP
1349     .....
1350    ..xxx..
1351    .xx'xx.
1352  ...x'1'x...
1353 ..xxxx'xxxx..
1354 .xx''x+x''xx.
1355 .x'2'+.+'_'x.
1356 .xx'xx.xx'xx.
1357 ..xxx.x.xxx..
1358  .....x.....
1359     .xxx.
1360     .....
1361 ENDMAP
1362
1363 NAME:   nemelex_diamond_rough_becter
1364 TAGS:   overflow_altar_nemelex_xobeh transparent
1365 KFEAT:  _ = altar_nemelex_xobeh
1366 COLOUR: x = lightred
1367 COLOUR: 'b = silver
1368 TILE:   x = wall_pebble_red
1369 TILE:   b = dngn_crystal_white
1370 : interest_check(_G)
1371 : set_feature_name("crystal_wall", "wall of white crystal")
1372 MAP
1373     ...
1374    ..x..
1375   ..xxx..
1376  ..xxbxx..
1377 ..xxb'bxx..
1378 .xxb'_'bxx.
1379 ..xxb'bxx..
1380  ..x+b+x..
1381   ..xxx..
1382    ..x..
1383     ...
1384 ENDMAP
1385
1386 NAME:   nemelex_lonely_heart_becter
1387 TAGS:   overflow_altar_nemelex_xobeh transparent
1388 TAGS:   no_rotate no_vmirror no_monster_gen no_item_gen
1389 DEPTH:  D:2-9
1390 MONS:   nothing w:4 / jessica w:1
1391 KFEAT:  _ = altar_nemelex_xobeh
1392 COLOUR: x = lightred
1393 TILE:   x = wall_pebble_red
1394 MAP
1395   .... ....
1396  ..xx...xx..
1397 ..xxxx.xxxx..
1398 .xx..x+x..xx.
1399 .xx.......xx.
1400 ..xx.._..xx..
1401  ..xx.1.xx..
1402   ..xx.xx..
1403    ..xxx..
1404     .....
1405 ENDMAP
1406
1407 NAME:   nemelex_spade_bored_becter
1408 TAGS:   overflow_altar_nemelex_xobeh transparent
1409 TAGS:   no_rotate no_vmirror no_monster_gen no_item_gen
1410 DEPTH:  D:2-9
1411 KFEAT:  _ = altar_nemelex_xobeh
1412 KFEAT:  o = shaft trap
1413 NSUBST: ' = 6:o / *:.
1414 TILE:   x = wall_pebble_darkgray
1415 MAP
1416      .....
1417     ..xxx..
1418    ..xx'xx..
1419   ..xx'''xx..
1420  ..xx''_''xx..
1421 ..xx'''''''xx..
1422 .xx'''''''''xx.
1423 .x'''xxxxx'''x.
1424 .xx'+x.x.x+'xx.
1425 ..xxx..x..xxx..
1426  .....xxx.....
1427      .....
1428 ENDMAP
1429
1430 ### Okawaru overflow altars ###################################################
1431
1432 NAME:    okawaru_metal_pillars_1_2
1433 TAGS:    temple_overflow_1 temple_overflow_okawaru uniq_altar_okawaru
1434 TAGS:    transparent decor
1435 DEPTH:   D:2-10, Orc
1436 WEIGHT:  7
1437 KFEAT:   _ = altar_okawaru
1438 SHUFFLE: v'
1439 SUBST:   ' = .
1440 : interest_check(_G)
1441 MAP
1442 .....
1443 .v'v.
1444 .'_'.
1445 .v'v.
1446 .....
1447 ENDMAP
1448
1449 NAME:   okawaru_metal_pillars_3
1450 TAGS:   temple_overflow_1 temple_overflow_okawaru uniq_altar_okawaru
1451 TAGS:   transparent decor
1452 DEPTH:  D:2-10, Orc
1453 WEIGHT: 3
1454 KFEAT:  _ = altar_okawaru
1455 MAP
1456 .......
1457 ...v...
1458 ..v.v..
1459 .v._.v.
1460 ..v.v..
1461 ...v...
1462 .......
1463 ENDMAP
1464
1465 NAME:   okawaru_trees_1
1466 TAGS:   temple_overflow_1 temple_overflow_okawaru uniq_altar_okawaru
1467 TAGS:   transparent decor
1468 DEPTH:  D:2-10
1469 WEIGHT: 5
1470 KFEAT:  _ = altar_okawaru
1471 : interest_check(_G)
1472 MAP
1473 .........
1474 .v.t.t.v.
1475 .........
1476 .t.t.t.t.
1477 ...._....
1478 .t.t.t.t.
1479 .........
1480 .v.t.t.v.
1481 .........
1482 ENDMAP
1483
1484 NAME:   okawaru_trees_2
1485 TAGS:   temple_overflow_1 temple_overflow_okawaru uniq_altar_okawaru
1486 TAGS:   transparent decor
1487 DEPTH:  D:2-10
1488 WEIGHT: 5
1489 KFEAT:  _ = altar_okawaru
1490 : interest_check(_G)
1491 MAP
1492 ...........
1493 .v...t...v.
1494 ....t.t....
1495 ...t.t.t...
1496 ..t.t.t.t..
1497 .t.t._.t.t.
1498 ..t.t.t.t..
1499 ...t.t.t...
1500 ....t.t....
1501 .v...t...v.
1502 ...........
1503 ENDMAP
1504
1505 NAME:  okawaru_ov_weapons_minmay
1506 TAGS:  temple_overflow_1 temple_overflow_okawaru uniq_altar_okawaru
1507 TAGS:  transparent decor
1508 ITEM:  hand axe, falchion, mace, spear
1509 KFEAT: _ = altar_okawaru
1510 : interest_check(_G)
1511 MAP
1512    .....
1513   ...v...
1514  ...vvv...
1515 ...........
1516 ..v.e.f.v..
1517 .vv.._..vv.
1518 ..v.d.g.v..
1519 ...........
1520  ...vvv...
1521   ...v...
1522    .....
1523 ENDMAP
1524
1525 NAME:  okawaru_altar_gauntlet_db
1526 TAGS:  uniq_altar_okawaru temple_overflow_1 temple_overflow_okawaru
1527 DEPTH: D:2-9
1528 KFEAT: _ = altar_okawaru
1529 MONS:  goblin; stone q:5 / hobgoblin; stone q:5 / gnoll; stone q:5 /\
1530        orc; stone q:5 / kobold; stone q:5
1531 MAP
1532   xxx
1533 xxx_xxx
1534 x1w.wxx
1535 xxw.w1x
1536 x1w.wxx
1537 xxw.w1x
1538 x1w.wxx
1539 xxw.w1x
1540 xxx+xxx
1541 ENDMAP
1542
1543 NAME:   okawaru_gym_becter
1544 TAGS:   uniq_altar_okawaru temple_overflow_1 temple_overflow_okawaru
1545 TAGS:   transparent decor
1546 DEPTH:  D:2-9
1547 KFEAT:  _ = altar_okawaru
1548 MAP
1549    .....
1550  .........
1551  .vv...vv.
1552 ..v.....v..
1553 ....._.....
1554 ..v.....v..
1555  .vv...vv.
1556  .........
1557    .....
1558 ENDMAP
1559
1560 NAME:    okawaru_humans
1561 TAGS:    uniq_altar_okawaru temple_overflow_1 temple_overflow_okawaru
1562 TAGS:    no_monster_gen no_wall_fixup transparent
1563 DEPTH:   D:7-12
1564 COLOUR:  1 = yellow, ' = yellow, x = white
1565 MONS:    human ; long sword . ring mail
1566 FTILE:   1'xO = floor_sandstone
1567 RTILE:   x = wall_tomb
1568 KFEAT:   _ = altar_okawaru
1569 : interest_check(_G)
1570 MAP
1571 .........
1572 .xxxxxxx.
1573 .x1'_'1x.
1574 .x'''''x.
1575 .x'x'x'x.
1576 .xGx'xGx.
1577 .xxx'xxx.
1578 ....'....
1579 ENDMAP
1580
1581 NAME:   kennysheep_okawaru_gauntlet
1582 TAGS:   temple_overflow_1 temple_overflow_okawaru uniq_altar_okawaru
1583 TAGS:   no_pool_fixup transparent
1584 DEPTH:  D:2-9
1585 KFEAT:  _ = altar_okawaru
1586 KMONS:  1 = goblin ; spear
1587 KPROP:  1 = no_tele_into
1588 KMASK:  1 = opaque
1589 MAP
1590       vvvvvvv
1591  .....w1w...v
1592 ......www.G.v
1593 @........G_Gv
1594 ......www.G.v
1595  .....w1w...v
1596       vvvvvvv
1597 ENDMAP
1598
1599 ### Qazlal overflow altars ####################################################
1600
1601 # There's always a safe path to the altar.
1602 NAME:   grunt_qazlal_clouds
1603 DEPTH:  D:2-
1604 TAGS:   transparent no_monster_gen no_item_gen no_trap_gen temple_overflow_1
1605 TAGS:   temple_overflow_qazlal uniq_altar_qazlal
1606 KFEAT:  _ = altar_qazlal
1607 MARKER:  L = lua:fog_machine { cloud_type = "flame", \
1608                                pow_min = 5, pow_max = 7, delay_min = 55, \
1609                                delay_max = 75, size = 1, walk_dist = 0, \
1610                                spread_rate = 0, excl_rad = 0 }
1611 MARKER:  M = lua:fog_machine { cloud_type = "freezing vapour", \
1612                                pow_min = 5, pow_max = 7, delay_min = 55, \
1613                                delay_max = 75, size = 1, walk_dist = 0, \
1614                                spread_rate = 0, excl_rad = 0 }
1615 MARKER:  N = lua:fog_machine { cloud_type = "sparse dust", \
1616                                pow_min = 5, pow_max = 7, delay_min = 55, \
1617                                delay_max = 75, size = 1, walk_dist = 0, \
1618                                spread_rate = 0 }
1619 # not a storm cloud - it would be too noisy
1620 MARKER:  O = lua:fog_machine { cloud_type = "rain", \
1621                                pow_min = 5, pow_max = 7, delay_min = 55, \
1622                                delay_max = 75, size = 1, walk_dist = 0, \
1623                                spread_rate = 0 }
1624 SHUFFLE: LMNO
1625 KPROP:   LMNO- = no_tele_into
1626 KFEAT:   - = .
1627 : interest_check(_G)
1628 MAP
1629 ccc@ccc
1630 cL-.-Mc
1631 c-...-c
1632 @.._..@
1633 c-...-c
1634 cN-.-Oc
1635 ccc@ccc
1636 ENDMAP
1637
1638 NAME:   grunt_qazlal_sundering
1639 DEPTH:  D:2-, !D:$
1640 TAGS:   no_monster_gen no_item_gen no_trap_gen temple_overflow_1
1641 TAGS:   temple_overflow_qazlal uniq_altar_qazlal
1642 KFEAT:  _ = altar_qazlal
1643 KPROP:  c = no_tele_into
1644 SUBST:  c = cccl^.
1645 SUBST:  - = ..l^
1646 KFEAT:  ^ = shaft trap
1647 KITEM:  . = nothing w:189 / stone / large rock q:1 w:1
1648 KFEAT:  . = .
1649 : interest_check(_G)
1650 MAP
1651  ----@----
1652 -ccc-.-ccc-
1653 -ccc-.-ccc-
1654 -ccc-.-ccc-
1655 -----.-----
1656 @...._....@
1657 -----.-----
1658 -ccc-.-ccc-
1659 -ccc-.-ccc-
1660 -ccc-.-ccc-
1661  ----@----
1662 ENDMAP
1663
1664 NAME:  nicolae_qazlal_eye_of_the_storm
1665 TAGS:  temple_overflow_qazlal temple_overflow_1 uniq_altar_qazlal
1666 TAGS:  no_trap_gen no_item_gen no_monster_gen
1667 DEPTH: D:2-
1668 KPROP: 'd = no_tele_into
1669 KMONS: d = diamond obelisk
1670 KFEAT: _ = altar_qazlal
1671 : interest_check(_G)
1672 MAP
1673  ccccccccccccc
1674  c'''''''''''c
1675  c'''''''''''c
1676  c'''''''''''c
1677  c'''''''''''c
1678 @nnnnnn''''''c
1679 @...._nd'''''c
1680 @nnnnnn''''''c
1681  c'''''''''''c
1682  c'''''''''''c
1683  c'''''''''''c
1684  c'''''''''''c
1685  ccccccccccccc
1686 ENDMAP
1687
1688 NAME:    nicolae_qazlal_style_of_elements
1689 TAGS:    temple_overflow_qazlal temple_overflow_1 uniq_altar_qazlal
1690 TAGS:    no_trap_gen no_item_gen no_monster_gen transparent
1691 DEPTH:   D:2-
1692 SHUFFLE: faew
1693 KPROP:   faew = no_tele_into
1694 KMASK:   faew = opaque
1695 KMONS:   f = fire elemental
1696 KMONS:   a = air elemental
1697 KMONS:   e = earth elemental
1698 KMONS:   w = water elemental
1699 KFEAT:   _ = altar_qazlal
1700 KFEAT:   f = lava
1701 KFEAT:   w = deep_water
1702 MARKER:  a = lua:fog_machine { cloud_type = "thin mist", \
1703                                pow_min = 100, pow_max = 100, delay = 1, \
1704                                size = 1, walk_dist = 0, start_clouds = 1 }
1705 MARKER:  e = lua:fog_machine { cloud_type = "sparse dust", \
1706                                pow_min = 100, pow_max = 100, delay = 1, \
1707                                size = 1, walk_dist = 0, start_clouds = 1 }
1708 : interest_check(_G)
1709 MAP
1710 ccc.@.ccc
1711 cfn...nac
1712 cnn...nnc
1713 .........
1714 ...._....
1715 .........
1716 cnn...nnc
1717 cwn...nec
1718 ccc...ccc
1719 ENDMAP
1720
1721 # general_overflow_altar cannot contain the power of Qazlal
1722 NAME:    nicolae_qazlal_general_emergency
1723 TAGS:    temple_overflow_qazlal temple_overflow_1 uniq_altar_qazlal
1724 TAGS:    no_monster_gen no_pool_fixup transparent
1725 DEPTH:   D:2-
1726 SHUFFLE: xXY / xXY / xXY / abc
1727 SHUFFLE: XY
1728 SUBST:   z = w.., X = +++w., Y = xxxxw., x = wxxx, a = w, b = w, c = w
1729 SHUFFLE: ABCD
1730 SUBST:   A = >, C = 'GTU, D = '
1731 KFEAT:   B = altar_qazlal
1732 KMASK:   B>'GTU = opaque
1733 SHUFFLE: wll
1734 : interest_check(_G)
1735 MAP
1736 ...........z.
1737 .z...z.zzz...
1738 ..zz.z.wwwz..
1739 ..wxXYYxwwz..
1740 .zwwwwwwxwz..
1741 zwwxwABwxz...
1742 zwwxwCDwx..z.
1743 .zzxwwwwx.z..
1744 ...xxxwxxwz..
1745 .z...zwwwz...
1746 ...z..zzz....
1747 ...........z.
1748 ENDMAP
1749
1750
1751 # Ru overflow altar vaults ####################################################
1752
1753 # A few unlucky monsters permanently afflicted with Ru's various status effects.
1754 # the monsters in group B should all be non-intelligent, so that TSO won't get upset
1755 # about attacking them while blind. it's a pain for a monster you're not allowed
1756 # to attack to chase you throughout the level
1757 NAME: nicolae_ru_great_annihilating_truth
1758 TAGS: temple_overflow_ru temple_overflow_1 uniq_altar_ru transparent
1759 TAGS: no_monster_gen no_item_gen
1760 : interest_check(_G)
1761 DEPTH: D:2-9
1762 SHUFFLE: MCSBP
1763 KFEAT: _ = altar_ru
1764 KMONS: P = ball python perm_ench:paralysis / rat perm_ench:paralysis / \
1765   frilled lizard perm_ench:paralysis / giant cockroach perm_ench:paralysis / \
1766   quokka perm_ench:paralysis / kobold w:5 perm_ench:paralysis / \
1767   goblin w:5 perm_ench:paralysis / hobgoblin w:5 perm_ench:paralysis
1768 KMONS: C = bat perm_ench:corona / adder perm_ench:corona / \
1769   kobold perm_ench:corona / goblin perm_ench:corona / hobgoblin perm_ench:corona
1770 KMONS: S = jackal perm_ench:slow / bat perm_ench:slow / adder perm_ench:slow / \
1771   kobold perm_ench:slow / goblin perm_ench:slow / hobgoblin perm_ench:slow
1772 KMONS: B = ball python perm_ench:blind / frilled lizard perm_ench:blind / \
1773   giant cockroach perm_ench:blind / bat perm_ench:blind
1774 KMONS: M = orc wizard perm_ench:mute
1775 MAP
1776 @...   ...@
1777 .+xxxxxxx+.
1778 .x...x...x.
1779 .x.P.x.C.x.
1780  x.......x
1781  xxx._.xxx
1782  x.......x
1783 .x.S.x.B.x.
1784 .x...x...x.
1785 .+xxxxxxx+.
1786 @...   ...@
1787 ENDMAP
1788
1789 NAME: nicolae_ru_awakened_eye
1790 TAGS: temple_overflow_ru temple_overflow_1 uniq_altar_ru transparent decor
1791 TAGS: no_pool_fixup
1792 : interest_check(_G)
1793 DEPTH: D:2-
1794 KFEAT: _ = altar_ru
1795 MAP
1796     .......
1797    .ccccccc.
1798   .c..WWW..c.
1799  .c..W...W..c.
1800 .c...W._.W...c.
1801  .c..W...W..c.
1802   .c..WWW..c.
1803    .ccccccc.
1804     .......
1805 ENDMAP
1806
1807 # Overgrown and disused, since many pilgrims find Ru's sacrifices too onerous.
1808 NAME:   nicolae_ru_the_path_less_chosen
1809 TAGS:   temple_overflow_ru temple_overflow_1 uniq_altar_ru transparent decor
1810 TAGS:   no_item_gen no_monster_gen
1811 : interest_check(_G)
1812 DEPTH:  D:2-
1813 KMONS:  p = plant / fungus w:3
1814 NSUBST: r = 3=^ / ^p / 7=p / 2:p. / ., i = ^^p. / 2=p / .
1815 NSUBST: D = . / xxp / x, E = . / xxp / x, F = xxp / .
1816 KFEAT:  _ = altar_ru
1817 KFEAT:  ^ = web trap
1818 MAP
1819 xxxxxxx
1820 xrrrrrxxxxx
1821 xriiirxDFEx
1822 xri_ir.D.E.@
1823 xriiirxDFEx
1824 xrrrrrxxxxx
1825 xxxxxxx
1826 ENDMAP
1827
1828 NAME: nicolae_ru_sacrificial_ziggurat
1829 TAGS: temple_overflow_ru temple_overflow_1 uniq_altar_ru transparent decor
1830 : interest_check(_G)
1831 DEPTH: D:2-
1832 SUBST: b = B.., @ = %@@
1833 KPROP: B% = bloody
1834 SUBST: B = ., % = @
1835 FTILE: ' = floor_sandstone
1836 FTILE: .@_ = floor_limestone
1837 TILE: c = wall_sandstone
1838 KFEAT: _ = altar_ru
1839 MAP
1840 cccccc@cccccc
1841 c'''''b'''''c
1842 c'ccccbcccc'c
1843 c'c'''b'''c'c
1844 c'c'ccbcc'c'c
1845 c'c'cBBBc'c'c
1846 @bbbbB_Bbbbb@
1847 c'c'cBBBc'c'c
1848 c'c'ccbcc'c'c
1849 c'c'''b'''c'c
1850 c'ccccbcccc'c
1851 c'''''b'''''c
1852 cccccc@cccccc
1853 ENDMAP
1854
1855 NAME: nicolae_ru_path_of_blood
1856 TAGS: temple_overflow_ru temple_overflow_1 uniq_altar_ru transparent decor
1857 TAGS: no_monster_gen
1858 : interest_check(_G)
1859 DEPTH: D:2-
1860 KPROP: , = bloody
1861 KPROP: l = no_cloud_gen
1862 KFEAT: _ = altar_ru
1863 MAP
1864 @lcccccccccc
1865 l,......,llc
1866 @l,l,l,l,_lc
1867 l,......,llc
1868 @lcccccccccc
1869 ENDMAP
1870
1871 NAME:   hangedman_ru_absence
1872 TAGS:   temple_overflow_ru temple_overflow_1 uniq_altar_ru transparent decor
1873 TAGS:   no_pool_fixup
1874 DEPTH:  D:2-
1875 WEIGHT: 5
1876 KFEAT:  _ = altar_ru
1877 SUBST:  X : x., x : cxx, b: cbxx, + : W+++, m : mmw
1878 KMASK:  wW = no_monster_gen
1879 : interest_check(_G)
1880 MAP
1881 ......xxxxx......
1882 ..x...........x..
1883 xxxxxx.....xxxxxx
1884 ..x..x.....x..x..
1885 ..x..x.XxX.x..x..
1886 .....+..b..+.....
1887 ....xxbbbbbxx....
1888 .....+..b_.+.....
1889 ..x..x.XxX.m..m..
1890 ..x..x.....m..m..
1891 xxxxxx.....mmmmmm
1892 ..x...........m..
1893 ......xxxxx......
1894 ENDMAP
1895
1896 ### Sif Muna overflow altars ##################################################
1897
1898 NAME:   lemuel_blue_sif_altar
1899 DEPTH:  D:2-, Elf, Vaults
1900 TAGS:   no_monster_gen temple_overflow_1 temple_overflow_sif_muna
1901 TAGS:   uniq_altar_sif_muna decor
1902 COLOUR: . = blue
1903 FTILE:  . = floor_hall, C = floor_hall, @ = floor_hall, + = floor_hall
1904 KFEAT:  _ = altar_sif_muna
1905 : interest_check(_G)
1906 MAP
1907 xxxxxxxxxxxxxx
1908 ...........xxx
1909 @..........+_x
1910 ...........xxx
1911 xxxxxxxxxxxxxx
1912 ENDMAP
1913
1914 NAME:       tgw_sif
1915 DEPTH:      D:3-, Elf
1916 TAGS:       no_item_gen no_monster_gen no_pool_fixup decor
1917 TAGS:       temple_overflow_1 temple_overflow_sif_muna uniq_altar_sif_muna
1918 KFEAT:      _ = altar_sif_muna
1919 MONS:       orc wizard w:15 / Jessica / Blork the orc
1920 NSUBST:     M = 1:1 / *:"
1921 SUBST:      ' : "'., ' = ''.
1922 COLOUR:     . = blue
1923 SUBST:      ' = ., " = .
1924 : interest_check(_G)
1925 MAP
1926         xx@xx
1927         x...x
1928         x...x
1929       xxx...xxx
1930      xx'''''''xx
1931     xx'''...'''xx
1932     x'''.www.'''x
1933    xx''.wwwww.''xx
1934    x''.wwM"Mww.''x
1935    x''.wwM>Mww.''x
1936    x''.wwMMMww.''x
1937    xx''.wwwww.''xx
1938     x'''.www.'''x
1939     xx'''...'''xx
1940      xx'''''''xx
1941       xxx...xxx
1942         x._.x
1943         x...x
1944         xxxxx
1945 ENDMAP
1946
1947 NAME:   led_sif_book
1948 DEPTH:  D:3-12, Orc
1949 TAGS:   no_item_gen no_pool_fixup no_monster_gen
1950 TAGS:   temple_overflow_1 temple_overflow_sif_muna uniq_altar_sif_muna
1951 KPROP:  1d = no_tele_into
1952 KFEAT:  _ = altar_sif_muna
1953 KFEAT:  d = escape_hatch_down
1954 KITEM:  d = randbook owner:Sif_Muna numspells:1 slevels:1
1955 MONS:   orc wizard
1956 COLOUR: .@+1 = blue
1957 FTILE:  .@+1G_ = floor_marble
1958 : interest_check(_G)
1959 MAP
1960 xxxxxxxxx
1961 xbbbbx..xx
1962 x1w..xG..x
1963 xdw..+._.@
1964 x1w..xG..x
1965 xbbbbx..xx
1966 xxxxxxxxx
1967 ENDMAP
1968
1969 NAME:   led_sif_pool
1970 DEPTH:  D:2-9
1971 TAGS:   no_item_gen no_monster_gen no_pool_fixup
1972 TAGS:   temple_overflow_1 temple_overflow_sif_muna uniq_altar_sif_muna
1973 KFEAT:  _ = altar_sif_muna
1974 COLOUR: . = blue
1975 FTILE:  ._ = floor_marble
1976 : interest_check(_G)
1977 MAP
1978  xxx@xxx
1979  xxx+xxx
1980 xxWW.WWxx
1981 xWWW.WWWx
1982 xWW...WWx
1983 xWW._.WWx
1984 xWW...WWx
1985 xWWWWWWWx
1986 xxWWWWWxx
1987  xxxxxxx
1988 ENDMAP
1989
1990 ### Trog overflow altars ######################################################
1991
1992 NAME:  bloody_trog
1993 TAGS:  uniq_altar_trog temple_overflow_1 temple_overflow_trog
1994 TAGS:  transparent decor
1995 DEPTH: D:2-12, Orc, Vaults
1996 KPROP: . = bloody / nothing
1997 KFEAT: _ = altar_trog
1998 KITEM: _ = animal skin, dagger
1999 : interest_check(_G)
2000 MAP
2001 ...
2002 ._.
2003 ...
2004 ENDMAP
2005
2006 NAME:   trog_ov_bears_minmay
2007 TAGS:   temple_overflow_1 temple_overflow_trog uniq_altar_trog
2008 TAGS:   transparent
2009 DEPTH:  D:6-
2010 : if you.absdepth() < 10 then
2011 MONS:   black bear
2012 : else
2013 MONS:   polar bear
2014 : end
2015 MONS:   bush
2016 NSUBST: ' = 2:2 / 2=2. / *=.
2017 KFEAT:  _ = altar_trog
2018 MAP
2019 .....
2020 .'''.
2021 .1_1.
2022 .'''.
2023 .....
2024 ENDMAP
2025
2026 NAME:   tgw_trog
2027 TAGS:   no_item_gen no_monster_gen patrolling
2028 TAGS:   temple_overflow_1 temple_overflow_trog uniq_altar_trog
2029 DEPTH:  D:2-9
2030 KFEAT:  _ = altar_trog
2031 KPROP:  1 = no_tele_into
2032 MONS:   moth of wrath, rat / worm w:5
2033 ITEM:   any weapon
2034 NSUBST: M = 4:d / *:.
2035 SUBST:  + = +....
2036 KFEAT:  o = iron_grate
2037 MAP
2038       xxxxxxx
2039      xxxMMMxxx
2040     xxMMM2MMMxx
2041    xxMM22_22MMxx
2042    xx.........xx
2043    x....ooo....x
2044    x...oo1oo...x
2045    x....ooo....x
2046    x...........x
2047    xx.........xx
2048     xx.......xx
2049      xxxx+xxxx
2050        xx@xx
2051 ENDMAP
2052
2053 NAME:   trog_eyes_of_draining
2054 TAGS:   uniq_altar_trog temple_overflow_1 temple_overflow_trog patrolling
2055 DEPTH:  D:3-9
2056 WEIGHT: 4
2057 MONS:   eye of draining
2058 : if you.absdepth() > 5 and crawl.coinflip() then
2059 KMONS:  2 = ogre god:trog ; giant club ego:antimagic ident:type | w:3 giant club / \
2060         ogre god:trog ; giant spiked club ego:antimagic ident:type | w:5 giant spiked club / \
2061         orc warrior god:trog ; halberd ego:antimagic ident:type | war axe ego:antimagic ident:type | \
2062         flail ego:antimagic ident:type | great mace ego:antimagic ident:type | any weapon / \
2063         big kobold god:trog ; short sword ego:antimagic ident:type | dagger ego:antimagic ident:type | \
2064         rapier ego:antimagic ident:type | rapier
2065 : else
2066 KMONS:  2 = orc god:trog ; spear ego:antimagic ident:type | hand axe ego:antimagic ident:type | \
2067         war axe ego:antimagic ident:type | any weapon / \
2068         kobold god:trog ; short sword ego:antimagic ident:type | hand axe ego:antimagic ident:type | \
2069         club ego:antimagic ident:type | whip ego:antimagic ident:type | any weapon / \
2070         goblin god:trog ; dagger ego:antimagic ident:type | short sword ego:antimagic ident:type / \
2071         gnoll god:trog ; spear ego:antimagic ident:type | trident ego:antimagic ident:type | \
2072         halberd ego:antimagic ident:type | whip ego:antimagic ident:type | halberd | any weapon
2073 : end
2074 KFEAT:  _ = altar_trog
2075 NSUBST: 1 = 1:1 / 1 = 1. / 1 = 1.. / *:.
2076 MAP
2077   xxxxx
2078  xx111xx
2079 xx11_11xx
2080 x112.211x
2081 x.......x
2082 x.G...G.x
2083 xx.....xx
2084  xx@@@xx
2085 ENDMAP
2086
2087 NAME:   trog_butcher_becter
2088 TAGS:   overflow_altar_trog
2089 DEPTH:  D:2-9, Orc, !Orc:$
2090 : if you.absdepth() < 6 then
2091 MONS:   orc ; hand axe . animal skin
2092 MONS:   leopard gecko / rat / frilled lizard / quokka
2093 : else
2094 MONS:   orc warrior ; war axe . animal skin
2095 MONS:   iguana / worker ant
2096 : end
2097 NSUBST: ' = 3=2 / .
2098 SUBST:  y = x, " = .
2099 KPROP:  1y" = bloody
2100 KFEAT:  _ = altar_trog
2101 KFEAT:  ^ = shaft trap
2102 KFEAT:  m = iron_grate
2103 MAP
2104   xxxxxxx
2105  xx'''''xx
2106 xx.xxxxxxxx
2107 xx+xmmmx^yx
2108 xx.."1"""yx
2109 xx..._"..xx
2110  xx.....xx
2111   xx...xx
2112      @
2113 ENDMAP
2114
2115 NAME:   trog_hazing_becter
2116 TAGS:   overflow_altar_trog no_monster_gen no_item_gen no_pool_fixup
2117 DEPTH:  D:2-9, Orc, !Orc:$
2118 MONS:   goblin ; stone q:5 . animal skin / \
2119         hobgoblin ; stone q:5 . animal skin / \
2120         kobold ; stone q:5 | throwing net q:1 . animal skin
2121 ITEM:   stone
2122 NSUBST: D = 6=1 / .
2123 SUBST:  . = d....
2124 KFEAT:  _ = altar_trog
2125 KFEAT:  m = iron_grate
2126 : interest_check(_G)
2127 MAP
2128   xxxxx
2129  xxmmmxx
2130 xx.._..xx
2131 xDw...wDx
2132 xDWw.wWDx
2133 xDDw.wDDx
2134 xxDw.wDxx
2135  xxx.xxx
2136   xx@xx
2137 ENDMAP
2138
2139 NAME:   trog_three_pillars_becter
2140 TAGS:   overflow_altar_trog transparent decor
2141 DEPTH:  D:2-9
2142 KFEAT:  _ = altar_trog
2143 SUBST:  y = x..
2144 SUBST:  z = xx.
2145 MAP
2146  ..........
2147 .......yy..
2148 ..yy..zxxy.
2149 .yxxz.xbxy.
2150 .yxb...xxy.
2151 .yxx._.....
2152 .......xy..
2153 .....zbxy..
2154    ..yxxy..
2155    ...yy...
2156     ......
2157 ENDMAP
2158
2159 ### Uskayaw overflow altars ###################################################
2160
2161 NAME:   dancing_weapons_uskayaw
2162 DEPTH:  D:2-9
2163 TAGS:   temple_overflow_1 temple_overflow_uskayaw transparent
2164 MONS:   generate_awake dancing weapon ; dagger | hand axe
2165 KFEAT:  _ = altar_uskayaw
2166 NSUBST: ' = 2:1 / *:'
2167 KMASK:  1' = no_monster_gen
2168 KMASK:  1' = no_item_gen
2169 KMASK:  1' = no_trap_gen
2170 KMASK:  1' = opaque
2171 KPROP:  1' = no_tele_into
2172 MAP
2173 .......
2174 .mmmmm.
2175 .m'''m.
2176 .m'''m.
2177 .mmmmm.
2178 .......
2179 ..._...
2180  .....
2181 ENDMAP
2182
2183 NAME:   eat_drink_and_be_merry_uskayaw
2184 DEPTH:  D:2-9
2185 TAGS:   temple_overflow_1 temple_overflow_uskayaw transparent
2186 KFEAT:  _ = altar_uskayaw
2187 ITEM:   any potion q:1, any weapon
2188 # TODO: replace ration flavor?
2189 MAP
2190 ...........
2191 .G.......G.
2192 ...........
2193 .G.......G.
2194 ....def....
2195 .G..._...G.
2196 ....ccc....
2197   .......
2198 ENDMAP
2199
2200 ### Vehumet overflow altars ###################################################
2201
2202 # Rather than put the flame cloud on the altar, flames now surround the
2203 # altar, and the maximum delay between flames has gone away. Thus, standing
2204 # on the altar properly is safe, and a cautious player can time their entrance
2205 # to take no damage.
2206 NAME:   fiery_altar_vehumet
2207 DEPTH:  D:2-10, Orc, !Orc:$
2208 WEIGHT: 8
2209 TAGS:   temple_overflow_1 temple_overflow_vehumet
2210 MARKER: : = lua:fog_machine { cloud_type = "flame", \
2211                pow_min = 6, pow_max = 8, delay_min = 55, delay_max = 75, \
2212                size = 2, walk_dist = 0, spread_rate= 0 }
2213 KFEAT:  _ = altar_vehumet
2214 : interest_check(_G)
2215 MAP
2216 .....
2217 .:.:.
2218 .._..
2219 .:.:.
2220 .....
2221 ENDMAP
2222
2223 NAME:    vehumet_statue
2224 DEPTH:   D:4-10
2225 TAGS:    temple_overflow_1 temple_overflow_vehumet transparent
2226 SHUFFLE: 12
2227 MONS:    statue name:charred name_adjective tile:mons_statue_mage \
2228              hp:12 hd:3 spells:throw_flame.53.magical
2229 MONS:    statue name:frost-covered name_adjective tile:mons_statue_mage \
2230              hp:12 hd:3 spells:throw_frost.53.magical
2231 KFEAT:   _ = altar_vehumet
2232 MAP
2233 ...........
2234 .bbbbbbbbb.
2235 .b.......b.
2236 .b.1._.....
2237 .b.......b.
2238 .bbbbbbbbb.
2239 ...........
2240 ENDMAP
2241
2242 NAME:    vehumet_crystals
2243 DEPTH:   D:2-10, Orc, !Orc:$
2244 TAGS:    temple_overflow_1 temple_overflow_vehumet transparent
2245 KFEAT:   _ = altar_vehumet
2246 : interest_check(_G)
2247 MAP
2248 .........
2249 ..b...b..
2250 .bbb.bbb.
2251 ..b...b..
2252 ...._....
2253 ..b...b..
2254 .bbb.bbb.
2255 ..b...b..
2256 .........
2257 ENDMAP
2258
2259 NAME:  vehumet_altar_wand_db
2260 TAGS:  uniq_altar_vehumet temple_overflow_1 temple_overflow_vehumet
2261 TAGS:  transparent patrolling
2262 DEPTH: D:4-9
2263 KFEAT: _ = altar_vehumet
2264 MONS:  goblin; wand of flame /\
2265        hobgoblin; wand of flame /\
2266        kobold; wand of flame
2267 MAP
2268 .......
2269 ...x...
2270 ...1...
2271 .x._.x.
2272 .......
2273 ...x...
2274 .......
2275 ENDMAP
2276
2277 ### Xom overflow altars #######################################################
2278
2279 NAME:   tgw_xom
2280 DEPTH:  D:2-, Depths
2281 TAGS:   no_item_gen no_monster_gen temple_overflow_1 temple_overflow_xom
2282 TAGS:   uniq_altar_xom
2283 KFEAT:  _ = altar_xom
2284 MONS:   place:D:1
2285 MONS:   orc ; club ego:chaos | dagger ego:chaos | spear ego:chaos
2286 MONS:   gnoll ; club ego:chaos | dagger ego:chaos | spear ego:chaos
2287 MONS:   boggart ; flail ego:chaos | long sword ego:chaos | trident ego:chaos
2288 MONS:   rakshasa ; flail ego:chaos | long sword ego:chaos | trident ego:chaos
2289 :  if you.depth() == dgn.br_depth(you.branch()) then
2290 KFEAT:  ~ = teleport trap w:20 / alarm trap w:3 / dispersal trap
2291 :  else
2292 KFEAT:  ~ = shaft trap / teleport trap / alarm trap w:3 / dispersal trap
2293 :  end
2294 # Previously on raw average 5.17 M glyphs.
2295 NSUBST: ' = _ / .
2296 NSUBST: . = 8=M / * = .:220 W:60 w:50 x:80 n:80 v b l % T U ~
2297 NSUBST: % = *% / %
2298 SUBST:  M : .111123M
2299 NSUBST: 1 = 0 / 1 / 01., 2 = 2 / 2=2. / 2...
2300 NSUBST: 3 = 3 / 2=3. / 3..., M = 1 / 123.
2301 :  if you.in_branch("Depths") then
2302 SUBST:  2 = 4, 3 = 5
2303 :  end
2304 COLOUR: . = random
2305 MAP
2306    xxxxxx@xxxxxx
2307   xx...........xx
2308  xx.............xx
2309 xx...............xx
2310 x.................x
2311 x.................x
2312 x'...............'x
2313 x'...............'x
2314 xx'.............'xx
2315  xx'''''''''''''xx
2316   xx'''''''''''xx
2317    xxxxxxxxxxxxx
2318 ENDMAP
2319
2320 NAME:    xom_teletrap_fun
2321 TAGS:    temple_overflow_1 temple_overflow_xom uniq_altar_xom
2322 TAGS:    transparent
2323 KFEAT:   _ = altar_xom
2324 NSUBST:  T = . / T
2325 KFEAT:   T = teleport trap
2326 MAP
2327 .....
2328 .TTT.
2329 .T_T.
2330 .TTT.
2331 .....
2332 ENDMAP
2333
2334 NAME:    xom_butterflies
2335 TAGS:    temple_overflow_1 temple_overflow_xom transparent patrolling
2336 KFEAT:   _ = altar_xom
2337 KITEM:   _ = wand of random effects w:40 / any wand
2338 COLOUR:  . = random
2339 NSUBST:  . = 2: 1/ *: .
2340 MONS:    butterfly
2341 : interest_check(_G)
2342 MAP
2343 ...
2344 ._.
2345 ...
2346 ENDMAP
2347
2348 NAME:    xom_shifter_show
2349 TAGS:    temple_overflow_1 temple_overflow_xom uniq_altar_xom
2350 DEPTH:   D:7-
2351 MONS:    shapeshifter hd:1
2352 KFEAT:   _ = altar_xom
2353 NSUBST:  . = 2:1 / 1:> / * = _...
2354 :  if you.depth() == dgn.br_depth(you.branch()) then
2355 SUBST:   > = <
2356 :  end
2357 SUBST:   x = bmv
2358 KMASK:   .1 = no_trap_gen
2359 COLOUR:  .1 = random
2360 FTILE:   ._<>1 = floor_pebble
2361 MAP
2362  xxxxxxx
2363  x.....x
2364  m.....x
2365 @m.._..x
2366  m.....x
2367  x.....x
2368  xxxxxxx
2369 ENDMAP
2370
2371 NAME:    xom_confusion_cloud
2372 TAGS:    temple_overflow_1 temple_overflow_xom uniq_altar_xom
2373 DEPTH:   D:4-13
2374 KFEAT:   _ = altar_xom
2375 MARKER:  _ = lua:fog_machine { cloud_type = "noxious fumes", \
2376                pow_min = 6, pow_max = 8, delay_min = 35, delay_max = 55, \
2377                size = 3, walk_dist = 0, spread_rate= 0 }
2378 SUBST:   . = 1.
2379 SHUFFLE: wW/l.
2380 MONS:    random
2381 MAP
2382   wwwww
2383  ww...ww
2384  w.....w
2385 @W.._..w
2386  w.....w
2387  ww...ww
2388   wwwww
2389 ENDMAP
2390
2391 NAME:    xom_redecorated
2392 DEPTH:   D:2-, !D:$
2393 TAGS:    temple_overflow_1 temple_overflow_xom uniq_altar_xom decor transparent
2394 SUBST:   c = ccbbbv
2395 NSUBST:  . = 2=^ / .
2396 SUBST:   . = lWwtm_~......
2397 NSUBST:  ^ = 3=^ / .
2398 KFEAT:   _ = altar_xom
2399 KFEAT:   ^ = teleport trap
2400 KFEAT:   ~ = shaft trap / alarm trap / teleport trap / dispersal trap
2401 : interest_check(_G)
2402 MAP
2403       @
2404    cccTccc
2405   cc.....cc
2406  cc.......cc
2407  c.........c
2408 @T...._....T@
2409  c.........c
2410  cc.......cc
2411   cc.....cc
2412    cccTccc
2413       @
2414 ENDMAP
2415
2416 NAME:   led_xom_imps
2417 TAGS:   temple_overflow_1 temple_overflow_xom uniq_altar_xom
2418 DEPTH:  D:3-5
2419 MONS:   crimson imp, crimson imp ; dagger ego:chaos
2420 NSUBST: 1 = 2 / 1
2421 KFEAT:  _ = altar_xom
2422 KFEAT:  ^ = teleport trap / dispersal trap
2423 MAP
2424 xxxx+xxxx
2425 x1^...^1x
2426 xxx._.xxx
2427 x1^...^1x
2428 xxxx+xxxx
2429 ENDMAP
2430
2431 NAME: nicolae_xom_altar_mimics
2432 TAGS: temple_overflow_1 temple_overflow_xom uniq_altar_xom decor transparent
2433 DEPTH: D:3-
2434 WEIGHT: 1
2435 NSUBST: _ = 1:_ / 2:XXX_ / *:X
2436 KFEAT: _ = altar_xom
2437 KFEAT: X = altar_xom mimic
2438 : interest_check(_G)
2439 MAP
2440   .......
2441   ._..._.
2442  .........
2443  .........
2444 ...........
2445 ._..._..._.
2446 ...........
2447  .........
2448  .........
2449   ._..._.
2450   .......
2451 ENDMAP
2452
2453 NAME:    brannock_xom_greatest_gift
2454 TAGS:    temple_overflow_1 temple_overflow_xom uniq_altar_xom transparent
2455 DEPTH:   D:2-
2456 WEIGHT:  2
2457 KFEAT:   _ = altar_xom
2458 MARKER:  _ = lua:portal_desc {gift="altar"}
2459 {{
2460     dgn.persist.xom_gg_granted = false
2461
2462     local los_marker = TriggerableFunction:new {
2463       func="callback.xom_greatest_gift",
2464       repeated=true
2465     }
2466     los_marker:add_triggerer(DgnTriggerer:new {
2467       type="player_los"})
2468
2469     lua_marker('_', los_marker)
2470 }}
2471 MAP
2472 ...
2473 ._.
2474 ...
2475 ENDMAP
2476
2477 NAME:   doesnt_xom_only_xom
2478 TAGS:   temple_overflow_1 temple_overflow_xom uniq_altar_xom
2479 KFEAT:  _ = altar_xom
2480 KFEAT:  C = C mimic
2481 NSUBST: C = 1:_ / *:C
2482 MAP
2483 xxxxxxxxxxx
2484 x.G.G.G.G.x
2485 xGC..C..CGx
2486 x.........x
2487 x.........x
2488 xG.......Gx
2489 x.C..C..C.x
2490 xG.......Gx
2491 xxxx...xxxx
2492    x...x
2493    x...x
2494    xG.Gx
2495    xx+xx
2496 ENDMAP
2497
2498 ### Yredelemnul overflow altars ###############################################
2499
2500 NAME:   yredelemnul_altar_generic
2501 TAGS:   uniq_altar_yredelemnul temple_overflow_1 temple_overflow_yredelemnul
2502 TAGS:   transparent decor
2503 DEPTH:  D:2-
2504 KFEAT:  C = altar_yredelemnul
2505 KMONS:  f = withered plant
2506 : interest_check(_G)
2507 MAP
2508 .....
2509 .f.f.
2510 ..C..
2511 .f.f.
2512 .....
2513 ENDMAP
2514
2515 NAME:   lemuel_zombie_altar_yredelemnul
2516 DEPTH:  D:2-, Crypt
2517 TAGS:   no_pool_fixup uniq_zombie_altar no_monster_gen temple_overflow_1
2518 TAGS:   temple_overflow_yredelemnul
2519 KFEAT:  _ = altar_yredelemnul
2520 MONS:   patrolling gnoll zombie
2521 NSUBST: A = 2:1 / *:.
2522 MAP
2523 xxxxxxxxxxxxxxxx
2524 xxxxAAAAAAAAxxxx
2525 xxxx........xxxx
2526 @............._x
2527 xxxx........xxxx
2528 xxxxAAAAAAAAxxxx
2529 xxxxxxxxxxxxxxxx
2530 ENDMAP
2531
2532 NAME:   lemuel_mausoleum_altar_yredelemnul
2533 TAGS:   uniq_altar_yredelemnul temple_overflow_1 temple_overflow_yredelemnul
2534 TAGS:   uniq_mausoleum_altar decor
2535 DEPTH:  D:7-, Crypt
2536 MONS:   w:50 human zombie/orc zombie/elf zombie/w:5 ogre zombie/w:5 troll zombie
2537 MONS:   w:50 human skeleton/orc skeleton/elf skeleton/w:5 ogre skeleton/\
2538         w:5 troll skeleton
2539 MONS:   mummy, wight, wraith, necrophage
2540 NSUBST: ? = 1:_ / *:1
2541 SUBST:  1 = 1:25 2 3 4:8 5:7 6:5
2542 KFEAT:  _ = altar_yredelemnul
2543 KMONS:  _ = human zombie
2544 : if not you.in_branch("D") or you.absdepth() > 13 then
2545 TAGS:   extra
2546 : end
2547 MAP
2548 ccccccccccccccc
2549 c?c?c?c?c?c?ccG
2550 c+c+c+c+c+c+ccc
2551 c............+@
2552 c+c+c+c+c+c+ccc
2553 c?c?c?c?c?c?ccG
2554 ccccccccccccccc
2555 ENDMAP
2556
2557 NAME:   yredelemnul_forgotten_temple_becter
2558 TAGS:   temple_overflow_1 temple_overflow_yredelemnul no_monster_gen no_item_gen
2559 DEPTH:  D:2-9
2560 KFEAT:  _ = altar_yredelemnul
2561 KFEAT:  . = web trap / .
2562 KMONS:  _ = spectral orc
2563 MAP
2564 xxxxxxxxx
2565 xcccccccx
2566 xc.._..cx
2567 xcc...ccx
2568 xc.....cx
2569 xcc...ccx
2570 xxcc+ccxx
2571  xxx@xxx
2572 ENDMAP
2573
2574 ### Zin overflow altars #######################################################
2575
2576 NAME:   zin_angel
2577 TAGS:   no_item_gen no_monster_gen temple_overflow_1 temple_overflow_zin decor
2578 DEPTH:  D:2-
2579 KFEAT:  _ = altar_zin
2580 KPROP:  1 = no_tele_into
2581 COLOUR: G = lightgray
2582 COLOUR: c = white
2583 TILE:   c = wall_church
2584 FTILE: _.G1m+ = floor_limestone
2585 MONS:   angel god:zin dbname:zin_angel / \
2586         angel god:zin dbname:zin_angel ; any weapon level:20 ego:holy_wrath ident:type / \
2587         angel god:zin dbname:zin_angel ; long sword ego:holy_wrath ident:type / \
2588         angel god:zin dbname:zin_angel ; mace ego:holy_wrath ident:type
2589 : interest_check(_G)
2590 MAP
2591 xxxxxxxxx
2592 xcccccccx
2593 xc1m.._cx
2594 xcmm...cx
2595 xc.....cx
2596 xcG...Gcx
2597 xccc+cccx
2598     @
2599 ENDMAP
2600
2601 NAME:   zin_treasury
2602 TAGS:   no_item_gen no_monster_gen temple_overflow_1 temple_overflow_zin
2603 DEPTH:  D:2-9, Orc, !Orc:$
2604 KFEAT:  _ = altar_zin
2605 KFEAT:  m = iron_grate
2606 KPROP:  $ = no_tele_into
2607 COLOUR: c = white
2608 TILE:   c = wall_church
2609 FTILE:  _.m+$ = floor_limestone
2610 : interest_check(_G)
2611 MAP
2612   xxxxxxx
2613   xcccccx
2614  xxc$$$cxx
2615 xxcc$$$ccxx
2616 xccmm$mmccx
2617 xcc.mmm.ccx
2618 xcc.._..ccx
2619 xxc.....cxx
2620  xccc+cccx
2621      @
2622 ENDMAP
2623
2624 NAME:   zin_purify
2625 TAGS:   no_item_gen no_monster_gen temple_overflow_1 temple_overflow_zin
2626 TAGS:   transparent
2627 DEPTH:  D:2-9, Orc, !Orc:$
2628 KFEAT:  _ = altar_zin
2629 KFEAT:  v = general shop name:Zin type:Purification suffix:Station count:1 \
2630         greed:30 ; \
2631         potion of curing
2632 COLOUR: c = white
2633 COLOUR: ' = white
2634 TILE:   c = wall_church
2635 FTILE:  Td'_ = floor_limestone
2636 SUBST:  ' = .
2637 : interest_check(_G)
2638 MAP
2639  .....
2640 ..ccc..
2641 .ccTcc.
2642 ..c_c..
2643  .....
2644 ...'...
2645 ..'v'..
2646  ..'..
2647   ...
2648 ENDMAP
2649
2650 NAME:   zin_scriptorium
2651 TAGS:   no_item_gen no_monster_gen temple_overflow_1 temple_overflow_zin
2652 DEPTH:  D:2-9
2653 ITEM:   any scroll
2654 KFEAT:  _ = altar_zin
2655 KFEAT:  m = iron_grate
2656 KPROP:  ? = no_tele_into
2657 COLOUR: c = white
2658 TILE:   c = wall_church
2659 FTILE:  _.m+d = floor_limestone
2660 NSUBST: ? = 2:d / *:.
2661 MAP
2662   xxxxxxx
2663   xcccccx
2664  xxc???cxx
2665  xcc???ccx
2666 xxcccmcccxx
2667 xcc.....ccx
2668 xcc.._..ccx
2669 xxc.....cxx
2670  xccc+cccx
2671      @
2672 ENDMAP
2673
2674 NAME:   zin_academy
2675 TAGS:   no_item_gen no_monster_gen temple_overflow_1 temple_overflow_zin
2676 TAGS:   transparent
2677 DEPTH:  D:2-9
2678 KFEAT:  _ = altar_zin
2679 COLOUR: c = white
2680 COLOUR: ' = white
2681 TILE:   c = wall_church
2682 FTILE:  _' = floor_limestone
2683 SUBST:  ' = .
2684 MAP
2685   ccccccc
2686 ccc.ttttccc
2687 c.tt'_'t..c
2688 ....'''....
2689 ...........
2690 ...'''''...
2691  .........
2692    .....
2693 ENDMAP
2694
2695 NAME:   zin_statuary
2696 TAGS:   no_item_gen no_monster_gen temple_overflow_1 temple_overflow_zin
2697 TAGS:   transparent
2698 DEPTH:  D:2-9
2699 KFEAT:  _ = altar_zin
2700 COLOUR: c = white
2701 TILE:   c = wall_church
2702 FTILE:  _'+ = floor_limestone
2703 SUBST:  ' = .
2704 MAP
2705  .......
2706 ..ccccc..
2707 .cc'_'cc.
2708 ..cc+cc..
2709 ...'''...
2710 .G.....G.
2711  ..G.G..
2712   .....
2713 ENDMAP
2714
2715 ### The Shining One overflow altars ###########################################
2716
2717 # TSO's small temple (1KB)
2718 # Idea stolen from protected_by_tso_3.
2719 NAME:     tso_altar
2720 TAGS:     no_item_gen no_rotate decor
2721 TAGS:     temple_overflow_1 temple_overflow_the_shining_one
2722 TAGS:     uniq_altar_the_shining_one
2723 COLOUR:   _ = yellow
2724 FTILE:    _A = floor_limestone
2725 SUBST:    _ = .
2726 COLOUR:   c = white
2727 TILE:     c = wall_church
2728 KFEAT:    A = altar_the_shining_one
2729 : interest_check(_G)
2730 MAP
2731   xxxxx
2732 xxxcccxxx
2733 xcccAcccx
2734 xc.___.cx
2735 xct._.tcx
2736 xc.._..cx
2737 xct...tcx
2738 xccc+cccx
2739 ENDMAP
2740
2741 NAME:    tso_metal_star
2742 TAGS:    no_monster_gen no_trap_gen no_pool_fixup no_item_gen decor
2743 TAGS:    temple_overflow_1 temple_overflow_the_shining_one transparent
2744 TAGS:    uniq_altar_the_shining_one
2745 KFEAT:   _ = altar_the_shining_one
2746 SUBST:   ! : vmmTG..
2747 : interest_check(_G)
2748 MAP
2749           @
2750           .
2751          ...
2752          .v.
2753         ..v..
2754        ..vvv..
2755       ..vv.vv..
2756      ..vv...vv..
2757     ..vm..!..mv..
2758   ...vv..!.!..vv...
2759 @..vvv..!._.!..vvv..@
2760   ...vv..!.!..vv...
2761     ..vm..!..+v..
2762      ..vv...vv..
2763       ..vv.vv..
2764        ..vvv..
2765         ..v..
2766          .v.
2767          ...
2768           .
2769           @
2770 ENDMAP
2771
2772 NAME:   tso_oasis_becter
2773 TAGS:   temple_overflow_1 temple_overflow_the_shining_one transparent
2774 TAGS:   no_item_gen no_monster_gen
2775 KMONS:  f = plant
2776 SUBST:  ` = ff.
2777 COLOUR: . = yellow
2778 FTILE:  `.Tf = floor_sand
2779 FTILE:  _ = floor_limestone
2780 COLOUR: c = white
2781 TILE:   c = wall_church
2782 KFEAT:  _ = altar_the_shining_one
2783 : interest_check(_G)
2784 MAP
2785   ....
2786  ..``....
2787  .`ww`...
2788  ..``..c..
2789 ......+cc..
2790 ..T..cc_cc.
2791  .....ccc..
2792    ....c..
2793      ....
2794 ENDMAP
2795
2796 NAME: nicolae_tso_swordbearing_angel
2797 TAGS: temple_overflow_the_shining_one uniq_altar_the_shining_one
2798 TAGS: temple_overflow_1 decor transparent
2799 DEPTH: D:2-
2800 COLOUR: . = yellow
2801 COLOUR: c = white
2802 FTILE: @._+ = floor_limestone
2803 TILE: c = wall_church
2804 KFEAT: _ = altar_the_shining_one
2805 : interest_check(_G)
2806 MAP
2807      xxxxx
2808     xxcccxx
2809     xcc.ccx
2810 xxxxxc._.cxxxxx
2811 xcccccc.ccccccx
2812 xc...........cx
2813 xcc....v....ccx
2814 xxcc..vvv..ccxx
2815  xxcc..v..ccxx
2816   xxcc.v.ccxx
2817    xxc.v.cxx
2818     xc.v.cx
2819     xc.v.cx
2820     xc...cx
2821     xcc+ccx
2822 ENDMAP
2823
2824
2825 NAME: nicolae_tso_carved_into_rock
2826 TAGS: temple_overflow_the_shining_one uniq_altar_the_shining_one
2827 TAGS: temple_overflow_1 transparent decor
2828 DEPTH: D:2-
2829 SUBST: X = xxx.
2830 COLOUR: ' = yellow
2831 COLOUR: c = white
2832 TILE: G = dngn_golden_statue
2833 TILE: c = wall_church
2834 FTILE: G'_ = floor_limestone
2835 KFEAT: _ = altar_the_shining_one
2836 : interest_check(_G)
2837 MAP
2838 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2839 xxxxxxxxxxxxxXXXXxxxxxxxxxxxxx
2840 xxxxxxxXXXXXX....XXXXXXxxxxxxx
2841 xxxxXXX................XXXxxxx
2842 xxXX......................XXxx
2843 xX......XxX........XxX......Xx
2844 X.....XXxxxxcG'''GcxxxXX.....X
2845 .....Xxxxxxxccc'cccxxxxxX.....
2846 @...Xxxxxxxxxc'''cxxxxxxxX...@
2847 ..Xxxxxxxxxxxc'_'cxxxxxxxxXX..
2848 XXxxxxxxxxxxxc'''cxxxxxxxxxxXX
2849 xxxxxxxxxxxxxcccccxxxxxxxxxxxx
2850 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2851 ENDMAP
2852
2853 NAME: nicolae_tso_besieged_by_evil
2854 TAGS: temple_overflow_the_shining_one uniq_altar_the_shining_one
2855 TAGS: temple_overflow_1 patrolling transparent no_monster_gen
2856 DEPTH: D:4-9
2857 SUBST: c = ccc' s:2 z:2, + = ++'
2858 NSUBST: ' = 2:s / 2:z / 2:sz'' / *:'
2859 COLOUR: 'sz = yellow / none w:5
2860 COLOUR: c = white
2861 TILE: c = wall_sandstone
2862 FTILE: +'_sz = floor_sandstone / none w:5
2863 KMONS: s = orc skeleton / kobold skeleton / goblin skeleton / hobgoblin zombie
2864 KMONS: z = orc zombie / kobold zombie / goblin zombie / hobgoblin zombie
2865 : if you.absdepth() <= 4 then
2866 KMONS: _ = crimson imp / white imp w:5
2867 : else
2868 KMONS: _ = crimson imp / white imp / shadow imp / iron imp / quasit
2869 : end
2870 KFEAT: _ = altar_the_shining_one
2871 MAP
2872 .............
2873 .............
2874 ..cccc.cccc..
2875 ..cccc+cccc..
2876 ..cc'''''cc..
2877 ..cc'''''cc..
2878 ...+''_''+...
2879 ..cc'''''cc..
2880 ..cc'''''cc..
2881 ..cccc+cccc..
2882 ..cccc.cccc..
2883 .............
2884 .............
2885 ENDMAP
2886
2887 ### Multiple god overflow altars ###############################################
2888
2889 # These ones are multiple overflows to specific gods;
2890 # they get tags temple_overflow_N and temple_overflow_<god>.
2891
2892 NAME:    good_gods_temple_1
2893 DEPTH:   D:2-, Depths, Lair
2894 TAGS:    temple_overflow_3 temple_overflow_elyvilon
2895 TAGS:    temple_overflow_zin temple_overflow_the_shining_one
2896 TAGS:    no_monster_gen no_trap_gen uniq_good_god_temple
2897 MONS:    plant
2898 KFEAT:   D = altar_elyvilon
2899 KFEAT:   E = altar_zin
2900 KFEAT:   F = altar_the_shining_one
2901 SHUFFLE: DEF
2902 SUBST:   1 : GTV1
2903 SUBST:   X : GTt
2904 SUBST:   ? : t@
2905 : interest_check(_G)
2906 MAP
2907   ttttttt
2908  tt.....tt
2909 tt...E...tt
2910 tt.D...F.tt
2911 tt...1...tt
2912  tt.....tt
2913   tt...tt
2914    ?X@X?
2915 ENDMAP
2916
2917 NAME:    good_gods_mini_temple
2918 DEPTH:   D:2-, Depths, Lair
2919 TAGS:    temple_overflow_3 temple_overflow_elyvilon
2920 TAGS:    temple_overflow_zin temple_overflow_the_shining_one
2921 TAGS:    no_monster_gen no_trap_gen no_pool_fixup uniq_good_god_temple
2922 TAGS:    no_item_gen
2923 MONS:    plant
2924 KFEAT:   D = altar_elyvilon
2925 KFEAT:   E = altar_zin
2926 KFEAT:   F = altar_the_shining_one
2927 : if crawl.coinflip() then
2928 SHUFFLE: x" / t1 / wT / IJ
2929 : else
2930 SUBST:   " : ..x
2931 : end
2932 SUBST:   HI : x
2933 SUBST:   x : xcvb
2934 SUBST:   ' : .
2935 SHUFFLE: EG/'E
2936 SUBST:   J : G
2937 SHUFFLE: DEF
2938 : interest_check(_G)
2939 MAP
2940  xxxxx
2941 xxxGxxx
2942 xD.E.Fx
2943 xx+++xx
2944  ""@""
2945 ENDMAP
2946
2947 NAME:  grunt_temple_overflow_champion_of_chaos
2948 DEPTH: D:3-9
2949 TAGS:  temple_overflow_2 temple_overflow_makhleb temple_overflow_xom
2950 TAGS:  no_monster_gen
2951 MONS:  crimson imp ; dagger ego:chaos ident:type
2952 KFEAT: A = altar_makhleb
2953 KFEAT: B = altar_xom
2954 MAP
2955 xxxxx
2956 xA.Bx
2957 x.1.x
2958 x...x
2959 xx+xx
2960 ENDMAP
2961
2962 NAME:  grunt_temple_overflow_growth_and_decay
2963 DEPTH: D:2-9
2964 TAGS:  temple_overflow_2 temple_overflow_fedhas temple_overflow_kikubaaqudgha
2965 TAGS:  transparent
2966 KFEAT: A = altar_fedhas
2967 KFEAT: B = altar_kikubaaqudgha
2968 MONS:  plant / nothing
2969 MONS:  withered plant / nothing
2970 MAP
2971 xxxxx
2972 x111xx@@
2973 x1A111..xxx
2974 x11.....22xxxx
2975 xxxx11.....22x
2976    xxx..222B2x
2977       @@xx222x
2978          xxxxx
2979 ENDMAP
2980
2981 NAME:   grunt_temple_overflow_holy_war
2982 DEPTH:  D:2-9
2983 TAGS:   temple_overflow_2 temple_overflow_the_shining_one
2984 TAGS:   temple_overflow_yredelemnul transparent
2985 MONS:   angel, profane servitor
2986 FTILE:  A+_Kn1 = floor_limestone
2987 FTILE:  B-;LN2 = floor_crypt
2988 TILE:   c = wall_church
2989 TILE:   C = wall_catacombs
2990 KFEAT:  A = altar_the_shining_one
2991 KFEAT:  B = altar_yredelemnul
2992 KFEAT:  C = stone_wall
2993 KFEAT:  KL = floor
2994 KFEAT:  - = closed_door
2995 KFEAT:  N = clear_stone_wall
2996 KPROP:  12 = no_tele_into
2997 KMASK:  12 = opaque
2998 COLOUR: c = white
2999 COLOUR: C = magenta
3000 MARKER: K = lua:fog_machine {cloud_type = "blessed fire", \
3001                              pow_min = 10, pow_max = 10, delay = 10, \
3002                              size = 1, walk_dist = 0, spread_rate = 0, \
3003                              excl_rad = 0 }
3004 MARKER: L = lua:fog_machine {cloud_type = "foul pestilence", \
3005                              pow_min = 10, pow_max = 10, delay = 10, \
3006                              size = 1, walk_dist = 0, spread_rate = 0, \
3007                              excl_rad = 0 }
3008 MAP
3009 xxxxxxxxxxxx@xxxxxxxxxxxx
3010 xcccccccccc...CCCCCCCCCCx
3011 xcnnK_K_K_c...C;L;L;LNNCx
3012 xc1n_A____+...-;;;;B;N2Cx
3013 xcnnK_K_K_c...C;L;L;LNNCx
3014 xcccccccccc...CCCCCCCCCCx
3015 xxxxxxxxxxxx@xxxxxxxxxxxx
3016 ENDMAP
3017
3018 NAME:  grunt_temple_overflow_lords_of_destruction
3019 TAGS:  temple_overflow_2 temple_overflow_makhleb temple_overflow_vehumet
3020 DEPTH: D:3-9
3021 KFEAT: A = altar_makhleb
3022 KFEAT: B = altar_vehumet
3023 MONS:  crimson imp ; wand of flame charges:1
3024 MAP
3025  xxxxx
3026 xxA.Bxx
3027 x..1..x
3028 xx...xx
3029  xx.xx
3030   x+x
3031 ENDMAP
3032
3033 NAME:  grunt_temple_overflow_order_and_chaos_1
3034 DEPTH: D:2-9
3035 TAGS:  temple_overflow_2 temple_overflow_xom temple_overflow_zin transparent
3036 KPROP: _1 = no_tele_into
3037 KMASK: _1 = opaque
3038 KMASK: _1 = no_trap_gen
3039 KFEAT: A = altar_xom
3040 KFEAT: B = altar_zin
3041 FTILE: n_1 = floor_limestone
3042 MONS:  angel god:zin dbname:zin_angel perm_ench:confusion generate_awake / \
3043        angel god:zin dbname:zin_angel perm_ench:mute generate_awake w:1 / \
3044        angel god:zin dbname:zin_angel perm_ench:mad generate_awake w:1 / \
3045        angel god:zin dbname:zin_angel perm_ench:dumb generate_awake w:1
3046 MAP
3047  .......
3048 ....A....
3049 ..nnnnn..
3050 ..n___n..
3051 @.n_1_n.@
3052 ..n___n..
3053 ..nnnnn..
3054 ....B....
3055  .......
3056 ENDMAP
3057
3058 NAME:   grunt_temple_overflow_order_and_chaos_2
3059 DEPTH:  D:2-9
3060 TAGS:   temple_overflow_2 temple_overflow_makhleb temple_overflow_zin
3061 TAGS:   transparent
3062 KFEAT:  A = altar_makhleb
3063 KFEAT:  B = altar_zin
3064 MONS:   executioner / balrug / green death / cacodemon / blizzard demon
3065 MONS:   angel god:zin dbname:zin_angel
3066 SUBST:  ; = -_
3067 KPROP:  - = bloody / nothing
3068 KPROP:  12 = no_tele_into
3069 KMASK:  12 = opaque
3070 SUBST:  - = _L
3071 KFEAT:  L_ = floor
3072 KFEAT:  C = stone_wall
3073 KFEAT:  N = clear_stone_wall
3074 SUBST:  X = CL
3075 FTILE:  _BN2 = floor_limestone
3076 TILE:   C = wall_church
3077 COLOUR: C = white
3078 MAP
3079     x.@.x
3080   xxx...xxx
3081 xxxXXX+CCCxxx
3082 xccc--;__CCCx
3083 xc1nA-;_BN2Cx
3084 xccc--;__CCCx
3085 xxxXXX+CCCxxx
3086   xxx...xxx
3087     x.@.x
3088 ENDMAP
3089
3090 # If the berserker scares you, use the escape hatch.
3091 NAME:   grunt_temple_overflow_bloody_war
3092 TAGS:   temple_overflow_2 temple_overflow_okawaru temple_overflow_trog
3093 TAGS:   patrolling
3094 DEPTH:  D:4-9
3095 WEIGHT: 5
3096 KFEAT:  A = altar_okawaru
3097 KFEAT:  B = altar_trog
3098 KPROP:  . = bloody / nothing
3099 : if you.absdepth() < 8 then
3100 MONS:   gnoll ; club | spear | nothing . potion of berserk rage / \
3101         orc ; club | hand axe | short sword . \
3102               leather armour | nothing . potion of berserk rage
3103 : else
3104 MONS:   orc warrior ; club | hand axe | short sword . \
3105                       leather armour | ring mail . \
3106                       potion of berserk rage
3107 : end
3108 MAP
3109 xxxxxxx
3110 xxxxxxx
3111 xxA.Bxx
3112 xx.1.xx
3113 xx...xx
3114 xx...xx
3115 xx...xx
3116 xx...xx
3117 xxx+xxx
3118   .@<
3119 ENDMAP
3120
3121 NAME:    grunt_temple_overflow_magic_moments
3122 DEPTH:   D:2-9
3123 TAGS:    temple_overflow_3 temple_overflow_kikubaaqudgha
3124 TAGS:    temple_overflow_sif_muna temple_overflow_vehumet
3125 TAGS:    no_item_gen
3126 KFEAT:   A = altar_kikubaaqudgha
3127 KFEAT:   B = altar_sif_muna
3128 KFEAT:   C = altar_vehumet
3129 ITEM:    randbook owner:Kikubaaqudgha disc:necromancy spells:pain \
3130          numspells:1 / \
3131          randbook owner:Kikubaaqudgha disc:necromancy spells:animate_skeleton \
3132          numspells:1
3133 # You already got a direct damage spell by looting the other gods' altars.
3134 ITEM:    randbook owner:Sif_Muna disc:hexes numspells:1 slevels:1 / \
3135          randbook owner:Sif_Muna disc:charms numspells:1 slevels:1 / \
3136          randbook owner:Sif_Muna disc:transmutation numspells:1 slevels:1 / \
3137          randbook owner:Sif_Muna disc:summoning numspells:1 slevels:1 / \
3138          randbook owner:Sif_Muna disc:translocation numspells:1 slevels:1
3139 ITEM:    randbook owner:Vehumet disc:conjuration spells:magic_dart numspells:1
3140 SHUFFLE: AdB"C` / A'BeC` / A'B"Cf
3141 MAP
3142      xxxxx
3143     xx.B.xx
3144   xxxG.".Gxxx
3145  xxGxx...xxGxx
3146  x...xx.xx...x
3147  xAd.......`Cx
3148  x...x.U.x...x
3149  xGxx...xxGxx
3150   xxx  @  xxx
3151 ENDMAP
3152
3153 # This doesn't place multiple gods, but it can place one of two distinct
3154 # gods.
3155 NAME:  lightli_temple_of_fire
3156 TAGS:  temple_overflow_1 temple_overflow_trog temple_overflow_makhleb
3157 DEPTH: D:2-9
3158 KPROP: Y = no_tele_into
3159 KMASK: Y = no_monster_gen
3160 {{
3161   local params = dgn.map_parameters()
3162   if params ~= nil then
3163     local tag = unpack(params)
3164     if tag ~= nil then
3165       if string.find(tag, "trog") ~= nil then
3166         kfeat('_ = altar_trog')
3167       elseif string.find(tag, "makhleb") ~= nil then
3168         kfeat('_ = altar_makhleb')
3169       else
3170         kfeat('_ = altar_trog / altar_makhleb')
3171       end
3172     else
3173       kfeat('_ = altar_trog / altar_makhleb')
3174     end
3175   else
3176     kfeat('_ = altar_trog / altar_makhleb')
3177   end
3178 }}
3179 MAP
3180 llcccccc
3181 lccYcYccc
3182 lclllllcc
3183 lcl...lcc
3184 lcl...lYc
3185 @+.._.lcc
3186 lcl...lYc
3187 lcl...lcc
3188 lclllllcc
3189 lccYcYccc
3190 llcccccc
3191 ENDMAP
3192
3193 NAME:    grunt_temple_overflow_opulence
3194 DEPTH:   D:2-9
3195 TAGS:    temple_overflow_2 temple_overflow_gozag temple_overflow_nemelex_xobeh
3196 TAGS:    transparent
3197 SHUFFLE: GU, _O
3198 KFEAT:   _ = altar_gozag
3199 KFEAT:   O = altar_nemelex_xobeh
3200 TILE:    G = dngn_golden_statue
3201 FTILE:   ._GOU+ = floor_limestone
3202 RTILE:   x = wall_sandstone
3203 COLOUR:  xG = yellow
3204 : set_feature_name("granite_statue", "golden statue")
3205 MAP
3206   xxxxxxx
3207  xx.....xx
3208 xx...U...xx
3209 x.........x
3210 x.G._.O.G.x
3211 x.........x
3212 xx...U...xx
3213  xx.....xx
3214   xxx+xxx
3215 ENDMAP
3216
3217 NAME:   grunt_temple_overflow_gold_and_silver
3218 DEPTH:  D:2-9
3219 TAGS:   temple_overflow_2 temple_overflow_gozag temple_overflow_zin
3220 TAGS:   transparent
3221 KITEM:  $ = gold q:1 / gold q:2
3222 KFEAT:  _ = altar_gozag
3223 KFEAT:  O = altar_zin
3224 TILE:   G = dngn_golden_statue
3225 COLOUR: G = yellow
3226 TILE:   v = dngn_metal_wall_white
3227 COLOUR: v = white
3228 FTILE:  +._O$ = floor_limestone
3229 : set_feature_name("granite_statue", "golden statue")
3230 : set_feature_name("metal_wall", "silver wall")
3231 MAP
3232 vvvvvvvvv
3233 v..$$$..v
3234 v._.$.O.v
3235 v.......v
3236 vv.....vv
3237  vvv+vvv
3238 ENDMAP
3239
3240 NAME:   grunt_temple_overflow_forces_of_nature
3241 DEPTH:  D:2-9
3242 TAGS:   temple_overflow_2 temple_overflow_fedhas temple_overflow_qazlal
3243 TAGS:   transparent
3244 MONS:   fungus / plant / bush
3245 SUBST:  2 = 1.
3246 KFEAT:  _ = altar_fedhas
3247 KFEAT:  O = altar_qazlal
3248 KPROP:  12Ll = no_tele_into
3249 SUBST:  L = ll^.
3250 SUBST:  l = cll.
3251 KFEAT:  ^ = shaft trap
3252 MAP
3253  222.@.LLL
3254 21112.LlllL
3255 21_.....OlL
3256 21112.LlllL
3257  222.@.LLL
3258 ENDMAP
3259
3260 NAME:   kennysheep_ying_yang
3261 DEPTH:  D
3262 TAGS:   temple_overflow_2 temple_overflow_elyvilon temple_overflow_yredelemnul
3263 TAGS:   no_monster_gen no_trap_gen no_pool_fixup patrolling transparent
3264 KFEAT:  A = altar_elyvilon
3265 KFEAT:  B = altar_yredelemnul
3266 KFEAT:  D = tree
3267 KFEAT:  '"wW = floor
3268 TILE:   D = dngn_tree_dead
3269 FTILE:  .t1ATW = floor_grass
3270 COLOUR: tW = white
3271 FTILE:  'D2BVw = floor_crypt
3272 COLOUR: Dw = black
3273 : interest_check(_G)
3274 MAP
3275        """""""
3276      """""ccc"""
3277   """""""''Dccc"""
3278   "ccccccD''DDccc"
3279  ""ctttttcD'''DDc""
3280  "cct....tcD'''Dcc"
3281  "ct.www.TtD''''Dc""
3282 ""ct.wwwA.tD''''Dcc"
3283 "cct.www.TtD'''''Dc"
3284 "ct......tcD'''''Dc"
3285 "ct.....tccD'''''Dc"
3286 "ct.....tcD''''''Dc"
3287 "ct.....tDV'WWW'DDc"
3288 "cct....tD'BWWW'Dcc"
3289 ""ct....tDV'WWW'Dc""
3290  "cct...tcD''''Dcc"
3291  ""ctt...tcDDDDDc""
3292   "ccctt..tcccccc"
3293   """ccct.."""""""
3294     """ccc"""""
3295       """""""
3296 ENDMAP
3297
3298 NAME:    palyth_temple_overflow_mages
3299 DEPTH:   D:6-9
3300 TAGS:    temple_overflow_3 temple_overflow_sif_muna
3301 TAGS:    temple_overflow_kikubaaqudgha temple_overflow_vehumet
3302 TAGS:    no_item_gen no_monster_gen patrolling
3303 # 3/5 chance for one altar to have a low-level randbook and extra orc wizards.
3304 KMONS:   xyzXYZ~ = orc wizard
3305 KFEAT:   xX = altar_sif_muna
3306 KFEAT:   yY = altar_kikubaaqudgha
3307 KFEAT:   zZ = altar_vehumet
3308 KITEM:   X = randbook owner:Sif_Muna disc:summoning numspells:1 slevels:1
3309 KITEM:   Y = randbook owner:Kikubaaqudgha disc:necromancy numspells:1 slevels:1
3310 KITEM:   Z = randbook owner:Vehumet disc:conjuration numspells:1 slevels:1
3311 SHUFFLE: x'y"z` / x'y"z` / X~y"z` / x'Y~z` / x'y"Z~
3312 SUBST:   '"` = ., ~ = ~.
3313 MAP
3314 ccccccccccccc
3315 c'x'c"y"c`z`c
3316 c'''c"""c```c
3317 cc+ccc+ccc+cc
3318 c...........c
3319 c....T.T....c
3320 cc....T....cc
3321  cc..T.T..cc
3322   cc.....cc
3323    ccc@ccc
3324 ENDMAP
3325
3326 # Xom seems to not think much of Hepliaklqana's ancestral focus,
3327 # and mocks the species roots of incoming pilgrims.
3328 # This will probably go over most players' heads, but it's neat anyway -- PF
3329 NAME:    regret_index_temple_of_mockery
3330 TAGS:    temple_overflow_2 temple_overflow_xom temple_overflow_hepliaklqana
3331 DEPTH:   D:2-9
3332 # we place the monster on demand via a marker rather than in the builder because
3333 # the dependency on the player species otherwise can affect seed stability
3334 {{
3335     local los_marker = TriggerableFunction:new {
3336       func="callback.do_species_mock",
3337       repeated=true,
3338       props = {mock_location=1}
3339     }
3340     los_marker:add_triggerer(DgnTriggerer:new {
3341       type="player_los"})
3342
3343     lua_marker('1', los_marker)
3344 }}
3345 KMONS:   2 = spectral ugly thing
3346 KFEAT:   A = altar_xom
3347 KFEAT:   B = altar_hepliaklqana
3348 SHUFFLE: AB
3349 SUBST:   G = G...
3350 KPROP:   12' = no_tele_into
3351 KMASK:   12' = no_item_gen
3352 KMASK:   12' = no_trap_gen
3353 KMASK:   ' = no_monster_gen
3354 # TODO: this fog machine doesn't do much, is it supposed to spread?
3355 MARKER:  2 = lua:fog_machine { cloud_type = "thin mist", \
3356              pow_min = 100, pow_max = 100, delay = 1, \
3357              size = 1, walk_dist = 0, start_clouds = 1 }
3358 MAP
3359 cccccc
3360 ccb'bccccc
3361 cb2n1bc.+.
3362 c'nnnnc.c.
3363 cb1nA...cc
3364 ccbn.G.bc
3365 cccc..Bcc
3366  c...bcc
3367  c+cccc
3368  c..c
3369 ENDMAP
3370
3371 NAME:   gammafunk_temple_of_torment
3372 DEPTH:  D
3373 WEIGHT: 2
3374 TAGS:   no_monster_gen no_trap_gen temple_overflow_2
3375 TAGS:   temple_overflow_kikubaaqudgha temple_overflow_yredelemnul
3376 : if you.depth() <= 4 then
3377 MONS: zombie / skeleton
3378 MONS: mummy / shadow imp / wight / necrophage / phantom
3379 KMONS: 3 = menkaure, necrophage / wight
3380 SUBST: 2 = 2---
3381 : elseif you.depth() <= 7 then
3382 MONS: zombie / skeleton / mummy / shadow imp / wight / necrophage / phantom
3383 MONS: wraith / vampire
3384 KMONS: 3 = menkaure, wraith / vampire
3385 SUBST: 2 = 12--
3386 : else
3387 MONS: mummy / wight / zombie / skeleton / phantom
3388 MONS: wraith / vampire / shadow / w:5 death knight / w:5 skeletal warrior
3389 MONS: flayed ghost / death knight
3390 NSUBST: 2 = 2 / 2-
3391 : end
3392 SUBST:  1 = 11-
3393 NSUBST: R = R / -
3394 KFEAT:  D = altar_kikubaaqudgha
3395 KFEAT:  E = altar_yredelemnul
3396 MARKER: P = lua:transp_loc("temple_of_torment_entry")
3397 MARKER: Q = lua:transp_dest_loc("temple_of_torment_entry")
3398 MARKER: R = lua:transp_loc("temple_of_torment_exit")
3399 MARKER: S = lua:transp_dest_loc("temple_of_torment_exit")
3400 TILE:   G = dngn_sarcophagus_pedestal_left
3401 TILE:   c = wall_tomb
3402 FTILE:  -QRVDE|*$123Gcn = floor_tomb
3403 COLOUR: G = yellow
3404 COLOUR: -QR|*$123 = brown
3405 : set_feature_name("granite_statue", "sarcophagus")
3406 MAP
3407  ...............
3408  .nnnnnnnnnnnnn.
3409  .nR----1----Rn.
3410  .n-2-------2*n.
3411  .n--ccc-ccc-$n.
3412  .n--cGc-cGc-Dn.
3413 ..n----------|n..
3414 @Pn1----Q---3YnS@
3415 ..n----------*n..
3416  .n--cGc-cGc-En.
3417  .n--ccc-ccc-$n.
3418  .n-2-------2|n.
3419  .nR----1----Rn.
3420  .nnnnnnnnnnnnn.
3421  ...............
3422 ENDMAP
3423
3424 #Hep and Dith chose the same way to attract worshippers
3425 NAME:   riverfiend_overflow_shadow_ancestor
3426 TAGS:   temple_overflow_2
3427 TAGS:   temple_overflow_hepliaklqana temple_overflow_dithmenos
3428 KPROP:  12- = no_tele_into
3429 KMASK:  12- = no_item_gen
3430 KMASK:  12- = no_monster_gen
3431 MONS:   ancestor, shadow
3432 KFEAT:  A = altar_hepliaklqana
3433 KFEAT:  B = altar_dithmenos
3434 KFEAT:  DE = stone_wall
3435 MARKER: 1 = lua:fog_machine { cloud_type = "thin mist", pow_min = 100, pow_max = 100, \
3436                             delay = 100, size = 1, start_clouds = 1 , spread_rate = 50 }
3437 MARKER: 2 = lua:fog_machine { cloud_type = "black smoke", pow_min = 100, pow_max = 100, \
3438                             delay = 100, size = 1, start_clouds = 1 , spread_rate = 50 }
3439 TILE:   D = wall_stone_smooth
3440 TILE:   E = wall_stone_dark
3441 MAP
3442    ccccc
3443  DDD...cEE
3444 DD-n....nEE
3445 D-1n....n-EE
3446 D--nA..Bn2-E
3447 DD-n....n--E
3448  DDD....n-EE
3449    cc@@cEEE
3450 ENDMAP
3451
3452 ### Variable overflow altars ##################################################
3453
3454 # To make an overflow temple for N altars, give it the tag
3455 # "temple_overflow_generic_N".
3456
3457 # The boring standard.
3458 # B places the altar to a guaranteed god.
3459 NAME:   overflow_temple_1_default
3460 TAGS:   temple_overflow_generic_1 allow_dup transparent
3461 MAP
3462 B
3463 ENDMAP
3464
3465 # General overflow vault, can be used for all gods.
3466 NAME:     general_overflow_altar
3467 DEPTH:    D:2-
3468 WEIGHT:   10
3469 TAGS:     no_monster_gen no_pool_fixup temple_overflow_generic_1
3470 TAGS:     transparent
3471 SHUFFLE:  xXY / xXY / xXY / abc
3472 SHUFFLE:  XY
3473 SUBST:    X=+, Y=x, a=w, b=w, c=w
3474 SHUFFLE:  ABCD
3475 SUBST:    A=>, C=.GTU, D=.
3476 SHUFFLE:  wll
3477 : interest_check(_G)
3478 MAP
3479 ........
3480 .xXYYxx.
3481 .xwwwwx.
3482 .xwABwx.
3483 .xwCDwx.
3484 .xwwwwx.
3485 .xxxxxx.
3486 ........
3487 ENDMAP
3488
3489 NAME:    old_standard_altar
3490 DEPTH:   D, Depths
3491 TAGS:    transparent allow_dup decor temple_overflow_generic_1
3492 SHUFFLE: cvxxxx
3493 : altar_check(_G)
3494 MAP
3495 ...........
3496 .xxxx.xxxx.
3497 .xx.....xx.
3498 .x.......x.
3499 .x.......x.
3500 .....C.....
3501 .x.......x.
3502 .x.......x.
3503 .xx.....xx.
3504 .xxxx.xxxx.
3505 ...........
3506 ENDMAP
3507
3508 NAME:    lemuel_round_altar
3509 DEPTH:   D, Depths
3510 TAGS:    allow_dup transparent decor temple_overflow_generic_1
3511 SUBST:   X:x@
3512 SHUFFLE: cvxx
3513 : altar_check(_G)
3514 MAP
3515    xxXxx
3516   xx...xx
3517  xx.....xx
3518  x.......x
3519  X...C...@
3520  x.......x
3521  xx.....xx
3522   xx...xx
3523    xxXxx
3524 ENDMAP
3525
3526 NAME:  lemuel_crystal_altar
3527 DEPTH: D, Depths
3528 TAGS:  transparent allow_dup decor temple_overflow_generic_1
3529 : altar_check(_G)
3530 MAP
3531 b@b
3532 @C@
3533 b@b
3534 ENDMAP
3535
3536 NAME:    lemuel_doored_altar
3537 TAGS:    transparent decor temple_overflow_generic_1
3538 DEPTH:   D:1-, Vaults, Lair, Elf, Crypt
3539 SHUFFLE: XY
3540 SUBST:   X = .
3541 SUBST:   Y = +
3542 : altar_check(_G)
3543 MAP
3544 .........
3545 .xxxmxxx.
3546 .xxxmxxx.
3547 .xxxmxxx.
3548 .X.YCY.X.
3549 .xxxYxxx.
3550 .xxx.xxx.
3551 .xxxXxxx.
3552 .........
3553 ENDMAP
3554
3555 NAME:   lemuel_coloured_pillars_altar
3556 TAGS:   no_rotate decor temple_overflow_generic_1
3557 DEPTH:  D:2-, Vaults, Elf
3558 COLOUR: c = blue / yellow / red / cyan
3559 : altar_check(_G)
3560 MAP
3561 xxxxxxxxxxxxxxxxxxxx
3562 ...................x
3563 c...c...c...c...c..x
3564 @.................Cx
3565 c...c...c...c...c..x
3566 ...................x
3567 xxxxxxxxxxxxxxxxxxxx
3568 ENDMAP
3569
3570 NAME: nicolae_overflow_crystal_walls
3571 TAGS: temple_overflow_generic_1 transparent
3572 : interest_check(_G)
3573 DEPTH: D:2-
3574 SHUFFLE: ACDE, FGHI
3575 SUBST: A : b, C : b., D : b., E : b., F : b, G : b., H : b., I : b.
3576 MAP
3577 AAAAA@FFFFF
3578 ACCCC.GGGGF
3579 ACDDD.HHHGF
3580 ACDEE.IIHGF
3581 ACDE...IHGF
3582 @....B....@
3583 FGHI...EDCA
3584 FGHII.EEDCA
3585 FGHHH.DDDCA
3586 FGGGG.CCCCA
3587 FFFFF@AAAAA
3588 ENDMAP
3589
3590 NAME:    marbit_many_paths
3591 TAGS:    temple_overflow_generic_1
3592 : interest_check(_G)
3593 DEPTH:   D:2-
3594 SHUFFLE: pqr / bqr / pbr / pqb / bbr / pbb / bqb
3595 SUBST:   pqr = .
3596 NSUBST:  . = 1:0 / *:.
3597 FTILE:   .C0 = FLOOR_PEBBLE_GREEN
3598 MAP
3599  xxxxxxxxx
3600 xx..qxq..xx
3601 xpqrpqrpqrxx
3602 @qrpqrpqrpBx
3603 xrpqrpqrpqxx
3604 xx..pxp..xx
3605  xxxxxxxxx
3606 ENDMAP
3607
3608 NAME:   amethyst_overflow_temple_binary
3609 TAGS:   temple_overflow_generic_2
3610 SUBST:  p : .:15 c:10 g:3 n:2
3611 SUBST:  G : G:20 T:10 U:1 .:1
3612 SUBST:  g : t:10 T:10 .:5 w:5 U:1 l:1
3613 SUBST:  c : c:20 x:5 v:1 b:1
3614 SUBST:  + : +:10 .:10 A:5
3615 KMASK:  TUw = no_monster_gen
3616 MAP
3617   ccc     ccc
3618  ccGcccccccGcc
3619 cc...ccgcc...cc
3620 cB.p..+.+..p.Bc
3621 cc...cc.cc...cc
3622  ccGccg.gccGcc
3623   ccccc+ccccc
3624        @
3625 ENDMAP
3626
3627 NAME:   gammafunk_temple_overflow_statue
3628 TAGS:   temple_overflow_generic_2
3629 SUBST:  g : t:10 T:10 .:5 w:5 l:5 U:1
3630 KMASK:  wlTU = no_monster_gen
3631 MAP
3632   ccc
3633 cccGccc
3634 c.B.B.c
3635 cc...cc
3636 ccg.gcc
3637  cc+cc
3638    @
3639 ENDMAP
3640
3641 NAME:   gammafunk_temple_overflow_pools
3642 TAGS:   temple_overflow_generic_2
3643 SUBST:  G : G:20 T:10 U:1 .:1
3644 KMASK:  TU = no_monster_gen
3645 MAP
3646  ccccc ccccc
3647 cc.B.ccc.B.cc
3648 c.....G.....c
3649 c..T.....T..c
3650 cc.........cc
3651  ccc.....ccc
3652    ccc+ccc
3653       @
3654 ENDMAP
3655
3656 NAME:    gammafunk_temple_overflow_elements
3657 TAGS:    temple_overflow_generic_2
3658 SHUFFLE: lw
3659 KMASK:   lw = no_monster_gen
3660 MAP
3661  ccccccc
3662 ccB...Bcc
3663 cclc+cwcc
3664  ccc@ccc
3665 ENDMAP
3666
3667 NAME:    gammafunk_temple_overflow_wave
3668 TAGS:    temple_overflow_generic_2
3669 SUBST:   p = G:20 c:20 1 w:5 l:5
3670 MONS:    plant / bush
3671 KMASK:   Twl = no_monster_gen
3672 MAP
3673    ccccc
3674  cccpcc
3675 ccTB.+@
3676 ccTB.+@
3677  cccpcc
3678    ccccc
3679 ENDMAP
3680
3681 NAME: minmay_overflow_temple_star_quad
3682 TAGS: temple_overflow_generic_3
3683 MAP
3684            c
3685            c
3686           ccc
3687           cBc
3688          cc.cc
3689          c...c
3690         cc...cc
3691         c.....c
3692       ccc.....ccc
3693     ccc....G....ccc
3694   ccc......c......ccc
3695 cccB.....GcccG.....Bccc
3696   ccc......c......ccc
3697     ccc....G....ccc
3698       ccc.....ccc
3699         c.....c
3700         cc...cc
3701          c...c
3702          cc.cc
3703           c.c
3704           c+c
3705            @
3706 ENDMAP
3707
3708 NAME:   gammafunk_temple_overflow_forgotten
3709 TAGS:   temple_overflow_generic_3
3710 SUBST:  p = x:50 . 1, T = V:30 T, + = +:20 .
3711 NSUBST: _ = 3:1 / *:_
3712 MONS:   plant / bush
3713 KMASK:  T = no_monster_gen
3714 TILE:   x = wall_brick_brown_vines
3715 FTILE:  _+T12B = floor_pebble_yellow
3716 MAP
3717  ppppppp
3718 pxB_B_Bxp
3719 p_______p
3720 p___T___p
3721 px_____xp
3722  xxx+xxx
3723     @
3724 ENDMAP
3725
3726 NAME:   grunt_temple_overflow_diamond
3727 TAGS:   temple_overflow_generic_3
3728 SUBST:  T = T G V:1 U:1 t:1
3729 MAP
3730       c
3731      ccc
3732     ccBcc
3733    cc...cc
3734   cccc+cccc
3735  cc.c...c.cc
3736 ccB.+.T.+.Bcc
3737  cc.c...c.cc
3738   cccc+cccc
3739    cc...cc
3740     cc.cc
3741      c.c
3742       @
3743 ENDMAP
3744
3745 NAME:   gammafunk_temple_overflow_claw
3746 TAGS:   temple_overflow_generic_3 transparent
3747 SUBST:  l : lw
3748 KMASK:  lw = no_monster_gen
3749 MAP
3750   ...........
3751  ..cc..c..cc..
3752 ..cc..ccc..cc..
3753 .ccc..ccc..ccc.
3754 .ccc.ccccc.ccc.
3755 .ccccccGcccccc.
3756 .ccGB..B..BGcc.
3757 ..ccl.....lcc..
3758 ..ccll...llcc..
3759  ..ccll.llcc..
3760   ..ccl.lcc..
3761    ..cc+cc..
3762     ...@...
3763 ENDMAP
3764
3765 NAME:   grunt_temple_overflow_cloverleaf
3766 TAGS:   temple_overflow_generic_4 transparent
3767 SUBST:  T : T U:1 V:1
3768 MAP
3769  ccccc.@.ccccc
3770 cc...cc.cc...cc
3771 c.G.G.c.c.G.G.c
3772 c..B..c.c..B..c
3773 c.G...c.c...G.c
3774 cc...+c.c+...cc
3775 .ccccc...ccccc.
3776 @......T......@
3777 .ccccc...ccccc.
3778 cc...+c.c+...cc
3779 c.G...c.c...G.c
3780 c..B..c.c..B..c
3781 c.G.G.c.c.G.G.c
3782 cc...cc.cc...cc
3783  ccccc.@.ccccc
3784 ENDMAP
3785
3786 NAME: nicolae_overflow_quartered_altars
3787 TAGS: temple_overflow_generic_4
3788 SHUFFLE: fgh/ijk, pq/rs
3789 SUBST: pqi = ., rk = c, s = +, z : cm, j : GTt
3790 CLEAR: fgh
3791 MAP
3792   ffghgff
3793  @.ccccc.@
3794 f.qp.c.pq.f
3795 fcp..z..pcf
3796 gc..BcB..cg
3797 hcczccczcch
3798 gc..BcB..cg
3799 fcp..z..pcf
3800 f.qp.c.pq.f
3801  @.ccccc.@
3802   ffghgff
3803 ENDMAP
3804
3805 NAME:   minmay_overflow_temple_star_hex
3806 TAGS:   temple_overflow_generic_5
3807 KMASK:  T = no_monster_gen
3808 MAP
3809           ccc
3810          ccBcc
3811         cc...cc
3812        cc.....cc
3813 cccccccc...G...cccccccc
3814 cB...................Bc
3815 ccc......G...G......ccc
3816   ccc.............ccc
3817     ccc....T....ccc
3818   ccc.............ccc
3819 ccc......G...G......ccc
3820 cB...................Bc
3821 cccccccc...G...cccccccc
3822        cc.....cc
3823         cc...cc
3824          cc.cc
3825           c+c
3826           ...
3827           .@.
3828 ENDMAP
3829
3830 NAME:   minmay_overflow_temple_hex
3831 TAGS:   temple_overflow_generic_6
3832 MAP
3833    cccccccccc
3834    cB......Bc
3835   cc........cc
3836   c...c..c...c
3837  cc..........cc
3838  c...c....c...c
3839 cc............cc
3840 cB..c......c..Bc
3841 cc............cc
3842  c...c....c...c
3843  cc..........cc
3844   c...c..c...c
3845   cc........cc
3846    cB......Bc
3847    cccc++cccc
3848       ....
3849       ....
3850       .@@.
3851 ENDMAP
3852
3853 NAME:  grunt_temple_overflow_octagram
3854 TAGS:  temple_overflow_generic_7
3855 SUBST: T : T G t V:1
3856 MAP
3857           c
3858          ccc
3859         ccBcc
3860    cccccc...cccccc
3861    cB..ccc+ccc..Bc
3862    c..cc.....cc..c
3863    c.c+.......+c.c
3864    ccc....T....ccc
3865   ccc...T...T...ccc
3866  cc.c...........c.cc
3867 ccB.+..T..T..T..+.Bcc
3868  cc.c...........c.cc
3869   ccc...T...T...ccc
3870    ccc....T....ccc
3871    c.c+.......+c.c
3872    c..cc.....cc..c
3873    cB..ccc+ccc..Bc
3874    cccccc...cccccc
3875         cc.cc
3876          c.c
3877           @
3878 ENDMAP
3879
3880 NAME:    grunt_temple_overflow_open
3881 TAGS:    temple_overflow_generic_8 temple_overflow_generic_7
3882 TAGS:    temple_overflow_generic_6 temple_overflow_generic_5
3883 TAGS:    temple_overflow_generic_4 temple_overflow_generic_3
3884 TAGS:    temple_overflow_generic_2
3885 TAGS:    transparent
3886 SHUFFLE: defghijk / efghijkd
3887 {{
3888   local altarcount = 1
3889   if is_validating() then
3890     altarcount = 8
3891   else
3892     altarcount = get_overflow_altar_count(_G)
3893   end
3894   if altarcount == "1" then
3895     subst("d = B")
3896     subst("efghijk = .")
3897   elseif altarcount == "2" then
3898     subst("dh = B")
3899     subst("efgijk = .")
3900   elseif altarcount == "3" then
3901     subst("dgi = B")
3902     subst("efhjk = .")
3903   elseif altarcount == "4" then
3904     subst("dfhj = B")
3905     subst("egik = .")
3906   elseif altarcount == "5" then
3907     subst("dfgij = B")
3908     subst("ehk = .")
3909   elseif altarcount == "6" then
3910     subst("defhij = B")
3911     subst("gk = .")
3912   elseif altarcount == "7" then
3913     subst("defghij = B")
3914     subst("k = .")
3915   else
3916     subst("defghijk = B")
3917   end
3918 }}
3919 SUBST: G = G T V:1 U:1 t:1
3920 MAP
3921    ...
3922  ...d...
3923  .k...e.
3924 .........
3925 .j..G..f.
3926 .........
3927  .i...g.
3928  ...h...
3929    ...
3930 ENDMAP
3931
3932 # Formerly minivault_3; resurrected after being removed way back in late 2009.
3933 NAME:  minitemple
3934 TAGS:  temple_overflow_generic_14 temple_overflow_generic_13
3935 TAGS:  temple_overflow_generic_12 temple_overflow_generic_11
3936 TAGS:  temple_overflow_generic_10 temple_overflow_generic_9
3937 TAGS:  temple_overflow_generic_8 temple_overflow_generic_7
3938 TAGS:  temple_overflow_generic_6 temple_overflow_generic_5
3939 TAGS:  temple_overflow_generic_4 temple_overflow_generic_3
3940 TAGS:  temple_overflow_generic_2
3941 # The original vault had allow_dup; I think that's overkill.
3942 {{
3943   local altarcount = 1
3944   if is_validating() then
3945     altarcount = 14
3946   else
3947     altarcount = get_overflow_altar_count(_G)
3948   end
3949   nsubst("B : " .. altarcount .. ":B / *:x")
3950 }}
3951 SUBST: x = .:50 c:50 G T t:1 V:1 U:1
3952 MAP
3953 cccccccccccc
3954 cBcBcBcBcBcc
3955 G.c.c.c.c.Bc
3956 @.........Bc
3957 @.........Bc
3958 G.c.c.c.c.Bc
3959 cBcBcBcBcBcc
3960 cccccccccccc
3961 ENDMAP
3962
3963 NAME: nicolae_overflow_hidden_temple
3964 TAGS: temple_overflow_generic_5 temple_overflow_generic_4 temple_overflow_generic_3 \
3965       temple_overflow_generic_2 temple_overflow_generic_1 no_monster_gen
3966 {{
3967   local altarcount = 1
3968   if is_validating() then
3969     altarcount = 5
3970   else
3971     altarcount = get_overflow_altar_count(_G)
3972   end
3973   if altarcount == "1" then
3974     subst("c = B")
3975     subst("abde = G")
3976   elseif altarcount == "2" then
3977     subst("bd = B")
3978     subst("ace = G")
3979   elseif altarcount == "3" then
3980     shuffle("ae/bd")
3981     subst("cbd = B")
3982     subst("ae = G")
3983   elseif altarcount == "4" then
3984     subst("abde = B")
3985     subst("c = G")
3986   else
3987     subst("abcde = B")
3988   end
3989 }}
3990 SUBST: } = })]
3991 MAP
3992  xxxxxxxxxxxxx
3993  xxxxaxxxbxxxx
3994  xxG...G...Gxx
3995  mm.........mm
3996 @m}.........cm@
3997  mm.........mm
3998  xxG...G...Gxx
3999  xxxxexxxdxxxx
4000  xxxxxxxxxxxxx
4001 ENDMAP
4002
4003 NAME:   chequers_temple_overflow_statue_of_worship
4004 TAGS:   temple_overflow_generic_2 temple_overflow_generic_3
4005 TAGS:   temple_overflow_generic_4 transparent
4006 {{
4007   local altarcount = get_overflow_altar_count(_G)
4008   if altarcount == nil then
4009     altarcount = "2"
4010   end
4011   if altarcount == "2" then
4012     subst("C = .")
4013   else
4014     subst("C = B")
4015   end
4016   nsubst("B = " .. altarcount .. ":B / *:.")
4017 }}
4018 MAP
4019 .....
4020 ..C..
4021 .BGB.
4022 ..C..
4023 .....
4024 ENDMAP
4025
4026 NAME:  chequers_temple_overflow_minitemple
4027 TAGS:  temple_overflow_generic_5 temple_overflow_generic_4
4028 TAGS:  temple_overflow_generic_3
4029 {{
4030   local altarcount = 5
4031   if not is_validating() then
4032     altarcount = get_overflow_altar_count(_G)
4033   end
4034   nsubst("O = " .. altarcount .. ":B / *:l")
4035 }}
4036 KFEAT: l = altar_ecumenical
4037 MAP
4038         @
4039        c+c
4040    ccccc.ccccc
4041   cc.........cc
4042 ccc..ccccccc..ccc
4043 cO..cccO.Occc..Oc
4044 ccc..cc...cc..ccc
4045   cc.........cc
4046    cccc...cccc
4047       ccOcc
4048        ccc
4049 ENDMAP
4050
4051 NAME: gammafunk_temple_overflow_arena
4052 TAGS: temple_overflow_generic_3 temple_overflow_generic_2
4053 TAGS: temple_overflow_generic_1 no_monster_gen no_trap_gen no_tele_into
4054 WEIGHT: 1
4055 {{
4056   local altarcount = 3
4057   if not is_validating() then
4058     altarcount = tonumber(get_overflow_altar_count(_G))
4059   end
4060   if altarcount == 1 then
4061     subst("h = a")
4062   elseif altarcount == 2 then
4063     subst("B = a")
4064   end
4065 }}
4066 SUBST: a = |*%$ .:80, 0 = 09., h = B, i : x., j : x., x : bcvx
4067 NSUBST: R = R / .
4068 MARKER: P = lua:transp_loc("temple_overflow_arena_entry")
4069 MARKER: Q = lua:transp_dest_loc("temple_overflow_arena_entry")
4070 MARKER: R = lua:transp_loc("temple_overflow_arena_exit")
4071 MARKER: S = lua:transp_dest_loc("temple_overflow_arena_exit")
4072 MAP
4073   ...........
4074  ..nnnnnnnnn..
4075  .nn0..R...nn.
4076  .nG.ji0ij.Gn.
4077  .n..ij.ji%$n.
4078 ..n......8*hn..
4079 @Pn..Q....$BnS@
4080 ..n......9*hn..
4081  .n..ij.ji%$n.
4082  .nG.ji0ij.Gn.
4083  .nn0..R...nn.
4084  ..nnnnnnnnn..
4085   ...........
4086 ENDMAP