diff options
Diffstat (limited to 'crawl-ref/source/dat/uniques.des')
-rw-r--r-- | crawl-ref/source/dat/uniques.des | 602 |
1 files changed, 602 insertions, 0 deletions
diff --git a/crawl-ref/source/dat/uniques.des b/crawl-ref/source/dat/uniques.des new file mode 100644 index 0000000000..fe06de9d21 --- /dev/null +++ b/crawl-ref/source/dat/uniques.des @@ -0,0 +1,602 @@ +################################################################################ +# uniques.des: This is where unique placement should be defined. You should use +# the format set in the example vault. +################################################################################ +# Most of this should be self-explanatory. Vaults tagged as "place_unique" are +# assumed to place only one unique. If the unique is in a band, specify "unique +# band", (see uniq_duvessa, etc). Names of vault don't matter, except for the +# Boris vault. +# +# If you want to weight uniques different for different, the different vaults +# should all add up to 10 (the current default weight for uniques), you can use +# multiple vaults that are tagged "uniq_<name>", with different weights for each +# of the vaults. +# +# As a final caveat, you.branches[you.where_are_you].has_uniques is still checked +# before vaults are even considered; unique vaults with depths that could take +# in Lair should be specified !Lair (unless you want them in lair). +# +# You can define DEBUG_UNIQUE_PLACEMENT and get a per-level unique generation +# report in "unique_placement.log" in debug mode. +# +################################################################################ +# +# Dummy, weight will need eventual adjustment. +NAME: uniq_dummy +DEPTH: 1-50 +WEIGHT: 15 +TAGS: place_unique dummy +MAP +. +ENDMAP + +################################################################################ +# General dungeon uniques: +################################################################################ +NAME: uniq_terence +DEPTH: 1-3 +TAGS: place_unique +MONS: Terence +MAP +1 +ENDMAP + +NAME: uniq_jessica +DEPTH: 1-3 +TAGS: place_unique +MONS: Jessica +MAP +1 +ENDMAP + +NAME: uniq_iyjb +DEPTH: 1-3, 4-7 +TAGS: place_unique +MONS: Ijyb +MAP +1 +ENDMAP + +NAME: uniq_sigmund +DEPTH: 1-3, 4-7 +TAGS: place_unique +MONS: Sigmund +MAP +1 +ENDMAP + +NAME: uniq_blork_the_orc +DEPTH: 4-7, 8-9, !Lair +TAGS: place_unique +MONS: Blork the orc +MAP +1 +ENDMAP + +NAME: uniq_edmund +DEPTH: 4-7, 8-9, !Lair +MONS: Edmund +MAP +1 +ENDMAP + +NAME: uniq_prince_ribbit +DEPTH: 4-7, 8-9, Lair:1-3 +TAGS: place_unique +MONS: Prince Ribbit +MAP +1 +ENDMAP + +NAME: uniq_purgy +DEPTH: 4-7 +TAGS: place_unique +MONS: Purgy +MAP +1 +ENDMAP + +NAME: uniq_menkaure +DEPTH: 4-7 +TAGS: place_unique +MONS: Menkaure +MAP +1 +ENDMAP + +NAME: uniq_duvessa +DEPTH: 4-7, 8-9, !Lair +TAGS: place_unique +MONS: Duvessa band +MAP +1 +ENDMAP + +NAME: uniq_pikel +DEPTH: 4-7, 8-9, !Lair, !Orc +TAGS: place_unique +MONS: Pikel band +MAP +1 +ENDMAP + +NAME: uniq_psyche +DEPTH: 8-9, 10-13, !Lair +TAGS: place_unique +MONS: Psyche +MAP +1 +ENDMAP + +NAME: uniq_erolcha +DEPTH: 8-9, 10-13, !Lair +TAGS: place_unique +MONS: Erolcha +MAP +1 +ENDMAP + +NAME: uniq_grum +DEPTH: 8-9, 10-13, !Lair +TAGS: place_unique +MONS: Gastronok +MAP +1 +ENDMAP + +NAME: uniq_maurice +DEPTH: 8-9, 10-13, !Lair +TAGS: place_unique +MONS: Maurice +MAP +1 +ENDMAP + +NAME: uniq_donald +DEPTH: 10-13, !Lair +TAGS: place_unique +MONS: Donald +MAP +1 +ENDMAP + +NAME: uniq_urug +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Urug +MAP +1 +ENDMAP + +NAME: uniq_michael +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Michael +MAP +1 +ENDMAP + +NAME: uniq_eustachio +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Eustachio +MAP +1 +ENDMAP + +NAME: uniq_sonja +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Sonja +MAP +1 +ENDMAP + +NAME: uniq_joseph +DEPTH: 10-13, !Lair +TAGS: place_unique +MONS: Joseph +MAP +1 +ENDMAP + +NAME: uniq_erica +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Erica +MAP +1 +ENDMAP + +NAME: uniq_josephine +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Josephine band +MAP +1 +ENDMAP + +NAME: uniq_jozef +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Jozef +MAP +1 +ENDMAP + +NAME: uniq_harold +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Harold +MAP +1 +ENDMAP + +NAME: uniq_norbert +DEPTH: 10-13, 14-16, !Lair, !Tomb +TAGS: place_unique +MONS: Norbert +MAP +1 +ENDMAP + +NAME: uniq_snorg +DEPTH: 14-16, 17-19, !Tomb +TAGS: place_unique +MONS: Snorg +MAP +1 +ENDMAP + +NAME: uniq_roxanne +DEPTH: 14-16, 17-19, !Tomb +TAGS: place_unique +MONS: Roxanne +MAP +1 +ENDMAP + +NAME: uniq_rupert +DEPTH: 14-16, 17-19, !Tomb +TAGS: place_unique +MONS: Rupert +MAP +1 +ENDMAP + +NAME: uniq_azrael +DEPTH: 14-16, 17-19, !Tomb, !Swamp, !Shoal +TAGS: place_unique +MONS: Azrael band +MAP +1 +ENDMAP + +NAME: uniq_nessos +DEPTH: 14-16, 17-19, !Tomb +TAGS: place_unique +MONS: Nessos +MAP +1 +ENDMAP + +NAME: uniq_agnes +DEPTH: 14-16, !Tomb +TAGS: place_unique +MONS: Agnes +MAP +1 +ENDMAP + +NAME: uniq_nikola +DEPTH: 14-16, 17-19, !Tomb +TAGS: place_unique +MONS: Nikola +MAP +1 +ENDMAP + +NAME: uniq_maud +DEPTH: 14-16, !Tomb +TAGS: place_unique +MONS: Maud +MAP +1 +ENDMAP + +NAME: uniq_louise +DEPTH: 14-16, 17-19, !Tomb +TAGS: place_unique +MONS: Louise +MAP +1 +ENDMAP + +NAME: uniq_nergalle +DEPTH: 14-16, 17-19, !Tomb +TAGS: place_unique +MONS: Nergalle +MAP +1 +ENDMAP + +NAME: uniq_kirke +DEPTH: 14-16, 17-19, !Tomb +TAGS: place_unique +MONS: Kirke band +MAP +1 +ENDMAP + +NAME: uniq_francis +DEPTH: 17-19, 20-27, !Tomb +TAGS: place_unique +MONS: Francis +MAP +1 +ENDMAP + +NAME: uniq_frances +DEPTH: 17-19, 20-27, !Tomb +TAGS: place_unique +MONS: Frances +MAP +1 +ENDMAP + +NAME: uniq_wayne +DEPTH: 17-19, 20-27, !Tomb +TAGS: place_unique +MONS: Wayne +MAP +1 +ENDMAP + +NAME: uniq_duane +DEPTH: 17-19, 20-27, !Tomb +TAGS: place_unique +MONS: Duane +MAP +1 +ENDMAP + +NAME: uniq_norris +DEPTH: 17-19, !Tomb +TAGS: place_unique +MONS: Norris +MAP +1 +ENDMAP + +NAME: uniq_saint_roka +DEPTH: 17-19, 20-27, !Tomb +TAGS: place_unique +MONS: Saint Roka band +MAP +1 +ENDMAP + +NAME: uniq_xtahua +DEPTH: 20-27, !Tomb +TAGS: place_unique +MONS: Xtahua +MAP +1 +ENDMAP + +NAME: uniq_frederick +DEPTH: 20-27, !Tomb +TAGS: place_unique +MONS: Frederick +MAP +1 +ENDMAP + +NAME: uniq_margery +DEPTH: 20-27, !Tomb +TAGS: place_unique +MONS: Margery band +MAP +1 +ENDMAP + +############################################################################### +# Do *not* change the name of this vault without changing the relevant section +# in monstuff.cc:monster_die. If wishing to alter Boris's weights by using +# multiple uniq_boris TAG'd maps, ensure that you add the relevant line to +# remove the tag in monstuff.cc:monster_die. +NAME: uniq_boris +DEPTH: 20-27 +TAGS: place_unique +MONS: Boris +MAP +1 +ENDMAP + +NAME: uniq_aizul +DEPTH: 20-27, !Tomb +TAGS: place_unique +MONS: Aizul +MAP +1 +ENDMAP +################################################################################ +# Non-dungeon Uniques +################################################################################ + +NAME: uniq_dissolution +DEPTH: Slime:2-6 +TAGS: place_unique +MONS: Dissolution +MAP +1 +ENDMAP + +NAME: uniq_murray +DEPTH: Hell +TAGS: place_unique +MONS: Murray +MAP +1 +ENDMAP + +NAME: uniq_polyphemus +DEPTH: Shoal:1-5 +TAGS: place_unique +MONS: Polyphemus band +MAP +1 +ENDMAP + +NAME: uniq_ilsuiw +DEPTH: Shoal:1-5 +TAGS: place_unique +MONS: Ilsuiw band +MAP +1 +ENDMAP + +NAME: uniq_khufu +DEPTH: Tomb, Crypt +TAGS: place_unique +MONS: Khufu band +MAP +1 +ENDMAP + +NAME: uniq_tiamat +DEPTH: Zot +TAGS: place_unique +MONS: Tiamat band +MAP +1 +ENDMAP + +################################################################################ +# The original C++ code for unique placement was: +# static monster_type _pick_unique(int lev) +# { +# if (player_in_branch(BRANCH_SLIME_PITS)) +# { +# // Only allow Dissolution in the Slime Pits. +# if (player_branch_depth() > 1 && one_chance_in(3)) +# return MONS_DISSOLUTION; +# +# return MONS_NO_MONSTER; +# } +# else if (player_in_branch(BRANCH_LAIR)) +# { +# if (player_branch_depth() > 5 && one_chance_in(3)) +# return MONS_GASTRONOK; +# else if (player_branch_depth() < 3 && one_chance_in(4)) +# return MONS_PRINCE_RIBBIT; +# else +# return MONS_NO_MONSTER; +# } +# else if (player_in_branch(BRANCH_SNAKE_PIT)) +# { +# if (player_branch_depth() > 3 && coinflip()) +# return MONS_AIZUL; +# } +# +# // First, pick generic unique depending on depth. +# int which_unique = +# ((lev <= 3) ? _choose_unique_by_depth(0) : +# (lev <= 7) ? _choose_unique_by_depth(1) : +# (lev <= 9) ? _choose_unique_by_depth(2) : +# (lev <= 13) ? _choose_unique_by_depth(3) : +# (lev <= 16) ? _choose_unique_by_depth(4) : +# (lev <= 19) ? _choose_unique_by_depth(5) : +# _choose_unique_by_depth(6)); +# +# // Azrael may not be created in the Swamp or Shoals. +# if (which_unique == MONS_AZRAEL +# && (player_in_branch(BRANCH_SWAMP) || player_in_branch(BRANCH_SHOALS))) +# { +# return MONS_NO_MONSTER; +# } +# +# // If applicable, replace it with one of the uniques appearing +# // only in some branches. +# if (player_in_branch(BRANCH_VESTIBULE_OF_HELL)) +# { +# if (one_chance_in(7)) +# which_unique = MONS_MURRAY; +# } +# else if (player_in_branch(BRANCH_HALL_OF_ZOT)) +# { +# if (one_chance_in(3)) +# which_unique = MONS_TIAMAT; +# } +# else if (player_in_branch(BRANCH_SHOALS)) +# { +# if (player_branch_depth() > 1 && coinflip()) +# which_unique = MONS_POLYPHEMUS; +# else if (player_branch_depth() > 2 && coinflip()) +# which_unique = MONS_ILSUIW; +# } +# else if (player_in_branch(BRANCH_TOMB) || player_in_branch(BRANCH_CRYPT)) +# { +# if (one_chance_in(10)) +# which_unique = MONS_KHUFU; +# } +# +# return static_cast<monster_type>(which_unique); +# } +# +# // Doesn't include Polyphemus or Ilsuiw (only appear in the Shoals), +# // Dissolution (Slime), Murray (Hell), Khufu(Tomb/Crypt) or Tiamat (Zot). +# // NOTE: The Lernaean hydra should *never* be randomly generated. +# // The Royal jelly likewise is only placed via Slime end vault. +# // Dowan is automatically placed together with Duvessa. +# static monster_type _choose_unique_by_depth(int step) +# { +# int ret; +# switch (step) +# { +# case 0: // depth <= 3 +# ret = random_choose(MONS_TERENCE, MONS_JESSICA, MONS_IJYB, +# MONS_SIGMUND, -1); +# break; +# case 1: // depth <= 7 +# ret = random_choose(MONS_IJYB, MONS_SIGMUND, MONS_BLORK_THE_ORC, +# MONS_EDMUND, MONS_PRINCE_RIBBIT, MONS_PURGY, +# MONS_MENKAURE, MONS_DUVESSA, MONS_PIKEL, -1); +# break; +# case 2: // depth <= 9 +# ret = random_choose(MONS_BLORK_THE_ORC, MONS_EDMUND, MONS_PSYCHE, +# MONS_EROLCHA, MONS_PRINCE_RIBBIT, MONS_GRUM, +# MONS_GASTRONOK, MONS_MAURICE, MONS_PIKEL, -1); +# break; +# case 3: // depth <= 13 +# ret = random_choose(MONS_PSYCHE, MONS_EROLCHA, MONS_DONALD, MONS_URUG, +# MONS_MICHAEL, MONS_EUSTACHIO, MONS_SONJA, MONS_GRUM, +# MONS_JOSEPH, MONS_ERICA, MONS_JOSEPHINE, MONS_JOZEF, +# MONS_HAROLD, MONS_NORBERT, MONS_GASTRONOK, +# MONS_MAURICE, -1); +# break; +# case 4: // depth <= 16 +# ret = random_choose(MONS_URUG, MONS_MICHAEL, MONS_EUSTACHIO, MONS_SONJA, +# MONS_SNORG, MONS_ERICA, MONS_JOSEPHINE, MONS_HAROLD, +# MONS_ROXANNE, MONS_RUPERT, MONS_NORBERT, MONS_JOZEF, +# MONS_AZRAEL, MONS_NESSOS, MONS_AGNES, MONS_NIKOLA, +# MONS_MAUD, MONS_LOUISE, MONS_NERGALLE, MONS_KIRKE, -1); +# break; +# case 5: // depth <= 19 +# ret = random_choose(MONS_SNORG, MONS_LOUISE, MONS_FRANCIS, MONS_FRANCES, +# MONS_RUPERT, MONS_WAYNE, MONS_DUANE, MONS_NORRIS, +# MONS_AZRAEL, MONS_NESSOS, MONS_NERGALLE, MONS_NIKOLA, +# MONS_ROXANNE, MONS_SAINT_ROKA, MONS_KIRKE, -1); +# break; +# case 6: // depth > 19 +# default: +# ret = random_choose(MONS_FRANCIS, MONS_FRANCES, MONS_WAYNE, MONS_DUANE, +# MONS_XTAHUA, MONS_NORRIS, MONS_FREDERICK, MONS_NIKOLA, +# MONS_MARGERY, MONS_BORIS, MONS_SAINT_ROKA, MONS_AIZUL, +# -1); +# } +# +# return static_cast<monster_type>(ret); +# } +# +# |