/*
* File: mon-pick.cc
* Summary: Functions used to help determine which monsters should appear.
* Written by: Linley Henzell
*/
#include "AppHdr.h"
#include "mon-pick.h"
#include "externs.h"
#include "branch.h"
#include "misc.h"
#include "mon-util.h"
#include "place.h"
// NB - When adding new branches or levels above 50, you must
// change pre-game deletion routine in new_game in newgame.cc
// New branch must be added in:
// - new_game stair location
// - down/up stairs (to and back) misc.cc
// - new_level (2 places) (misc.cc)
// - item_check items.cc
// - ouch ouch.cc (death message)
// - and here...
// NOTE: The lower the level the earlier a monster may appear.
int mons_level(int mcls, const level_id &place)
{
int monster_level = 0;
if (place.level_type == LEVEL_ABYSS)
monster_level = ((mons_abyss(mcls)) ? place.absdepth() : 0);
else if (place.level_type == LEVEL_PANDEMONIUM)
monster_level = ((mons_pan(mcls)) ? place.absdepth() : 0);
else if (place.level_type == LEVEL_DUNGEON)
monster_level = branches[place.branch].mons_level_function(mcls);
return monster_level;
}
typedef int (*mons_level_function)(int);
struct global_level_info
{
mons_level_function level_func;
branch_type branch;
int avg_depth;
};
static int _mons_misc_level(int mcls)
{
switch (mons_char(mcls))
{
case '&':
return 35;
case '1':
return 30;
case '2':
return 25;
case '3':
return 20;
case '4':
return 15;
case '5':
return 10;
}
if (mons_is_unique(mcls))
return (mons_type_hit_dice(mcls) * 14 / 10 + 1);
switch (mcls)
{
case MONS_HUMAN:
case MONS_ELF:
case MONS_DRACONIAN:
return 1;
case MONS_BIG_FISH:
case MONS_GIANT_GOLDFISH:
case MONS_JELLYFISH:
return 8;
case MONS_ANT_LARVA:
return 10;
case MONS_ELECTRIC_EEL:
case MONS_LAVA_FISH:
case MONS_LAVA_SNAKE:
case MONS_LAVA_WORM:
case MONS_SALAMANDER:
case MONS_HOG:
return 14;
case MONS_FIRE_VORTEX:
return 18;
case MONS_MINOTAUR:
case MONS_BALL_LIGHTNING:
case MONS_ORANGE_STATUE:
case MONS_SILVER_STATUE:
case MONS_ICE_STATUE:
case MONS_SPATIAL_VORTEX:
case MONS_MOLTEN_GARGOYLE:
case MONS_WATER_ELEMENTAL:
return 20;
case MONS_METAL_GARGOYLE:
case MONS_VAULT_GUARD:
return 24;
case MONS_QUEEN_ANT:
return 25;
case MONS_ANGEL:
return 27;
case MONS_DAEVA:
return 28;
}
return 0;
}
static global_level_info g_lev_infos[] = {
{mons_standard_level, BRANCH_MAIN_DUNGEON, 1},
{_mons_misc_level, BRANCH_MAIN_DUNGEON, 1},
{mons_mineorc_level, BRANCH_ORCISH_MINES, 8},
{mons_lair_level, BRANCH_LAIR, 10},
{mons_hallelf_level, BRANCH_ELVEN_HALLS, 11},
{mons_swamp_level, BRANCH_SWAMP, 14},
{mons_shoals_level, BRANCH_SHOALS, 14},
{mons_pitsnake_level, BRANCH_SNAKE_PIT, 15},
{mons_pitslime_level, BRANCH_SLIME_PITS, 16},
{mons_crypt_level, BRANCH_CRYPT, 19},
{mons_tomb_level, BRANCH_TOMB, 21},
{mons_hallzot_level, BRANCH_HALL_OF_ZOT, 27},
{mons_dis_level, BRANCH_DIS, 29},
{mons_gehenna_level, BRANCH_GEHENNA, 29},
{mons_cocytus_level, BRANCH_COCYTUS, 29},
{mons_tartarus_level, BRANCH_TARTARUS, 29},
{NULL, NUM_BRANCHES, 0}
};
int mons_global_level(int mcls)
{
for (int i = 0; g_lev_infos[i].level_func != NULL; i++)
{
int level = (*g_lev_infos[i].level_func)(mcls);
int rel_level = level - absdungeon_depth(g_lev_infos[i].branch, 1);
if (g_lev_infos[i].branch == BRANCH_HALL_OF_ZOT)
rel_level++;
if (level >= 1 && level < 99 && rel_level != 0)
{
level = rel_level + g_lev_infos[i].avg_depth - 1;
return (level);
}
}
return (0);
}
// NOTE: Higher values returned means the monster is "more common".
// A return value of zero means the monster will never appear. {dlb}
int mons_rarity(int mcls, const level_id &place)
{
// now, what about pandemonium ??? {dlb}
if (place.level_type == LEVEL_ABYSS)
return mons_rare_abyss(mcls);
else
return branches[place.branch].mons_rarity_function(mcls);
}
// level_area_type != LEVEL_DUNGEON
// NOTE: Labyrinths and portal vaults have no random monster generation.
// The Abyss
bool mons_abyss(int mcls)
{
switch (mcls)
{
case MONS_ABOMINATION_LARGE:
case MONS_ABOMINATION_SMALL:
case MONS_AIR_ELEMENTAL:
case MONS_ANCIENT_LICH:
case MONS_ANGEL:
case MONS_BALRUG:
case MONS_BLUE_DEATH:
case MONS_BLUE_DEVIL:
case MONS_BRAIN_WORM:
case MONS_CACODEMON:
case MONS_CHAOS_SPAWN:
case MONS_CLAY_GOLEM:
case MONS_CRYSTAL_GOLEM:
case MONS_DAEVA:
case MONS_DANCING_WEAPON:
case MONS_DEMONIC_CRAWLER:
case MONS_EARTH_ELEMENTAL:
case MONS_EFREET:
case MONS_EXECUTIONER:
case MONS_EYE_OF_DEVASTATION:
case MONS_EYE_OF_DRAINING:
case MONS_FIRE_ELEMENTAL:
case MONS_FLAMING_CORPSE:
case MONS_FLAYED_GHOST:
case MONS_FLYING_SKULL:
case MONS_FREEZING_WRAITH:
case MONS_DEATH_DRAKE:
case MONS_FUNGUS:
case MONS_GIANT_EYEBALL:
case MONS_GIANT_ORANGE_BRAIN:
case MONS_GIANT_SPORE:
case MONS_GREAT_ORB_OF_EYES:
case MONS_GOLDEN_EYE:
case MONS_GREEN_DEATH:
case MONS_GUARDIAN_SERPENT:
case MONS_HAIRY_DEVIL:
case MONS_HELLION:
case MONS_HELLWING:
case MONS_HELL_HOUND:
case MONS_HELL_KNIGHT:
case MONS_HUNGRY_GHOST:
case MONS_ICE_BEAST:
case MONS_ICE_DEVIL:
case MONS_IMP:
case MONS_INSUBSTANTIAL_WISP:
case MONS_IRON_DEVIL:
case MONS_IRON_GOLEM:
case MONS_JELLY:
case MONS_LEMURE:
case MONS_LICH:
case MONS_LOROCYPROCA:
case MONS_MANES:
case MONS_MIDGE:
case MONS_MUMMY:
case MONS_NAGA_MAGE:
case MONS_NAGA_WARRIOR:
case MONS_NECROMANCER:
case MONS_NECROPHAGE:
case MONS_NEQOXEC:
case MONS_ORANGE_DEMON:
case MONS_PHANTOM:
case MONS_PIT_FIEND:
case MONS_RAKSHASA:
case MONS_REAPER:
case MONS_RED_DEVIL:
case MONS_ROTTING_DEVIL:
case MONS_SHADOW:
case MONS_SHADOW_DEMON:
case MONS_SHADOW_IMP:
case MONS_SHINING_EYE:
case MONS_SIXFIRHY:
case MONS_SKELETAL_DRAGON:
case MONS_SKELETAL_WARRIOR:
case MONS_SKELETON_LARGE:
case MONS_SKELETON_SMALL:
case MONS_SMOKE_DEMON:
case MONS_SOUL_EATER:
case MONS_SPECTRAL_WARRIOR:
case MONS_SPINY_WORM:
case MONS_STONE_GOLEM:
case MONS_SUN_DEMON:
case MONS_TENTACLED_MONSTROSITY:
case MONS_TOENAIL_GOLEM:
case MONS_TORMENTOR:
case MONS_UFETUBUS:
case MONS_UGLY_THING:
case MONS_UNSEEN_HORROR:
case MONS_VAMPIRE:
case MONS_VAPOUR:
case MONS_VERY_UGLY_THING:
case MONS_WHITE_IMP:
case MONS_WIGHT:
case MONS_WIZARD:
case MONS_WOOD_GOLEM:
case MONS_WRAITH:
case MONS_YNOXINUL:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
case MONS_SIMULACRUM_LARGE:
case MONS_SIMULACRUM_SMALL:
case MONS_MOTTLED_DRACONIAN:
case MONS_YELLOW_DRACONIAN:
case MONS_BLACK_DRACONIAN:
case MONS_WHITE_DRACONIAN:
case MONS_RED_DRACONIAN:
case MONS_PURPLE_DRACONIAN:
case MONS_PALE_DRACONIAN:
case MONS_GREEN_DRACONIAN:
case MONS_DRACONIAN_CALLER:
case MONS_DRACONIAN_MONK:
case MONS_DRACONIAN_SCORCHER:
case MONS_DRACONIAN_KNIGHT:
case MONS_DRACONIAN_ANNIHILATOR:
case MONS_DRACONIAN_ZEALOT:
case MONS_DRACONIAN_SHIFTER:
return (true);
default:
return (false);
}
}
int mons_rare_abyss(int mcls)
{
switch (mcls)
{
case MONS_ABOMINATION_LARGE:
case MONS_ABOMINATION_SMALL:
return 99;
case MONS_LEMURE:
case MONS_MANES:
case MONS_MIDGE:
case MONS_UFETUBUS:
case MONS_WHITE_IMP:
return 80;
case MONS_HELLWING:
case MONS_NEQOXEC:
case MONS_ORANGE_DEMON:
case MONS_SMOKE_DEMON:
case MONS_YNOXINUL:
return 50;
case MONS_SKELETON_LARGE:
case MONS_SKELETON_SMALL:
case MONS_SKELETAL_WARRIOR:
return 40;
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
return 35;
case MONS_SKELETAL_DRAGON:
case MONS_SIXFIRHY:
return 20;
case MONS_EFREET:
return 18;
case MONS_RAKSHASA:
return 17;
case MONS_BRAIN_WORM:
return 16;
case MONS_FLYING_SKULL:
case MONS_FREEZING_WRAITH:
case MONS_GIANT_ORANGE_BRAIN:
case MONS_VERY_UGLY_THING:
case MONS_WRAITH:
return 15;
case MONS_EYE_OF_DRAINING:
case MONS_FLAMING_CORPSE:
case MONS_LICH:
return 14;
case MONS_INSUBSTANTIAL_WISP:
case MONS_UNSEEN_HORROR:
case MONS_GOLDEN_EYE:
return 12;
case MONS_HELL_HOUND:
case MONS_HUNGRY_GHOST:
case MONS_SHADOW:
return 11;
case MONS_BALRUG:
case MONS_BLUE_DEATH:
case MONS_BLUE_DEVIL:
case MONS_CACODEMON:
case MONS_CHAOS_SPAWN:
case MONS_DEMONIC_CRAWLER:
case MONS_EXECUTIONER:
case MONS_GREEN_DEATH:
case MONS_GUARDIAN_SERPENT:
case MONS_HAIRY_DEVIL:
case MONS_HELLION:
case MONS_ICE_DEVIL:
case MONS_IMP:
case MONS_LOROCYPROCA:
case MONS_MUMMY:
case MONS_NECROPHAGE:
case MONS_ROTTING_DEVIL:
case MONS_SHADOW_DEMON:
case MONS_SHADOW_IMP:
case MONS_SUN_DEMON:
case MONS_WIGHT:
return 10;
case MONS_ICE_BEAST:
case MONS_JELLY:
case MONS_TORMENTOR:
case MONS_VAMPIRE:
case MONS_VAPOUR:
case MONS_SIMULACRUM_LARGE:
case MONS_SIMULACRUM_SMALL:
return 9;
case MONS_FUNGUS:
case MONS_GIANT_EYEBALL:
case MONS_PHANTOM:
case MONS_REAPER:
return 8;
case MONS_DAEVA:
case MONS_SOUL_EATER:
return 7;
case MONS_ANGEL:
case MONS_IRON_DEVIL:
return 6;
case MONS_ANCIENT_LICH:
case MONS_CLAY_GOLEM:
case MONS_GREAT_ORB_OF_EYES:
case MONS_IRON_GOLEM:
case MONS_NAGA_MAGE:
case MONS_NAGA_WARRIOR:
case MONS_PIT_FIEND:
case MONS_RED_DEVIL:
case MONS_SHINING_EYE:
case MONS_SPECTRAL_WARRIOR:
case MONS_SPINY_WORM:
case MONS_STONE_GOLEM:
case MONS_TENTACLED_MONSTROSITY:
case MONS_WIZARD:
case MONS_WOOD_GOLEM:
case MONS_DEATH_DRAKE:
return 5;
case MONS_AIR_ELEMENTAL:
case MONS_EARTH_ELEMENTAL:
case MONS_FIRE_ELEMENTAL:
case MONS_FLAYED_GHOST:
return 4;
case MONS_CRYSTAL_GOLEM:
case MONS_EYE_OF_DEVASTATION:
case MONS_HELL_KNIGHT:
case MONS_NECROMANCER:
case MONS_UGLY_THING:
case MONS_MOTTLED_DRACONIAN:
case MONS_YELLOW_DRACONIAN:
case MONS_BLACK_DRACONIAN:
case MONS_WHITE_DRACONIAN:
case MONS_RED_DRACONIAN:
case MONS_PURPLE_DRACONIAN:
case MONS_PALE_DRACONIAN:
case MONS_GREEN_DRACONIAN:
case MONS_DRACONIAN_CALLER:
case MONS_DRACONIAN_MONK:
case MONS_DRACONIAN_SCORCHER:
case MONS_DRACONIAN_KNIGHT:
case MONS_DRACONIAN_ANNIHILATOR:
case MONS_DRACONIAN_ZEALOT:
case MONS_DRACONIAN_SHIFTER:
return 3;
case MONS_DANCING_WEAPON:
case MONS_GIANT_SPORE:
return 2;
case MONS_TOENAIL_GOLEM:
return 1;
default:
return 0;
}
}
// Pandemonium
bool mons_pan(int mcls)
{
switch (mcls)
{
// icky monsters
case MONS_BRAIN_WORM:
case MONS_FUNGUS:
case MONS_GIANT_ORANGE_BRAIN:
case MONS_JELLY:
case MONS_SLIME_CREATURE:
// undead
case MONS_FLAMING_CORPSE:
case MONS_FLAYED_GHOST:
case MONS_FLYING_SKULL:
case MONS_FREEZING_WRAITH:
case MONS_HUNGRY_GHOST:
case MONS_LICH:
case MONS_MUMMY:
case MONS_NECROPHAGE:
case MONS_PHANTOM:
case MONS_SHADOW:
case MONS_SKELETON_LARGE:
case MONS_SKELETON_SMALL:
case MONS_SPECTRAL_WARRIOR:
case MONS_VAMPIRE:
case MONS_WIGHT:
case MONS_WRAITH:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
case MONS_SIMULACRUM_LARGE:
case MONS_SIMULACRUM_SMALL:
// "things"
case MONS_ABOMINATION_LARGE:
case MONS_ABOMINATION_SMALL:
case MONS_INSUBSTANTIAL_WISP:
case MONS_PULSATING_LUMP:
case MONS_UNSEEN_HORROR:
// eyes
case MONS_EYE_OF_DRAINING:
case MONS_GIANT_EYEBALL:
case MONS_GREAT_ORB_OF_EYES:
case MONS_GOLDEN_EYE:
// malign beings
case MONS_EFREET:
case MONS_RAKSHASA:
// golems
case MONS_CLAY_GOLEM:
case MONS_CRYSTAL_GOLEM:
case MONS_IRON_GOLEM:
case MONS_STONE_GOLEM:
case MONS_TOENAIL_GOLEM:
case MONS_WOOD_GOLEM:
// dragon(s)
case MONS_MOTTLED_DRAGON:
// elementals
case MONS_AIR_ELEMENTAL:
case MONS_EARTH_ELEMENTAL:
case MONS_FIRE_ELEMENTAL:
// humanoids
case MONS_NECROMANCER:
case MONS_STONE_GIANT:
case MONS_WIZARD:
// demons
case MONS_BALRUG:
case MONS_BLUE_DEATH:
case MONS_CACODEMON:
case MONS_CHAOS_SPAWN:
case MONS_EXECUTIONER:
case MONS_GREEN_DEATH:
case MONS_HELLWING:
case MONS_LEMURE:
case MONS_MANES:
case MONS_MIDGE:
case MONS_NEQOXEC:
case MONS_ORANGE_DEMON:
case MONS_SIXFIRHY:
case MONS_SMOKE_DEMON:
case MONS_UFETUBUS:
case MONS_WHITE_IMP:
case MONS_YNOXINUL:
return (true);
default:
return (false);
}
}
/* ******************** END EXTERNAL FUNCTIONS ******************** */
// LEVEL_DUNGEON
// The Main Dungeon
int mons_standard_level(int mcls)
{
switch (mcls)
{
case MONS_GOBLIN:
case MONS_GIANT_NEWT:
return 1;
case MONS_GIANT_COCKROACH:
case MONS_OOZE:
case MONS_SMALL_SNAKE:
return 2;
case MONS_GIANT_BAT:
case MONS_KOBOLD:
case MONS_RAT:
return 4;
case MONS_GIANT_GECKO:
case MONS_GIANT_MITE:
case MONS_GNOLL:
case MONS_HOBGOBLIN:
case MONS_JACKAL:
case MONS_KILLER_BEE_LARVA:
return 5;
case MONS_WORM:
case MONS_SNAKE:
case MONS_QUOKKA:
return 6;
case MONS_ORC:
case MONS_ORC_PRIEST:
return 7;
case MONS_FUNGUS:
case MONS_GIANT_ANT:
case MONS_GIANT_EYEBALL:
case MONS_HOUND:
case MONS_GIANT_IGUANA:
case MONS_OGRE:
case MONS_ORC_WIZARD:
case MONS_PHANTOM:
case MONS_SCORPION:
return 8;
case MONS_WATER_MOCCASIN:
case MONS_CENTAUR:
case MONS_ICE_BEAST:
case MONS_IMP:
case MONS_JELLY:
case MONS_NECROPHAGE:
case MONS_QUASIT:
case MONS_ZOMBIE_SMALL:
return 9;
case MONS_DEEP_ELF_SOLDIER:
case MONS_GIANT_BEETLE:
case MONS_GIANT_FROG:
case MONS_GIANT_SPORE:
case MONS_MUMMY:
case MONS_ORC_WARRIOR:
case MONS_STEAM_DRAGON:
case MONS_WIGHT:
return 10;
case MONS_GIANT_LIZARD:
case MONS_HIPPOGRIFF:
case MONS_HUNGRY_GHOST:
case MONS_KILLER_BEE:
case MONS_SHADOW:
case MONS_YELLOW_WASP:
return 11;
case MONS_EYE_OF_DRAINING:
case MONS_GILA_MONSTER:
case MONS_MANTICORE:
case MONS_PLANT:
case MONS_WYVERN:
return 12;
case MONS_BIG_KOBOLD:
case MONS_GIANT_TOAD:
case MONS_GIANT_CENTIPEDE:
case MONS_OKLOB_PLANT:
case MONS_TROLL:
case MONS_TWO_HEADED_OGRE:
case MONS_WOOD_GOLEM:
case MONS_YAK:
return 13;
case MONS_HILL_GIANT:
case MONS_KOMODO_DRAGON:
case MONS_SOLDIER_ANT:
case MONS_WOLF_SPIDER:
case MONS_WRAITH:
case MONS_UNSEEN_HORROR:
case MONS_TRAPDOOR_SPIDER:
return 14;
case MONS_ARMOUR_MIMIC:
case MONS_BRAIN_WORM:
case MONS_CYCLOPS:
case MONS_EFREET:
case MONS_ETTIN:
case MONS_EYE_OF_DEVASTATION:
case MONS_GOLD_MIMIC:
case MONS_HYDRA:
case MONS_MOTTLED_DRAGON:
case MONS_POTION_MIMIC:
case MONS_SCROLL_MIMIC:
case MONS_SKELETAL_WARRIOR:
case MONS_WEAPON_MIMIC:
return 15;
case MONS_BLINK_FROG:
case MONS_BUTTERFLY:
case MONS_GIANT_BLOWFLY:
case MONS_GUARDIAN_SERPENT:
case MONS_RAKSHASA:
case MONS_SLIME_CREATURE:
case MONS_STONE_GOLEM:
case MONS_VAMPIRE:
case MONS_WANDERING_MUSHROOM:
case MONS_ZOMBIE_LARGE:
return 16;
case MONS_BOGGART:
case MONS_CENTAUR_WARRIOR:
case MONS_CLAY_GOLEM:
case MONS_GRIFFON:
case MONS_SHAPESHIFTER:
case MONS_UGLY_THING:
case MONS_WIZARD:
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
case MONS_ROCK_WORM:
return 17;
case MONS_DRAGON:
case MONS_GARGOYLE:
case MONS_GIANT_AMOEBA:
case MONS_KOBOLD_DEMONOLOGIST:
return 18;
case MONS_GIANT_SLUG:
case MONS_IRON_GOLEM:
case MONS_OGRE_MAGE:
case MONS_ROCK_TROLL:
case MONS_TOENAIL_GOLEM:
case MONS_YAKTAUR:
return 19;
case MONS_AIR_ELEMENTAL:
case MONS_DEEP_ELF_FIGHTER:
case MONS_DEEP_ELF_KNIGHT:
case MONS_DEEP_ELF_MAGE:
case MONS_DEEP_ELF_SUMMONER:
case MONS_EARTH_ELEMENTAL:
case MONS_FIRE_ELEMENTAL:
case MONS_GIANT_ORANGE_BRAIN:
case MONS_GIANT_SNAIL:
case MONS_GREAT_ORB_OF_EYES:
case MONS_ICE_DRAGON:
case MONS_SKELETON_LARGE:
case MONS_NAGA_MAGE:
case MONS_NAGA_WARRIOR:
case MONS_NECROMANCER:
case MONS_ORC_KNIGHT:
case MONS_QUEEN_BEE:
case MONS_RED_WASP:
case MONS_SHADOW_WRAITH:
case MONS_SKELETON_SMALL:
case MONS_SPINY_WORM:
case MONS_VERY_UGLY_THING:
case MONS_HARPY:
return 20;
case MONS_BOULDER_BEETLE:
case MONS_ORC_HIGH_PRIEST:
case MONS_PULSATING_LUMP:
return 21;
case MONS_BORING_BEETLE:
case MONS_CRYSTAL_GOLEM:
case MONS_FLAYED_GHOST:
case MONS_FREEZING_WRAITH:
case MONS_REDBACK:
case MONS_SPHINX:
case MONS_VAPOUR:
return 22;
case MONS_ORC_SORCERER:
case MONS_SHINING_EYE:
return 23;
case MONS_BUMBLEBEE:
case MONS_ORC_WARLORD:
case MONS_IRON_TROLL:
case MONS_YAKTAUR_CAPTAIN:
return 24;
case MONS_DANCING_WEAPON:
case MONS_DEEP_TROLL:
case MONS_FIRE_GIANT:
case MONS_FROST_GIANT:
case MONS_HELL_KNIGHT:
case MONS_INSUBSTANTIAL_WISP:
case MONS_LICH:
case MONS_STONE_GIANT:
return 25;
case MONS_DEEP_ELF_CONJURER:
case MONS_SPECTRAL_WARRIOR:
case MONS_STORM_DRAGON:
return 26;
case MONS_DEEP_ELF_PRIEST:
case MONS_GLOWING_SHAPESHIFTER:
case MONS_TENTACLED_MONSTROSITY:
return 27;
case MONS_ANCIENT_LICH:
case MONS_DEEP_ELF_ANNIHILATOR:
case MONS_DEEP_ELF_DEATH_MAGE:
case MONS_DEEP_ELF_DEMONOLOGIST:
case MONS_DEEP_ELF_HIGH_PRIEST:
case MONS_DEEP_ELF_SORCERER:
case MONS_GOLDEN_DRAGON:
case MONS_IRON_DRAGON:
case MONS_QUICKSILVER_DRAGON:
case MONS_SHADOW_DRAGON:
case MONS_SKELETAL_DRAGON:
case MONS_TITAN:
return 30;
case MONS_DEEP_ELF_BLADEMASTER:
case MONS_DEEP_ELF_MASTER_ARCHER:
return 33;
case MONS_BIG_FISH:
case MONS_ELECTRIC_EEL:
case MONS_GIANT_GOLDFISH:
case MONS_JELLYFISH:
case MONS_LAVA_FISH:
case MONS_LAVA_SNAKE:
case MONS_LAVA_WORM:
case MONS_SWAMP_WORM:
case MONS_WATER_ELEMENTAL:
return 500;
default:
return 99;
}
}
int mons_standard_rare(int mcls)
{
switch (mcls)
{
case MONS_BIG_FISH:
case MONS_ELECTRIC_EEL:
case MONS_GIANT_GOLDFISH:
case MONS_JELLYFISH:
case MONS_LAVA_FISH:
case MONS_LAVA_SNAKE:
case MONS_LAVA_WORM:
case MONS_SWAMP_WORM:
case MONS_WATER_ELEMENTAL:
case MONS_SALAMANDER:
return 500;
case MONS_GIANT_BAT:
case MONS_GIANT_FROG:
case MONS_GOBLIN:
case MONS_HILL_GIANT:
case MONS_HOBGOBLIN:
case MONS_IMP:
case MONS_KOBOLD:
case MONS_SKELETON_LARGE:
case MONS_ORC:
case MONS_RAT:
case MONS_RED_DEVIL:
case MONS_SKELETON_SMALL:
case MONS_UGLY_THING:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
return 99;
case MONS_CENTAUR_WARRIOR:
case MONS_GIANT_ANT:
case MONS_SNAKE:
return 80;
case MONS_MERFOLK:
case MONS_MERMAID:
case MONS_FLYING_SKULL:
case MONS_SLIME_CREATURE:
return 75;
case MONS_HELL_HOUND:
return 71;
case MONS_CENTAUR:
case MONS_CYCLOPS:
case MONS_GIANT_TOAD:
case MONS_HELLION:
case MONS_HOUND:
case MONS_OGRE:
case MONS_ORC_WARRIOR:
case MONS_TROLL:
case MONS_YAK:
case MONS_YAKTAUR_CAPTAIN:
return 70;
case MONS_JELLY:
case MONS_ORC_KNIGHT:
case MONS_ROTTING_DEVIL:
return 60;
case MONS_SHAPESHIFTER:
return 59;
case MONS_STONE_GIANT:
return 53;
case MONS_BIG_KOBOLD:
case MONS_GIANT_BEETLE:
case MONS_GIANT_BLOWFLY:
case MONS_GIANT_COCKROACH:
case MONS_GIANT_GECKO:
case MONS_GIANT_IGUANA:
case MONS_GIANT_NEWT:
case MONS_HIPPOGRIFF:
case MONS_HYDRA:
case MONS_ICE_BEAST:
case MONS_KILLER_BEE:
case MONS_ORC_WIZARD:
case MONS_QUOKKA:
case MONS_SCORPION:
case MONS_TORMENTOR:
case MONS_UNSEEN_HORROR:
case MONS_WORM:
return 50;
case MONS_ROCK_TROLL:
return 48;
case MONS_MANTICORE:
case MONS_OGRE_MAGE:
return 45;
case MONS_HUNGRY_GHOST:
case MONS_SHADOW:
return 41;
case MONS_GIANT_CENTIPEDE:
case MONS_GIANT_EYEBALL:
case MONS_GIANT_SPORE:
case MONS_GRIFFON:
case MONS_HAIRY_DEVIL:
case MONS_JACKAL:
case MONS_MOTTLED_DRAGON:
case MONS_PHANTOM:
case MONS_REAPER:
case MONS_TWO_HEADED_OGRE:
case MONS_WIGHT:
case MONS_WRAITH:
case MONS_WYVERN:
case MONS_YAKTAUR:
return 40;
case MONS_WOLF_SPIDER:
return 36;
case MONS_FREEZING_WRAITH:
case MONS_GIANT_AMOEBA:
case MONS_GILA_MONSTER:
case MONS_GLOWING_SHAPESHIFTER:
case MONS_SOLDIER_ANT:
return 35;
case MONS_BOULDER_BEETLE:
return 34;
case MONS_EYE_OF_DRAINING:
case MONS_TRAPDOOR_SPIDER:
case MONS_ROCK_WORM:
return 33;
case MONS_GIANT_SLUG:
return 32;
case MONS_ARMOUR_MIMIC:
case MONS_WATER_MOCCASIN:
case MONS_DRAGON:
case MONS_ETTIN:
case MONS_FIRE_VORTEX:
case MONS_GIANT_LIZARD:
case MONS_GIANT_MITE:
case MONS_GNOLL:
case MONS_GOLD_MIMIC:
case MONS_KOMODO_DRAGON:
case MONS_MUMMY:
case MONS_NECROPHAGE:
case MONS_POTION_MIMIC:
case MONS_SCROLL_MIMIC:
case MONS_QUASIT:
case MONS_SKELETAL_WARRIOR:
case MONS_SMALL_SNAKE:
case MONS_SOUL_EATER:
case MONS_SPINY_WORM:
case MONS_VAMPIRE:
case MONS_WEAPON_MIMIC:
case MONS_YELLOW_WASP:
return 30;
case MONS_FLAYED_GHOST:
return 29;
case MONS_BRAIN_WORM:
return 26;
case MONS_BOGGART:
case MONS_DEEP_ELF_FIGHTER:
case MONS_DEEP_ELF_KNIGHT:
case MONS_DEEP_TROLL:
case MONS_FIRE_GIANT:
case MONS_FROST_GIANT:
case MONS_GREAT_ORB_OF_EYES:
case MONS_IRON_TROLL:
case MONS_OOZE:
case MONS_ORC_PRIEST:
case MONS_PLANT:
case MONS_RED_WASP:
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
return 25;
case MONS_BUTTERFLY:
case MONS_FUNGUS:
case MONS_GIANT_SNAIL:
case MONS_ICE_DRAGON:
case MONS_INSUBSTANTIAL_WISP:
case MONS_RAKSHASA:
case MONS_REDBACK:
case MONS_SHADOW_DRAGON:
case MONS_SPECTRAL_WARRIOR:
case MONS_SPHINX:
case MONS_STEAM_DRAGON:
case MONS_STORM_DRAGON:
case MONS_VERY_UGLY_THING:
case MONS_WIZARD:
case MONS_HARPY:
return 20;
case MONS_BORING_BEETLE:
case MONS_LICH:
case MONS_TENTACLED_MONSTROSITY:
return 17;
case MONS_BLINK_FROG:
case MONS_CLAY_GOLEM:
case MONS_EFREET:
case MONS_EYE_OF_DEVASTATION:
case MONS_NECROMANCER:
case MONS_WOOD_GOLEM:
return 15;
case MONS_KOBOLD_DEMONOLOGIST:
return 13;
case MONS_BUMBLEBEE:
case MONS_ORC_HIGH_PRIEST:
return 12;
case MONS_DEEP_ELF_SOLDIER:
case MONS_GIANT_ORANGE_BRAIN:
case MONS_HELL_KNIGHT:
case MONS_IRON_GOLEM:
case MONS_OKLOB_PLANT:
case MONS_ORC_SORCERER:
case MONS_SHADOW_WRAITH:
case MONS_STONE_GOLEM:
case MONS_TITAN:
case MONS_WANDERING_MUSHROOM:
return 10;
case MONS_GOLDEN_DRAGON:
case MONS_ORC_WARLORD:
return 7;
case MONS_GARGOYLE:
return 6;
case MONS_CRYSTAL_GOLEM:
case MONS_DANCING_WEAPON:
case MONS_DEEP_ELF_HIGH_PRIEST:
case MONS_DEEP_ELF_MAGE:
case MONS_DEEP_ELF_SUMMONER:
case MONS_IRON_DRAGON:
case MONS_NAGA_MAGE:
case MONS_NAGA_WARRIOR:
case MONS_SKELETAL_DRAGON:
case MONS_QUICKSILVER_DRAGON:
case MONS_VAPOUR:
return 5;
case MONS_AIR_ELEMENTAL:
case MONS_DEEP_ELF_CONJURER:
case MONS_EARTH_ELEMENTAL:
case MONS_FIRE_ELEMENTAL:
return 4;
case MONS_ANCIENT_LICH:
case MONS_DEEP_ELF_ANNIHILATOR:
case MONS_DEEP_ELF_DEATH_MAGE:
case MONS_DEEP_ELF_DEMONOLOGIST:
case MONS_DEEP_ELF_PRIEST:
case MONS_DEEP_ELF_SORCERER:
case MONS_GUARDIAN_SERPENT:
return 3;
case MONS_PULSATING_LUMP:
case MONS_SHINING_EYE:
case MONS_TOENAIL_GOLEM:
return 2;
default:
return 0;
}
}
// The Orcish Mines
int mons_mineorc_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_ORCISH_MINES, 1);
switch (mcls)
{
case MONS_HOBGOBLIN:
case MONS_ORC_PRIEST:
case MONS_ORC_WARRIOR:
mlev++;
break;
case MONS_GNOLL:
case MONS_OGRE:
case MONS_WARG:
case MONS_ORC_KNIGHT:
case MONS_ORC_WIZARD:
mlev += 2;
break;
case MONS_CYCLOPS:
case MONS_IRON_TROLL:
case MONS_OGRE_MAGE:
case MONS_ORC_HIGH_PRIEST:
case MONS_ORC_SORCERER:
case MONS_ORC_WARLORD:
case MONS_ROCK_TROLL:
case MONS_STONE_GIANT:
case MONS_TROLL:
case MONS_TWO_HEADED_OGRE:
case MONS_ETTIN:
mlev += 3;
break;
case MONS_FUNGUS:
case MONS_GOBLIN:
case MONS_ORC:
default:
mlev += 0;
}
return (mlev);
}
int mons_mineorc_rare(int mcls)
{
switch (mcls)
{
case MONS_ORC:
return 300;
case MONS_GOBLIN:
case MONS_ORC_WARRIOR:
return 30;
case MONS_HOBGOBLIN:
case MONS_OGRE:
return 20;
case MONS_TROLL:
case MONS_WARG:
return 13;
case MONS_FUNGUS:
case MONS_ORC_KNIGHT:
case MONS_ORC_PRIEST:
case MONS_ORC_SORCERER:
case MONS_ORC_WIZARD:
return 10;
case MONS_ORC_WARLORD:
case MONS_ORC_HIGH_PRIEST:
case MONS_CYCLOPS:
case MONS_TWO_HEADED_OGRE:
return 5;
case MONS_ETTIN:
case MONS_IRON_TROLL:
case MONS_ROCK_TROLL:
case MONS_STONE_GIANT:
return 3;
case MONS_GNOLL:
return 2;
case MONS_OGRE_MAGE:
return 1;
default:
return 0;
}
}
// The Elven Halls
int mons_hallelf_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_ELVEN_HALLS, 1);
switch (mcls)
{
case MONS_DEEP_ELF_SOLDIER:
case MONS_DEEP_ELF_FIGHTER:
case MONS_ORC:
case MONS_ORC_WARRIOR:
mlev++;
break;
case MONS_ORC_WIZARD:
case MONS_DEEP_ELF_MAGE:
case MONS_DEEP_ELF_SUMMONER:
mlev += 2;
break;
case MONS_FUNGUS:
case MONS_DEEP_ELF_CONJURER:
case MONS_SHAPESHIFTER:
case MONS_ORC_KNIGHT:
mlev += 3;
break;
case MONS_ORC_SORCERER:
case MONS_DEEP_ELF_PRIEST:
case MONS_GLOWING_SHAPESHIFTER:
case MONS_DEEP_ELF_KNIGHT:
mlev += 4;
break;
case MONS_ORC_PRIEST:
case MONS_ORC_HIGH_PRIEST:
mlev += 5;
break;
case MONS_DEEP_ELF_HIGH_PRIEST:
case MONS_DEEP_ELF_DEMONOLOGIST:
case MONS_DEEP_ELF_ANNIHILATOR:
case MONS_DEEP_ELF_SORCERER:
case MONS_DEEP_ELF_DEATH_MAGE:
mlev += 7;
break;
case MONS_DEEP_ELF_BLADEMASTER:
case MONS_DEEP_ELF_MASTER_ARCHER:
mlev += 10;
break;
default:
mlev += 99;
break;
}
return (mlev);
}
int mons_hallelf_rare(int mcls)
{
switch (mcls)
{
case MONS_FUNGUS:
return 300;
case MONS_DEEP_ELF_SOLDIER:
case MONS_DEEP_ELF_FIGHTER:
case MONS_DEEP_ELF_MAGE:
return 100;
case MONS_DEEP_ELF_KNIGHT:
return 80;
case MONS_DEEP_ELF_SUMMONER:
return 72;
case MONS_DEEP_ELF_CONJURER:
return 63;
case MONS_DEEP_ELF_PRIEST:
return 44;
case MONS_SHAPESHIFTER:
return 25;
case MONS_ORC:
return 20;
case MONS_DEEP_ELF_DEMONOLOGIST:
case MONS_DEEP_ELF_SORCERER:
return 17;
case MONS_DEEP_ELF_ANNIHILATOR:
case MONS_DEEP_ELF_DEATH_MAGE:
case MONS_ORC_WIZARD:
return 13;
case MONS_ORC_WARRIOR:
return 11;
case MONS_DEEP_ELF_HIGH_PRIEST:
case MONS_ORC_SORCERER:
case MONS_GLOWING_SHAPESHIFTER:
return 10;
case MONS_ORC_KNIGHT:
case MONS_ORC_PRIEST:
case MONS_ORC_HIGH_PRIEST:
return 5;
case MONS_DEEP_ELF_BLADEMASTER:
case MONS_DEEP_ELF_MASTER_ARCHER:
return 1;
default:
return 0;
}
}
// The Lair
int mons_lair_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_LAIR, 1);
switch (mcls)
{
case MONS_GIANT_GECKO:
case MONS_GIANT_BAT:
case MONS_JACKAL:
case MONS_GIANT_NEWT:
case MONS_RAT:
case MONS_QUOKKA:
case MONS_GIANT_CENTIPEDE:
case MONS_GIANT_IGUANA:
mlev += 0;
break;
case MONS_GIANT_FROG:
case MONS_GILA_MONSTER:
case MONS_GREY_RAT:
case MONS_HOUND:
case MONS_BLACK_BEAR:
case MONS_WORM:
case MONS_WOLF:
mlev++;
break;
case MONS_FUNGUS:
case MONS_GIANT_TOAD:
case MONS_GIANT_LIZARD:
case MONS_GIANT_MITE:
case MONS_GREEN_RAT:
case MONS_SCORPION:
case MONS_SNAKE:
mlev += 2;
break;
case MONS_WATER_MOCCASIN:
case MONS_BUTTERFLY:
case MONS_GIANT_BEETLE:
case MONS_GIANT_SLUG:
case MONS_HIPPOGRIFF:
case MONS_PLANT:
case MONS_SPINY_FROG:
case MONS_WAR_DOG:
case MONS_YELLOW_WASP:
case MONS_BEAR:
mlev += 3;
break;
case MONS_BLINK_FROG:
case MONS_GIANT_SNAIL:
case MONS_GIANT_SPORE:
case MONS_KOMODO_DRAGON:
case MONS_ORANGE_RAT:
case MONS_SHEEP:
case MONS_STEAM_DRAGON:
case MONS_WOLF_SPIDER:
case MONS_YAK:
case MONS_GRIZZLY_BEAR:
mlev += 4;
break;
case MONS_BLACK_MAMBA:
case MONS_BRAIN_WORM:
case MONS_BUMBLEBEE:
case MONS_FIRE_DRAKE:
case MONS_HYDRA:
case MONS_OKLOB_PLANT:
case MONS_WYVERN:
case MONS_TRAPDOOR_SPIDER:
case MONS_ROCK_WORM:
mlev += 5;
break;
case MONS_ELEPHANT_SLUG:
case MONS_POLAR_BEAR:
case MONS_GRIFFON:
case MONS_LINDWURM:
case MONS_REDBACK:
case MONS_WANDERING_MUSHROOM:
mlev += 6;
break;
case MONS_BORING_BEETLE:
case MONS_BOULDER_BEETLE:
case MONS_DEATH_YAK:
case MONS_SPINY_WORM:
mlev += 7;
break;
default:
return 99;
}
return (mlev);
}
int mons_lair_rare(int mcls)
{
switch (mcls)
{
case MONS_RAT:
return 200;
case MONS_GIANT_BAT:
case MONS_GIANT_TOAD:
case MONS_GIANT_FROG:
case MONS_GREY_RAT:
case MONS_QUOKKA:
return 99;
case MONS_WATER_MOCCASIN:
case MONS_GIANT_LIZARD:
return 90;
case MONS_PLANT:
case MONS_SNAKE:
return 80;
case MONS_SPINY_FROG:
return 75;
case MONS_JACKAL:
case MONS_GIANT_IGUANA:
case MONS_GILA_MONSTER:
return 70;
case MONS_GREEN_RAT:
return 64;
case MONS_HOUND:
return 60;
case MONS_GIANT_SNAIL:
return 56;
case MONS_GIANT_SLUG:
return 55;
case MONS_FUNGUS:
case MONS_GIANT_GECKO:
case MONS_GIANT_CENTIPEDE:
case MONS_HIPPOGRIFF:
case MONS_HYDRA:
case MONS_KOMODO_DRAGON:
case MONS_YAK:
return 50;
case MONS_BLACK_MAMBA:
return 47;
case MONS_BLINK_FROG:
return 45;
case MONS_SHEEP:
case MONS_FIRE_DRAKE:
return 36;
case MONS_WAR_DOG:
return 35;
case MONS_WORM:
case MONS_GIANT_MITE:
case MONS_GRIFFON:
case MONS_DEATH_YAK:
case MONS_ELEPHANT_SLUG:
return 30;
case MONS_BORING_BEETLE:
return 29;
case MONS_BOULDER_BEETLE:
case MONS_GIANT_NEWT:
case MONS_WOLF:
case MONS_WYVERN:
return 20;
case MONS_BLACK_BEAR:
case MONS_BEAR:
case MONS_GRIZZLY_BEAR:
case MONS_POLAR_BEAR:
return 15;
case MONS_GIANT_BEETLE:
case MONS_SCORPION:
case MONS_OKLOB_PLANT:
case MONS_STEAM_DRAGON:
case MONS_LINDWURM:
case MONS_ORANGE_RAT:
return 10;
case MONS_SPINY_WORM:
return 9;
case MONS_WANDERING_MUSHROOM:
case MONS_REDBACK:
return 8;
case MONS_BRAIN_WORM:
case MONS_BUMBLEBEE:
return 7;
case MONS_WOLF_SPIDER:
return 6;
case MONS_YELLOW_WASP:
case MONS_BUTTERFLY:
case MONS_TRAPDOOR_SPIDER:
case MONS_ROCK_WORM:
return 5;
case MONS_GIANT_SPORE:
return 2;
default:
return 0;
}
}
// The Swamp
int mons_swamp_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_SWAMP, 1);
switch (mcls)
{
case MONS_GIANT_BAT:
case MONS_GIANT_BLOWFLY:
case MONS_GIANT_FROG:
case MONS_GIANT_AMOEBA:
case MONS_GIANT_SLUG:
case MONS_GIANT_NEWT:
case MONS_GIANT_GECKO:
case MONS_RAT:
case MONS_SWAMP_DRAKE:
case MONS_WORM:
case MONS_SWAMP_WORM:
case MONS_GIANT_LEECH:
mlev++;
break;
case MONS_GIANT_TOAD:
case MONS_FUNGUS:
case MONS_NECROPHAGE:
case MONS_PLANT:
case MONS_SNAKE:
case MONS_BUTTERFLY:
case MONS_GIANT_LIZARD:
case MONS_GIANT_MOSQUITO:
case MONS_GIANT_SNAIL:
case MONS_HYDRA:
mlev += 2;
break;
case MONS_WATER_MOCCASIN:
case MONS_HUNGRY_GHOST:
case MONS_INSUBSTANTIAL_WISP:
case MONS_JELLY:
case MONS_KOMODO_DRAGON:
case MONS_PHANTOM:
case MONS_RED_WASP:
case MONS_SPINY_FROG:
case MONS_SWAMP_DRAGON:
case MONS_UGLY_THING:
mlev += 3;
break;
case MONS_BLINK_FROG:
case MONS_SLIME_CREATURE:
case MONS_VERY_UGLY_THING:
case MONS_VAPOUR:
case MONS_TENTACLED_MONSTROSITY:
mlev += 4;
break;
default:
mlev += 99;
}
return (mlev);
}
int mons_swamp_rare(int mcls)
{
switch (mcls)
{
case MONS_GIANT_MOSQUITO:
return 250;
case MONS_PLANT:
return 200;
case MONS_GIANT_FROG:
return 150;
case MONS_GIANT_BLOWFLY:
return 100;
case MONS_GIANT_BAT:
case MONS_FUNGUS:
return 99;
case MONS_GIANT_TOAD:
return 90;
case MONS_SWAMP_DRAKE:
return 80;
case MONS_HYDRA:
return 70;
case MONS_RAT:
case MONS_GIANT_LEECH:
return 61;
case MONS_SLIME_CREATURE:
return 54;
case MONS_SNAKE:
return 52;
case MONS_INSUBSTANTIAL_WISP:
return 43;
case MONS_WATER_MOCCASIN:
return 33;
case MONS_RED_WASP:
case MONS_SWAMP_DRAGON:
case MONS_SPINY_FROG:
return 30;
case MONS_JELLY:
case MONS_BUTTERFLY:
case MONS_GIANT_LIZARD:
return 25;
case MONS_WORM:
return 20;
case MONS_KOMODO_DRAGON:
case MONS_VERY_UGLY_THING:
case MONS_VAPOUR:
case MONS_MERMAID:
return 15;
case MONS_PHANTOM:
case MONS_UGLY_THING:
case MONS_HUNGRY_GHOST:
return 13;
case MONS_NECROPHAGE:
return 12;
case MONS_SIREN:
case MONS_BLINK_FROG:
case MONS_GIANT_AMOEBA:
case MONS_GIANT_GECKO:
case MONS_GIANT_NEWT:
case MONS_GIANT_SLUG:
case MONS_GIANT_SNAIL:
return 10;
case MONS_TENTACLED_MONSTROSITY:
return 5;
default:
return 0;
}
}
// The Shoals
int mons_shoals_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_SHOALS, 1);
switch (mcls)
{
case MONS_BUTTERFLY:
case MONS_GIANT_BAT:
break;
case MONS_MERFOLK:
case MONS_MERMAID:
case MONS_HIPPOGRIFF:
case MONS_CENTAUR:
case MONS_SEA_SNAKE:
mlev++;
break;
case MONS_MANTICORE:
case MONS_SNAPPING_TURTLE:
case MONS_HARPY:
mlev += 2;
break;
case MONS_CYCLOPS: // will have a sheep band
case MONS_SIREN:
case MONS_MERFOLK_IMPALER:
case MONS_MERFOLK_AQUAMANCER:
case MONS_MERFOLK_JAVELINEER:
case MONS_OKLOB_PLANT:
case MONS_SHARK:
case MONS_KRAKEN:
mlev += 3;
break;
case MONS_ALLIGATOR_SNAPPING_TURTLE:
mlev += 4;
break;
default:
mlev += 99;
}
return mlev;
}
int mons_shoals_rare(int mcls)
{
switch (mcls)
{
case MONS_MERFOLK:
return 90;
case MONS_SNAPPING_TURTLE:
return 45;
case MONS_MERMAID:
case MONS_MANTICORE:
case MONS_SEA_SNAKE:
return 40;
case MONS_HIPPOGRIFF:
case MONS_GIANT_BAT:
case MONS_BUTTERFLY:
return 35;
case MONS_SIREN:
case MONS_HARPY:
return 24;
case MONS_CYCLOPS:
case MONS_CENTAUR:
case MONS_MERFOLK_AQUAMANCER:
case MONS_MERFOLK_IMPALER:
case MONS_MERFOLK_JAVELINEER:
return 20;
case MONS_SHARK:
return 18;
case MONS_OKLOB_PLANT:
case MONS_KRAKEN:
case MONS_ALLIGATOR_SNAPPING_TURTLE:
return 10;
default:
return 0;
}
}
// The Snake Pit
int mons_pitsnake_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_SNAKE_PIT, 1);
switch (mcls)
{
case MONS_SMALL_SNAKE:
case MONS_SNAKE:
mlev++;
break;
case MONS_WATER_MOCCASIN:
case MONS_BLACK_MAMBA:
case MONS_VIPER:
case MONS_ANACONDA:
case MONS_NAGA:
mlev += 2;
break;
case MONS_NAGA_WARRIOR:
case MONS_NAGA_MAGE:
mlev += 3;
break;
case MONS_GUARDIAN_SERPENT:
mlev += 4;
break;
case MONS_GREATER_NAGA:
mlev += 5;
break;
default:
mlev += 99;
}
return (mlev);
}
int mons_pitsnake_rare(int mcls)
{
switch (mcls)
{
case MONS_SNAKE:
case MONS_WATER_MOCCASIN:
return 99;
case MONS_BLACK_MAMBA:
return 72;
case MONS_NAGA:
return 53;
case MONS_NAGA_WARRIOR:
case MONS_NAGA_MAGE:
return 34;
case MONS_VIPER:
case MONS_ANACONDA:
return 32;
case MONS_GREATER_NAGA:
case MONS_GUARDIAN_SERPENT:
case MONS_SMALL_SNAKE:
return 15;
default:
return 0;
}
}
// The Slime Pits
int mons_pitslime_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_SLIME_PITS, 1);
switch (mcls)
{
case MONS_JELLY:
case MONS_OOZE:
case MONS_ACID_BLOB:
case MONS_GIANT_SPORE:
case MONS_GIANT_EYEBALL:
mlev++;
break;
case MONS_BROWN_OOZE:
case MONS_SLIME_CREATURE:
case MONS_EYE_OF_DRAINING:
mlev += 2;
break;
case MONS_GIANT_AMOEBA:
case MONS_AZURE_JELLY:
case MONS_SHINING_EYE:
case MONS_GOLDEN_EYE:
mlev += 3;
break;
case MONS_PULSATING_LUMP:
case MONS_GREAT_ORB_OF_EYES:
case MONS_EYE_OF_DEVASTATION:
mlev += 4;
break;
case MONS_DEATH_OOZE:
case MONS_TENTACLED_MONSTROSITY:
case MONS_GIANT_ORANGE_BRAIN:
mlev += 5;
break;
case MONS_ROYAL_JELLY:
mlev += 6;
default:
mlev += 0;
break;
}
return (mlev);
}
int mons_pitslime_rare(int mcls)
{
switch (mcls)
{
case MONS_JELLY:
return 300;
case MONS_SLIME_CREATURE:
return 200;
case MONS_BROWN_OOZE:
return 150;
case MONS_GIANT_AMOEBA:
case MONS_ACID_BLOB:
return 100;
case MONS_OOZE:
case MONS_AZURE_JELLY:
case MONS_GIANT_SPORE:
case MONS_GIANT_EYEBALL:
case MONS_EYE_OF_DRAINING:
case MONS_SHINING_EYE:
return 50;
case MONS_DEATH_OOZE:
case MONS_GREAT_ORB_OF_EYES:
case MONS_EYE_OF_DEVASTATION:
case MONS_GOLDEN_EYE:
return 30;
case MONS_PULSATING_LUMP:
case MONS_GIANT_ORANGE_BRAIN:
return 20;
case MONS_TENTACLED_MONSTROSITY:
return 2;
default:
return 0;
}
}
// The Hive
int mons_hive_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_HIVE, 1);
switch (mcls)
{
case MONS_PLANT:
case MONS_KILLER_BEE:
mlev += 0;
break;
case MONS_KILLER_BEE_LARVA:
mlev++;
break;
default:
return 99;
}
return (mlev);
}
int mons_hive_rare(int mcls)
{
switch (mcls)
{
case MONS_KILLER_BEE:
return 300;
case MONS_PLANT:
return 100;
case MONS_KILLER_BEE_LARVA:
return 50;
default:
return 0;
}
}
// The Hall of Blades
int mons_hallblade_level(int mcls)
{
if (mcls == MONS_DANCING_WEAPON)
return absdungeon_depth(BRANCH_HALL_OF_BLADES, 1);
else
return 0;
}
int mons_hallblade_rare(int mcls)
{
return ((mcls == MONS_DANCING_WEAPON) ? 1000 : 0);
}
// The Crypt
int mons_crypt_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_CRYPT, 1);
switch (mcls)
{
case MONS_ZOMBIE_SMALL:
mlev += 0;
break;
case MONS_PHANTOM:
case MONS_SKELETON_SMALL:
case MONS_SKELETON_LARGE:
case MONS_ZOMBIE_LARGE:
case MONS_WIGHT:
mlev++;
break;
case MONS_SHADOW:
case MONS_HUNGRY_GHOST:
case MONS_NECROPHAGE:
case MONS_SKELETAL_WARRIOR:
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
mlev += 2;
break;
case MONS_NECROMANCER:
case MONS_PULSATING_LUMP:
case MONS_FLAYED_GHOST:
case MONS_FREEZING_WRAITH:
case MONS_GHOUL:
case MONS_ROTTING_HULK:
case MONS_WRAITH:
case MONS_FLYING_SKULL:
mlev += 3;
break;
case MONS_FLAMING_CORPSE:
case MONS_SPECTRAL_WARRIOR:
case MONS_SHADOW_WRAITH:
case MONS_VAMPIRE_KNIGHT:
case MONS_VAMPIRE_MAGE:
case MONS_SKELETAL_DRAGON:
case MONS_ABOMINATION_SMALL:
case MONS_MUMMY:
case MONS_VAMPIRE:
case MONS_ABOMINATION_LARGE:
mlev += 4;
break;
case MONS_REAPER:
case MONS_ANCIENT_LICH:
case MONS_LICH:
case MONS_CURSE_SKULL:
mlev += 5;
break;
default:
mlev += 99;
}
return (mlev);
}
int mons_crypt_rare(int mcls)
{
switch (mcls)
{
case MONS_ZOMBIE_SMALL:
case MONS_SKELETON_SMALL:
case MONS_SKELETON_LARGE:
return 410;
case MONS_ZOMBIE_LARGE:
return 300;
case MONS_SKELETAL_WARRIOR:
return 75;
case MONS_NECROPHAGE:
return 50;
case MONS_WIGHT:
return 35;
case MONS_WRAITH:
return 33;
case MONS_SHADOW:
return 30;
case MONS_NECROMANCER:
case MONS_GHOUL:
return 25;
case MONS_MUMMY:
case MONS_SKELETAL_DRAGON:
return 24;
case MONS_VAMPIRE:
case MONS_PHANTOM:
return 21;
case MONS_VAMPIRE_KNIGHT:
case MONS_VAMPIRE_MAGE:
return 20;
case MONS_ROTTING_HULK:
return 17;
case MONS_SPECTRAL_WARRIOR:
return 14;
case MONS_FLYING_SKULL:
case MONS_FLAYED_GHOST:
case MONS_FREEZING_WRAITH:
return 13;
case MONS_FLAMING_CORPSE:
case MONS_HUNGRY_GHOST:
return 12;
case MONS_SHADOW_WRAITH:
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
return 10;
case MONS_ANCIENT_LICH:
return 8;
case MONS_ABOMINATION_SMALL:
case MONS_LICH:
case MONS_REAPER:
return 5;
case MONS_ABOMINATION_LARGE:
return 4;
case MONS_PULSATING_LUMP:
return 3;
default:
return 0;
}
}
// The Tomb
int mons_tomb_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_TOMB, 1);
switch (mcls)
{
case MONS_ZOMBIE_SMALL:
mlev += 0;
break;
case MONS_MUMMY:
case MONS_ZOMBIE_LARGE:
case MONS_SKELETON_SMALL:
case MONS_SKELETON_LARGE:
case MONS_TRAPDOOR_SPIDER:
mlev++;
break;
case MONS_GUARDIAN_MUMMY:
case MONS_FLYING_SKULL:
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
mlev += 2;
break;
case MONS_LICH:
case MONS_ANCIENT_LICH:
case MONS_MUMMY_PRIEST:
mlev += 3;
break;
case MONS_GREATER_MUMMY:
mlev += 4;
break;
default:
mlev += 99;
}
return (mlev);
}
int mons_tomb_rare(int mcls)
{
switch (mcls)
{
case MONS_MUMMY:
return 300;
case MONS_GUARDIAN_MUMMY:
return 202;
case MONS_MUMMY_PRIEST:
return 40;
case MONS_FLYING_SKULL:
return 33;
case MONS_ZOMBIE_LARGE:
case MONS_SKELETON_SMALL:
case MONS_SKELETON_LARGE:
return 21;
case MONS_ZOMBIE_SMALL:
return 20;
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
return 10;
case MONS_LICH:
return 4;
case MONS_ANCIENT_LICH:
return 2;
// A nod to the fabled pyramid traps, these should be really rare.
case MONS_TRAPDOOR_SPIDER:
return 1;
default:
return 0;
}
}
// The Halls of Zot
int mons_hallzot_level(int mcls)
{
int mlev = absdungeon_depth(BRANCH_HALL_OF_ZOT, 0);
switch (mcls)
{
case MONS_GOLDEN_DRAGON:
case MONS_GUARDIAN_MUMMY:
mlev += 6;
break;
case MONS_KILLER_KLOWN:
case MONS_SHADOW_DRAGON:
case MONS_SKELETAL_DRAGON:
case MONS_STORM_DRAGON:
case MONS_CURSE_TOE:
case MONS_ORB_GUARDIAN:
mlev += 5;
break;
case MONS_DEATH_COB:
case MONS_DRAGON:
case MONS_ICE_DRAGON:
mlev += 4;
break;
case MONS_MOTTLED_DRACONIAN:
case MONS_YELLOW_DRACONIAN:
case MONS_BLACK_DRACONIAN:
case MONS_WHITE_DRACONIAN:
case MONS_RED_DRACONIAN:
case MONS_PURPLE_DRACONIAN:
case MONS_PALE_DRACONIAN:
case MONS_GREEN_DRACONIAN:
case MONS_DRACONIAN_CALLER:
case MONS_DRACONIAN_MONK:
case MONS_DRACONIAN_SCORCHER:
case MONS_DRACONIAN_KNIGHT:
case MONS_DRACONIAN_ANNIHILATOR:
case MONS_DRACONIAN_ZEALOT:
case MONS_DRACONIAN_SHIFTER:
case MONS_TENTACLED_MONSTROSITY:
mlev += 3;
break;
case MONS_MOTH_OF_WRATH:
mlev += 2;
break;
case MONS_ORB_OF_FIRE:
case MONS_ELECTRIC_GOLEM:
mlev += 1;
break;
default:
mlev += 99; // I think this won't be a problem {dlb}
break;
}
return (mlev);
}
int mons_hallzot_rare(int mcls)
{
switch (mcls)
{
case MONS_MOTH_OF_WRATH:
return 88;
case MONS_STORM_DRAGON:
case MONS_TENTACLED_MONSTROSITY:
return 50;
case MONS_GOLDEN_DRAGON:
return 42;
case MONS_DEATH_COB:
case MONS_DRAGON:
case MONS_ICE_DRAGON:
case MONS_SKELETAL_DRAGON:
return 40;
case MONS_SHADOW_DRAGON:
case MONS_DEATH_DRAKE:
return 30;
case MONS_GUARDIAN_MUMMY:
case MONS_ELECTRIC_GOLEM:
case MONS_CURSE_TOE:
return 20;
case MONS_MOTTLED_DRACONIAN:
case MONS_YELLOW_DRACONIAN:
case MONS_BLACK_DRACONIAN:
case MONS_WHITE_DRACONIAN:
case MONS_RED_DRACONIAN:
case MONS_PURPLE_DRACONIAN:
case MONS_PALE_DRACONIAN:
case MONS_GREEN_DRACONIAN:
return 18;
case MONS_DRACONIAN_CALLER:
case MONS_DRACONIAN_MONK:
case MONS_DRACONIAN_SCORCHER:
case MONS_DRACONIAN_KNIGHT:
case MONS_DRACONIAN_ANNIHILATOR:
case MONS_DRACONIAN_ZEALOT:
case MONS_DRACONIAN_SHIFTER:
return 16;
case MONS_KILLER_KLOWN:
case MONS_ORB_OF_FIRE:
return 15;
default:
return 0;
}
}
// The Hells
// The Iron City of Dis
int mons_dis_level(int mcls)
{
int mlev = 26;
switch (mcls)
{
case MONS_CLAY_GOLEM:
case MONS_IMP:
case MONS_NECROPHAGE:
case MONS_RED_DEVIL:
case MONS_SKELETAL_WARRIOR:
case MONS_ZOMBIE_LARGE:
mlev++;
break;
case MONS_HELL_HOUND:
case MONS_HELL_KNIGHT:
case MONS_SKELETON_LARGE:
case MONS_PHANTOM:
case MONS_ROTTING_DEVIL:
case MONS_SHADOW:
case MONS_SKELETON_SMALL:
case MONS_STONE_GOLEM:
case MONS_TORMENTOR:
case MONS_WIGHT:
case MONS_ZOMBIE_SMALL:
mlev += 2;
break;
case MONS_EFREET:
case MONS_FLYING_SKULL:
case MONS_HELLION:
case MONS_HELL_HOG:
case MONS_IRON_GOLEM:
case MONS_MUMMY:
mlev += 3;
break;
case MONS_FLAYED_GHOST:
case MONS_FREEZING_WRAITH:
case MONS_DEATH_DRAKE:
case MONS_HAIRY_DEVIL:
case MONS_IRON_DEVIL:
case MONS_VAMPIRE:
case MONS_WRAITH:
mlev += 3;
break;
case MONS_BLUE_DEVIL:
case MONS_DANCING_WEAPON:
case MONS_FLAMING_CORPSE:
case MONS_ICE_DEVIL:
case MONS_ICE_DRAGON:
case MONS_LICH:
case MONS_REAPER:
case MONS_SOUL_EATER:
case MONS_SPECTRAL_WARRIOR:
mlev += 5;
break;
case MONS_ANCIENT_LICH:
case MONS_FIEND:
case MONS_IRON_DRAGON:
case MONS_SKELETAL_DRAGON:
mlev += 6;
break;
default:
return 0;
}
return (mlev);
}
int mons_dis_rare(int mcls)
{
switch (mcls)
{
case MONS_IMP:
case MONS_IRON_DEVIL:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
return 99;
case MONS_REAPER:
return 77;
case MONS_TORMENTOR:
return 66;
case MONS_RED_DEVIL:
case MONS_SKELETAL_WARRIOR:
return 50;
case MONS_WRAITH:
return 48;
case MONS_SHADOW:
return 56;
case MONS_HELL_HOUND:
return 46;
case MONS_MUMMY:
case MONS_WIGHT:
return 45;
case MONS_HELLION:
case MONS_BLUE_DEVIL:
return 40;
case MONS_FLYING_SKULL:
return 35;
case MONS_FREEZING_WRAITH:
case MONS_ICE_DEVIL:
return 30;
case MONS_FLAMING_CORPSE:
case MONS_FLAYED_GHOST:
case MONS_SKELETON_LARGE:
case MONS_NECROPHAGE:
case MONS_SKELETON_SMALL:
return 25;
case MONS_HELL_HOG:
case MONS_SKELETAL_DRAGON:
return 20;
case MONS_VAMPIRE:
return 19;
case MONS_PHANTOM:
return 17;
case MONS_HAIRY_DEVIL:
return 15;
case MONS_CLAY_GOLEM:
case MONS_DANCING_WEAPON:
case MONS_EFREET:
case MONS_HELL_KNIGHT:
case MONS_IRON_GOLEM:
case MONS_LICH:
case MONS_ROTTING_DEVIL:
case MONS_SOUL_EATER:
case MONS_SPECTRAL_WARRIOR:
case MONS_STONE_GOLEM:
return 10;
case MONS_IRON_DRAGON:
return 5;
case MONS_ANCIENT_LICH:
case MONS_FIEND:
return 3;
default:
return 0;
}
}
// Gehenna - the fire hell
int mons_gehenna_level(int mcls)
{
int mlev = 26;
switch (mcls)
{
case MONS_CLAY_GOLEM:
case MONS_SKELETON_LARGE:
case MONS_RED_DEVIL:
case MONS_SKELETON_SMALL:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
mlev++;
break;
case MONS_HELL_HOG:
case MONS_HELL_HOUND:
case MONS_IMP:
case MONS_NECROPHAGE:
case MONS_STONE_GOLEM:
mlev += 2;
break;
case MONS_FLYING_SKULL:
case MONS_IRON_GOLEM:
case MONS_MUMMY:
case MONS_PHANTOM:
case MONS_ROTTING_DEVIL:
case MONS_SHADOW:
case MONS_WIGHT:
mlev += 3;
break;
case MONS_HAIRY_DEVIL:
case MONS_HELL_KNIGHT:
case MONS_VAMPIRE:
case MONS_WRAITH:
mlev += 4;
break;
case MONS_EFREET:
case MONS_FLAMING_CORPSE:
case MONS_FLAYED_GHOST:
case MONS_HELLION:
case MONS_TORMENTOR:
mlev += 5;
break;
case MONS_ANCIENT_LICH:
case MONS_FIEND:
case MONS_LICH:
case MONS_PIT_FIEND:
case MONS_REAPER:
case MONS_SERPENT_OF_HELL:
case MONS_SKELETAL_DRAGON:
case MONS_SOUL_EATER:
case MONS_SPECTRAL_WARRIOR:
mlev += 6;
break;
default:
return 0;
}
return (mlev);
}
int mons_gehenna_rare(int mcls)
{
switch (mcls)
{
case MONS_SKELETON_LARGE:
case MONS_SKELETON_SMALL:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
return 99;
case MONS_MUMMY:
return 70;
case MONS_SHADOW:
return 61;
case MONS_RED_DEVIL:
case MONS_WIGHT:
return 60;
case MONS_HELLION:
return 54;
case MONS_WRAITH:
return 53;
case MONS_NECROPHAGE:
case MONS_ROTTING_DEVIL:
return 50;
case MONS_VAMPIRE:
return 44;
case MONS_FLYING_SKULL:
case MONS_REAPER:
return 43;
case MONS_TORMENTOR:
return 42;
case MONS_HELL_HOUND:
return 41;
case MONS_FLAMING_CORPSE:
case MONS_FLAYED_GHOST:
case MONS_PHANTOM:
return 32;
case MONS_HELL_HOG:
case MONS_IMP:
case MONS_IRON_DEVIL:
return 30;
case MONS_LICH:
return 25;
case MONS_HELL_KNIGHT:
return 21;
case MONS_HAIRY_DEVIL:
case MONS_SPECTRAL_WARRIOR:
return 20;
case MONS_CLAY_GOLEM:
case MONS_SKELETAL_DRAGON:
return 10;
case MONS_STONE_GOLEM:
return 8;
case MONS_PIT_FIEND:
return 7;
case MONS_EFREET:
case MONS_FIEND:
case MONS_IRON_GOLEM:
case MONS_SOUL_EATER:
return 5;
case MONS_ANCIENT_LICH:
case MONS_SERPENT_OF_HELL:
return 4;
default:
return 0;
}
}
// Cocytus - the ice hell
int mons_cocytus_level(int mcls)
{
int mlev = 26;
switch (mcls)
{
case MONS_SKELETON_LARGE:
case MONS_NECROPHAGE:
case MONS_SKELETAL_WARRIOR:
case MONS_SKELETON_SMALL:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
case MONS_SIMULACRUM_LARGE:
case MONS_SIMULACRUM_SMALL:
mlev++;
break;
case MONS_BLUE_DEVIL:
case MONS_ICE_BEAST:
case MONS_PHANTOM:
case MONS_SHADOW:
mlev += 2;
break;
case MONS_FLYING_SKULL:
case MONS_ROTTING_DEVIL:
case MONS_VAMPIRE:
case MONS_WIGHT:
mlev += 3;
break;
case MONS_FREEZING_WRAITH:
case MONS_HAIRY_DEVIL:
case MONS_HUNGRY_GHOST:
case MONS_MUMMY:
case MONS_SPECTRAL_WARRIOR:
case MONS_WRAITH:
mlev += 4;
break;
case MONS_ICE_DEVIL:
case MONS_ICE_DRAGON:
case MONS_TORMENTOR:
mlev += 5;
break;
case MONS_ANCIENT_LICH:
case MONS_LICH:
case MONS_REAPER:
case MONS_SKELETAL_DRAGON:
case MONS_SOUL_EATER:
mlev += 6;
break;
default:
return 0;
}
return (mlev);
}
int mons_cocytus_rare(int mcls)
{
switch (mcls)
{
case MONS_FREEZING_WRAITH:
return 87;
case MONS_ICE_BEAST:
case MONS_SKELETON_LARGE:
case MONS_SKELETON_SMALL:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
return 85;
case MONS_BLUE_DEVIL:
case MONS_ICE_DEVIL:
return 76;
case MONS_FLYING_SKULL:
return 57;
case MONS_SHADOW:
return 56;
case MONS_SKELETAL_WARRIOR:
return 50;
case MONS_REAPER:
return 47;
case MONS_WIGHT:
case MONS_WRAITH:
return 45;
case MONS_ICE_DRAGON:
return 38;
case MONS_ROTTING_DEVIL:
case MONS_TORMENTOR:
return 37;
case MONS_MUMMY:
return 35;
case MONS_VAMPIRE:
return 34;
case MONS_HAIRY_DEVIL:
case MONS_HUNGRY_GHOST:
return 26;
case MONS_NECROPHAGE:
case MONS_PHANTOM:
return 25;
case MONS_SPECTRAL_WARRIOR:
return 20;
case MONS_SOUL_EATER:
return 19;
case MONS_LICH:
case MONS_SKELETAL_DRAGON:
case MONS_SIMULACRUM_LARGE:
case MONS_SIMULACRUM_SMALL:
return 12;
case MONS_ANCIENT_LICH:
return 5;
default:
return 0;
}
}
// Tartarus - the undead hell
int mons_tartarus_level(int mcls)
{
int mlev = 26;
switch (mcls)
{
case MONS_IMP:
case MONS_SKELETON_LARGE:
case MONS_RED_DEVIL:
case MONS_SHADOW_IMP:
case MONS_SKELETAL_WARRIOR:
case MONS_SKELETON_SMALL:
mlev++;
break;
case MONS_HELL_KNIGHT:
case MONS_NECROPHAGE:
case MONS_PHANTOM:
case MONS_WIGHT:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
mlev += 2;
break;
case MONS_FREEZING_WRAITH:
case MONS_HELL_HOUND:
case MONS_NECROMANCER:
case MONS_SHADOW:
case MONS_SHADOW_DEMON:
case MONS_WRAITH:
mlev += 3;
break;
case MONS_BLUE_DEVIL:
case MONS_FLAYED_GHOST:
case MONS_HUNGRY_GHOST:
case MONS_ICE_DEVIL:
case MONS_MUMMY:
case MONS_SKELETAL_DRAGON:
case MONS_SPECTRAL_WARRIOR:
case MONS_TORMENTOR:
case MONS_SIMULACRUM_LARGE:
case MONS_SIMULACRUM_SMALL:
mlev += 4;
break;
case MONS_FLYING_SKULL:
case MONS_HELLION:
case MONS_REAPER:
case MONS_ROTTING_DEVIL:
case MONS_SHADOW_DRAGON:
case MONS_VAMPIRE:
mlev += 5;
break;
case MONS_ANCIENT_LICH:
case MONS_HAIRY_DEVIL:
case MONS_LICH:
case MONS_SOUL_EATER:
mlev += 6;
break;
default:
return 0;
}
return (mlev);
}
int mons_tartarus_rare(int mcls)
{
switch (mcls)
{
case MONS_SKELETON_LARGE:
case MONS_SHADOW_IMP:
case MONS_SKELETAL_WARRIOR:
case MONS_SKELETON_SMALL:
case MONS_ZOMBIE_LARGE:
case MONS_ZOMBIE_SMALL:
return 99;
case MONS_SHADOW:
return 92;
case MONS_REAPER:
return 73;
case MONS_NECROPHAGE:
return 72;
case MONS_WIGHT:
return 71;
case MONS_ROTTING_DEVIL:
return 62;
case MONS_FREEZING_WRAITH:
return 60;
case MONS_FLYING_SKULL:
return 53;
case MONS_HELL_HOUND:
case MONS_PHANTOM:
case MONS_WRAITH:
return 52;
case MONS_SHADOW_DEMON:
return 50;
case MONS_SPECTRAL_WARRIOR:
return 45;
case MONS_VAMPIRE:
return 44;
case MONS_HELLION:
case MONS_TORMENTOR:
return 42;
case MONS_SKELETAL_DRAGON:
return 40;
case MONS_SOUL_EATER:
return 35;
case MONS_ICE_DEVIL:
return 34;
case MONS_MUMMY:
return 33;
case MONS_BLUE_DEVIL:
case MONS_HUNGRY_GHOST:
return 32;
case MONS_FLAYED_GHOST:
case MONS_HAIRY_DEVIL:
return 30;
case MONS_LICH:
return 24;
case MONS_IMP:
case MONS_SHADOW_DRAGON:
case MONS_DEATH_DRAKE:
return 20;
case MONS_RED_DEVIL:
return 13;
case MONS_HELL_KNIGHT:
return 14;
case MONS_NECROMANCER:
case MONS_SIMULACRUM_LARGE:
case MONS_SIMULACRUM_SMALL:
return 12;
case MONS_ANCIENT_LICH:
return 6;
default:
return 0;
}
}