summaryrefslogtreecommitdiffstats
path: root/stone_soup/crawl-ref/source/describe.cc
diff options
context:
space:
mode:
Diffstat (limited to 'stone_soup/crawl-ref/source/describe.cc')
-rw-r--r--stone_soup/crawl-ref/source/describe.cc6799
1 files changed, 0 insertions, 6799 deletions
diff --git a/stone_soup/crawl-ref/source/describe.cc b/stone_soup/crawl-ref/source/describe.cc
deleted file mode 100644
index 8179802ae9..0000000000
--- a/stone_soup/crawl-ref/source/describe.cc
+++ /dev/null
@@ -1,6799 +0,0 @@
-/*
- * File: describe.cc
- * Summary: Functions used to print information about various game objects.
- * Written by: Linley Henzell
- *
- * Change History (most recent first):
- *
- * <4> 10/14/99 BCR enummed describe_god()
- * <3> 10/13/99 BCR Added GOD_NO_GOD case in describe_god()
- * <2> 5/20/99 BWR Replaced is_artifact with
- * is_dumpable_artifact
- * <1> 4/20/99 JDJ Reformatted, uses string objects,
- * split out 10 new functions from
- * describe_item(), added
- * get_item_description and
- * is_artifact.
- */
-
-#include "AppHdr.h"
-#include "describe.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string>
-
-#ifdef DOS
-#include <conio.h>
-#endif
-
-#include "externs.h"
-
-#include "abl-show.h"
-#include "debug.h"
-#include "fight.h"
-#include "itemname.h"
-#include "itemprop.h"
-#include "macro.h"
-#include "mon-util.h"
-#include "player.h"
-#include "randart.h"
-#include "religion.h"
-#include "skills2.h"
-#include "spl-book.h"
-#include "stuff.h"
-#include "wpn-misc.h"
-#include "spl-util.h"
-
-
-// ========================================================================
-// Internal Functions
-// ========================================================================
-
-//---------------------------------------------------------------
-//
-// append_value
-//
-// Appends a value to the string. If plussed == 1, will add a + to
-// positive values (itoa always adds - to -ve ones).
-//
-//---------------------------------------------------------------
-static void append_value( std::string & description, int valu, bool plussed )
-{
- if (valu >= 0 && plussed == 1)
- description += "+";
-
- char value_str[80];
-
- itoa( valu, value_str, 10 );
-
- description += value_str;
-} // end append_value()
-
-//---------------------------------------------------------------
-//
-// print_description
-//
-// Takes a descpr string filled up with stuff from other functions,
-// and displays it with minor formatting to avoid cut-offs in mid
-// word and such. The character $ is interpreted as a CR.
-//
-//---------------------------------------------------------------
-static void print_description( const std::string &d )
-{
- unsigned int nextLine = std::string::npos;
- unsigned int currentPos = 0;
-
-#ifdef DOS
- const unsigned int lineWidth = 52;
-#else
- const unsigned int lineWidth = 70;
-#endif
-
- bool nlSearch = true; // efficiency
-
- textcolor(LIGHTGREY);
-
- while(currentPos < d.length())
- {
- if (currentPos != 0)
- {
-#ifdef PLAIN_TERM
- gotoxy(1, wherey() + 1);
-#endif
-#ifdef DOS_TERM
- cprintf(EOL);
-#endif
- }
-
- // see if $ sign is within one lineWidth
- if (nlSearch)
- {
- nextLine = d.find('$', currentPos);
-
- if (nextLine >= currentPos && nextLine < currentPos + lineWidth)
- {
- cprintf((d.substr(currentPos, nextLine - currentPos)).c_str());
- currentPos = nextLine + 1;
- continue;
- }
-
- if (nextLine == std::string::npos)
- nlSearch = false; // there are no newlines, don't search again.
- }
-
- // no newline -- see if rest of string will fit.
- if (currentPos + lineWidth >= d.length())
- {
- cprintf((d.substr(currentPos)).c_str());
- return;
- }
-
-
- // ok.. try to truncate at space.
- nextLine = d.rfind(' ', currentPos + lineWidth);
-
- if (nextLine > 0)
- {
- cprintf((d.substr(currentPos, nextLine - currentPos)).c_str());
- currentPos = nextLine + 1;
- continue;
- }
-
- // oops. just truncate.
- nextLine = currentPos + lineWidth;
-
- if (nextLine > d.length())
- nextLine = d.length();
-
- cprintf((d.substr(currentPos, nextLine - currentPos)).c_str());
- currentPos = nextLine;
- }
-}
-
-//---------------------------------------------------------------
-//
-// randart_descpr
-//
-// Appends the various powers of a random artefact to the description
-// string.
-//
-//---------------------------------------------------------------
-static void randart_descpr( std::string &description, const item_def &item )
-{
- unsigned int old_length = description.length();
-
- FixedVector< char, RA_PROPERTIES > proprt;
- randart_wpn_properties( item, proprt );
-
- if (proprt[ RAP_AC ])
- {
- description += "$It affects your AC (";
- append_value(description, proprt[ RAP_AC ], true);
- description += ").";
- }
-
- if (proprt[ RAP_EVASION ])
- {
- description += "$It affects your evasion (";
- append_value(description, proprt[ RAP_EVASION ], true);
- description += ").";
- }
-
- if (proprt[ RAP_STRENGTH ])
- {
- description += "$It affects your strength (";
- append_value(description, proprt[ RAP_STRENGTH ], true);
- description += ").";
- }
-
- if (proprt[ RAP_INTELLIGENCE ])
- {
- description += "$It affects your intelligence (";
- append_value(description, proprt[ RAP_INTELLIGENCE ], true);
- description += ").";
- }
-
- if (proprt[ RAP_DEXTERITY ])
- {
- description += "$It affects your dexterity (";
- append_value(description, proprt[ RAP_DEXTERITY ], true);
- description += ").";
- }
-
- if (proprt[ RAP_ACCURACY ])
- {
- description += "$It affects your accuracy (";
- append_value(description, proprt[ RAP_ACCURACY ], true);
- description += ").";
- }
-
- if (proprt[ RAP_DAMAGE ])
- {
- description += "$It affects your damage-dealing abilities (";
- append_value(description, proprt[ RAP_DAMAGE ], true);
- description += ").";
- }
-
- if (proprt[ RAP_FIRE ] < -2)
- description += "$It makes you highly vulnerable to fire. ";
- else if (proprt[ RAP_FIRE ] == -2)
- description += "$It makes you greatly susceptible to fire. ";
- else if (proprt[ RAP_FIRE ] == -1)
- description += "$It makes you susceptible to fire. ";
- else if (proprt[ RAP_FIRE ] == 1)
- description += "$It protects you from fire. ";
- else if (proprt[ RAP_FIRE ] == 2)
- description += "$It greatly protects you from fire. ";
- else if (proprt[ RAP_FIRE ] > 2)
- description += "$It renders you almost immune to fire. ";
-
- if (proprt[ RAP_COLD ] < -2)
- description += "$It makes you highly susceptible to cold. ";
- else if (proprt[ RAP_COLD ] == -2)
- description += "$It makes you greatly susceptible to cold. ";
- else if (proprt[ RAP_COLD ] == -1)
- description += "$It makes you susceptible to cold. ";
- else if (proprt[ RAP_COLD ] == 1)
- description += "$It protects you from cold. ";
- else if (proprt[ RAP_COLD ] == 2)
- description += "$It greatly protects you from cold. ";
- else if (proprt[ RAP_COLD ] > 2)
- description += "$It renders you almost immune to cold. ";
-
- if (proprt[ RAP_ELECTRICITY ])
- description += "$It insulates you from electricity. ";
-
- if (proprt[ RAP_POISON ])
- description += "$It protects you from poison. ";
-
- if (proprt[ RAP_NEGATIVE_ENERGY ] == 1)
- description += "$It partially protects you from negative energy. ";
- else if (proprt[ RAP_NEGATIVE_ENERGY ] == 2)
- description += "$It protects you from negative energy. ";
- else if (proprt[ RAP_NEGATIVE_ENERGY ] > 2)
- description += "$It renders you almost immune negative energy. ";
-
- if (proprt[ RAP_MAGIC ])
- description += "$It protects you from magic. ";
-
- if (proprt[ RAP_STEALTH ] < 0)
- {
- if (proprt[ RAP_STEALTH ] < -20)
- description += "$It makes you much less stealthy. ";
- else
- description += "$It makes you less stealthy. ";
- }
- else if (proprt[ RAP_STEALTH ] > 0)
- {
- if (proprt[ RAP_STEALTH ] > 20)
- description += "$It makes you much more stealthy. ";
- else
- description += "$It makes you more stealthy. ";
- }
-
- if (proprt[ RAP_EYESIGHT ])
- description += "$It enhances your eyesight. ";
-
- if (proprt[ RAP_INVISIBLE ])
- description += "$It lets you turn invisible. ";
-
- if (proprt[ RAP_LEVITATE ])
- description += "$It lets you levitate. ";
-
- if (proprt[ RAP_BLINK ])
- description += "$It lets you blink. ";
-
- if (proprt[ RAP_CAN_TELEPORT ])
- description += "$It lets you teleport. ";
-
- if (proprt[ RAP_BERSERK ])
- description += "$It lets you go berserk. ";
-
- if (proprt[ RAP_MAPPING ])
- description += "$It lets you sense your surroundings. ";
-
- if (proprt[ RAP_NOISES ])
- description += "$It makes noises. ";
-
- if (proprt[ RAP_PREVENT_SPELLCASTING ])
- description += "$It prevents spellcasting. ";
-
- if (proprt[ RAP_CAUSE_TELEPORTATION ])
- description += "$It causes teleportation. ";
-
- if (proprt[ RAP_PREVENT_TELEPORTATION ])
- description += "$It prevents most forms of teleportation. ";
-
- if (proprt[ RAP_ANGRY ])
- description += "$It makes you angry. ";
-
- if (proprt[ RAP_METABOLISM ] >= 3)
- description += "$It greatly speeds your metabolism. ";
- else if (proprt[ RAP_METABOLISM ])
- description += "$It speeds your metabolism. ";
-
- if (proprt[ RAP_MUTAGENIC ] > 3)
- description += "$It glows with mutagenic radiation.";
- else if (proprt[ RAP_MUTAGENIC ])
- description += "$It emits mutagenic radiations.";
-
- if (old_length != description.length())
- description += "$";
-
- if (is_unrandom_artefact( item ))
- {
- const char *desc = unrandart_descrip( 0, item );
- if (strlen( desc ) > 0)
- {
- description += desc;
- description += "$";
- }
- }
-}
-
-
-//---------------------------------------------------------------
-//
-// describe_demon
-//
-// Describes the random demons you find in Pandemonium.
-//
-//---------------------------------------------------------------
-static std::string describe_demon(void)
-{
- long globby = 0;
-
- for (unsigned int i = 0; i < strlen( ghost.name ); i++)
- globby += ghost.name[i];
-
- globby *= strlen( ghost.name );
-
- push_rng_state();
- seed_rng( globby );
-
- std::string description = "A powerful demon, ";
-
- description += ghost.name;
- description += " has a";
-
- switch (random2(31))
- {
- case 0:
- description += " huge, barrel-shaped ";
- break;
- case 1:
- description += " wispy, insubstantial ";
- break;
- case 2:
- description += " spindly ";
- break;
- case 3:
- description += " skeletal ";
- break;
- case 4:
- description += " horribly deformed ";
- break;
- case 5:
- description += " spiny ";
- break;
- case 6:
- description += " waif-like ";
- break;
- case 7:
- description += " scaly ";
- break;
- case 8:
- description += " sickeningly deformed ";
- break;
- case 9:
- description += " bruised and bleeding ";
- break;
- case 10:
- description += " sickly ";
- break;
- case 11:
- description += " mass of writhing tentacles for a ";
- break;
- case 12:
- description += " mass of ropey tendrils for a ";
- break;
- case 13:
- description += " tree trunk-like ";
- break;
- case 14:
- description += " hairy ";
- break;
- case 15:
- description += " furry ";
- break;
- case 16:
- description += " fuzzy ";
- break;
- case 17:
- description += "n obese ";
- break;
- case 18:
- description += " fat ";
- break;
- case 19:
- description += " slimy ";
- break;
- case 20:
- description += " wrinkled ";
- break;
- case 21:
- description += " metallic ";
- break;
- case 22:
- description += " glassy ";
- break;
- case 23:
- description += " crystalline ";
- break;
- case 24:
- description += " muscular ";
- break;
- case 25:
- description += "n icky ";
- break;
- case 26:
- description += " swollen ";
- break;
- case 27:
- description += " lumpy ";
- break;
- case 28:
- description += " armoured ";
- break;
- case 29:
- description += " carapaced ";
- break;
- case 30:
- description += " slender ";
- break;
- }
-
- description += "body";
-
-
- switch (ghost.values[GVAL_DEMONLORD_FLY])
- {
- case 1: // proper flight
- switch (random2(10))
- {
- case 0:
- description += " with small insectoid wings";
- break;
- case 1:
- description += " with large insectoid wings";
- break;
- case 2:
- description += " with moth-like wings";
- break;
- case 3:
- description += " with butterfly wings";
- break;
- case 4:
- description += " with huge, bat-like wings";
- break;
- case 5:
- description += " with fleshy wings";
- break;
- case 6:
- description += " with small, bat-like wings";
- break;
- case 7:
- description += " with hairy wings";
- break;
- case 8:
- description += " with great feathered wings";
- break;
- case 9:
- description += " with shiny metal wings";
- break;
- default:
- break;
- }
- break;
-
- case 2: // levitation
- if (coinflip())
- description += " which hovers in mid-air";
- else
- description += " with sacs of gas hanging from its back";
- break;
-
- default: // does not fly
- switch (random2(40))
- {
- default:
- break;
- case 12:
- description += " covered in tiny crawling spiders";
- break;
- case 13:
- description += " covered in tiny crawling insects";
- break;
- case 14:
- description += " and the head of a crocodile";
- break;
- case 15:
- description += " and the head of a hippopotamus";
- break;
- case 16:
- description += " and a cruel curved beak for a mouth";
- break;
- case 17:
- description += " and a straight sharp beak for a mouth";
- break;
- case 18:
- description += " and no head at all";
- break;
- case 19:
- description += " and a hideous tangle of tentacles for a mouth";
- break;
- case 20:
- description += " and an elephantine trunk";
- break;
- case 21:
- description += " and an evil-looking proboscis";
- break;
- case 22:
- description += " and dozens of eyes";
- break;
- case 23:
- description += " and two ugly heads";
- break;
- case 24:
- description += " and a long serpentine tail";
- break;
- case 25:
- description += " and a pair of huge tusks growing from its jaw";
- break;
- case 26:
- description +=
- " and a single huge eye, in the centre of its forehead";
- break;
- case 27:
- description += " and spikes of black metal for teeth";
- break;
- case 28:
- description += " and a disc-shaped sucker for a head";
- break;
- case 29:
- description += " and huge, flapping ears";
- break;
- case 30:
- description += " and a huge, toothy maw in the centre of its chest";
- break;
- case 31:
- description += " and a giant snail shell on its back";
- break;
- case 32:
- description += " and a dozen heads";
- break;
- case 33:
- description += " and the head of a jackal";
- break;
- case 34:
- description += " and the head of a baboon";
- break;
- case 35:
- description += " and a huge, slobbery tongue";
- break;
- case 36:
- description += " which is covered in oozing lacerations";
- break;
- case 37:
- description += " and the head of a frog";
- break;
- case 38:
- description += " and the head of a yak";
- break;
- case 39:
- description += " and eyes out on stalks";
- break;
- }
- break;
- }
-
- description += ".";
-
- switch (random2(40) + (you.species == SP_MUMMY ? 3 : 0))
- {
- case 0:
- description += " It stinks of brimstone.";
- break;
- case 1:
- description += " It smells like rotting flesh";
- if (you.species == SP_GHOUL)
- description += " - yum!";
- else
- description += ".";
- break;
- case 2:
- description += " It is surrounded by a sickening stench.";
- break;
- case 3:
- description += " It seethes with hatred of the living.";
- break;
- case 4:
- description += " Tiny orange flames dance around it.";
- break;
- case 5:
- description += " Tiny purple flames dance around it.";
- break;
- case 6:
- description += " It is surrounded by a weird haze.";
- break;
- case 7:
- description += " It glows with a malevolent light.";
- break;
- case 8:
- description += " It looks incredibly angry.";
- break;
- case 9:
- description += " It oozes with slime.";
- break;
- case 10:
- description += " It dribbles constantly.";
- break;
- case 11:
- description += " Mould grows all over it.";
- break;
- case 12:
- description += " It looks diseased.";
- break;
- case 13:
- description += " It looks as frightened of you as you are of it.";
- break;
- case 14:
- description += " It moves in a series of hideous convulsions.";
- break;
- case 15:
- description += " It moves with an unearthly grace.";
- break;
- case 16:
- description += " It hungers for your soul!";
- break;
- case 17:
- description += " It leaves a glistening oily trail.";
- break;
- case 18:
- description += " It shimmers before your eyes.";
- break;
- case 19:
- description += " It is surrounded by a brilliant glow.";
- break;
- case 20:
- description += " It radiates an aura of extreme power.";
- break;
- default:
- break;
- }
-
- pop_rng_state();
- return description;
-} // end describe_demon()
-
-
-//---------------------------------------------------------------
-//
-// describe_weapon
-//
-//---------------------------------------------------------------
-static std::string describe_weapon( const item_def &item, char verbose)
-{
- std::string description;
-
- description.reserve(200);
-
- description = "";
-
- if (is_fixed_artefact( item ))
- {
- if (item_ident( item, ISFLAG_KNOW_PROPERTIES ))
- {
- description += "$";
-
- switch (item.special)
- {
- case SPWPN_SINGING_SWORD:
- description += "This blessed weapon loves nothing more "
- "than to sing to its owner, "
- "whether they want it to or not. ";
- break;
- case SPWPN_WRATH_OF_TROG:
- description += "This was the favourite weapon of "
- "the old god Trog, before he lost it one day. "
- "It induces a bloodthirsty berserker rage in "
- "anyone who uses it to strike another. ";
- break;
- case SPWPN_SCYTHE_OF_CURSES:
- description += "This weapon carries a "
- "terrible and highly irritating curse. ";
- break;
- case SPWPN_MACE_OF_VARIABILITY:
- description += "It is rather unreliable. ";
- break;
- case SPWPN_GLAIVE_OF_PRUNE:
- description += "It is the creation of a mad god, and "
- "carries a curse which transforms anyone "
- "possessing it into a prune. Fortunately, "
- "the curse works very slowly, and one can "
- "use it briefly with no consequences "
- "worse than slightly purple skin and a few wrinkles. ";
- break;
- case SPWPN_SCEPTRE_OF_TORMENT:
- description += "This truly accursed weapon is "
- "an instrument of Hell. ";
- break;
- case SPWPN_SWORD_OF_ZONGULDROK:
- description += "This dreadful weapon is used "
- "at the user's peril. ";
- break;
- case SPWPN_SWORD_OF_CEREBOV:
- description += "Eerie flames cover its twisted blade. ";
- break;
- case SPWPN_STAFF_OF_DISPATER:
- description += "This legendary item can unleash "
- "the fury of Hell. ";
- break;
- case SPWPN_SCEPTRE_OF_ASMODEUS:
- description += "It carries some of the powers of "
- "the arch-fiend Asmodeus. ";
- break;
- case SPWPN_SWORD_OF_POWER:
- description += "It rewards the powerful with power "
- "and the meek with weakness. ";
- break;
- case SPWPN_KNIFE_OF_ACCURACY:
- description += "It is almost unerringly accurate. ";
- break;
- case SPWPN_STAFF_OF_OLGREB:
- description += "It was the magical weapon wielded by the "
- "mighty wizard Olgreb before he met his "
- "fate somewhere within these dungeons. It "
- "grants its wielder resistance to the "
- "effects of poison and increases their "
- "ability to use venomous magic, and "
- "carries magical powers which can be evoked. ";
- break;
- case SPWPN_VAMPIRES_TOOTH:
- description += "It is lethally vampiric. ";
- break;
- case SPWPN_STAFF_OF_WUCAD_MU:
- description += "Its power varies in proportion to "
- "its wielder's intelligence. "
- "Using it can be a bit risky. ";
- break;
- }
-
- description += "$";
- }
- else if (item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- // We know it's an artefact type weapon, but not what it does.
- description += "$This weapon may have some hidden properties.$";
- }
- }
- else if (is_unrandom_artefact( item )
- && strlen(unrandart_descrip(1, item)) != 0)
- {
- description += unrandart_descrip(1, item);
- description += "$";
- }
- else
- {
- if (verbose == 1)
- {
- switch (item.sub_type)
- {
- case WPN_CLUB:
- description += "A heavy piece of wood. ";
- break;
-
- case WPN_MACE:
- description += "A long handle "
- "with a heavy lump on one end. ";
- break;
-
- case WPN_FLAIL:
- description += "Like a mace, but with a length of chain "
- "between the handle and the lump of metal. ";
- break;
-
- case WPN_DAGGER:
- description += "A long knife or a very short sword, "
- "which can be held or thrown. ";
- break;
-
- case WPN_KNIFE:
- description += "A simple survival knife. "
- "Designed more for utility than combat, "
- "it looks quite capable of butchering a corpse. ";
- break;
-
- case WPN_MORNINGSTAR:
- description += "A mace covered in spikes. ";
- break;
-
- case WPN_SHORT_SWORD:
- description += "A sword with a short, slashing blade. ";
- break;
-
- case WPN_LONG_SWORD:
- description += "A sword with a long, slashing blade. ";
- break;
-
- case WPN_GREAT_SWORD:
- description += "A sword with a very long, heavy blade "
- "and a long handle. ";
- break;
-
- case WPN_SCIMITAR:
- description += "A long sword with a curved blade. ";
- break;
-
- case WPN_HAND_AXE:
- description += "An small axe designed for either hand combat "
- "or throwing. ";
- // "It might also make a good tool.";
- break;
-
- case WPN_BATTLEAXE:
- description += "A large axe with a double-headed blade. ";
- break;
-
- case WPN_SPEAR:
- description += "A long stick with a pointy blade on one end, "
- "to be held or thrown. ";
- break;
-
- case WPN_TRIDENT:
- description +=
- "A hafted weapon with three points at one end. ";
- break;
-
- case WPN_HALBERD:
- description +=
- "A long pole with a spiked axe head on one end. ";
- break;
-
- case WPN_SLING:
- description +=
- "A piece of cloth and leather for launching stones, "
- "which do a small amount of damage on impact. ";
- break;
-
- case WPN_BOW:
- description += "A curved piece of wood and string, "
- "for shooting arrows. It does good damage in combat, "
- "and a skilled user can use it to great effect. ";
- break;
-
- case WPN_LONGBOW:
- description += "A long, strong bow made of yew. "
- "It does excellent damage in combat "
- "and a skilled archer can use it to great effect. ";
- break;
-
- case WPN_BLOWGUN:
- description += "A long, light tube, open at both ends. Doing "
- "very little damage, its main use is to fire poisoned "
- "needles from afar. It makes very little noise. ";
- break;
-
- case WPN_CROSSBOW:
- description += "A piece of machinery used for firing bolts, "
- "which takes some time to load and fire. "
- "It does very good damage in combat. ";
- break;
-
- case WPN_HAND_CROSSBOW:
- description += "A small crossbow, for firing darts. ";
- break;
-
- case WPN_GLAIVE:
- description +=
- "A pole with a large, heavy blade on one end. ";
- break;
-
- case WPN_QUARTERSTAFF:
- description += "A sturdy wooden pole. ";
- break;
-
- case WPN_SCYTHE:
- description +=
- "A farm implement, usually unsuited to combat. ";
- break;
-
- case WPN_GIANT_CLUB:
- description += "A giant lump of wood, "
- "shaped for an ogre's hands. ";
- break;
-
- case WPN_GIANT_SPIKED_CLUB:
- description +=
- "A giant lump of wood with sharp spikes at one end. ";
- break;
-
- case WPN_EVENINGSTAR:
- description += "The opposite of a morningstar. ";
- break;
-
- case WPN_QUICK_BLADE:
- description += "A small and magically quick sword. ";
- break;
-
- case WPN_KATANA:
- description += "A very rare and extremely effective "
- "imported weapon, featuring a long "
- "single-edged blade. ";
- break;
-
- case WPN_LAJATANG:
- description += "A very rare and extremely effective "
- "imported weapon, featuring a pole with half-moon blades "
- "at both ends. ";
- break;
-
- case WPN_LOCHABER_AXE:
- description += "An enormous combination of a pike "
- "and a battle axe.";
- break;
-
- case WPN_EXECUTIONERS_AXE:
- description += "A huge axe. ";
- break;
-
- case WPN_DOUBLE_SWORD:
- description +=
- "A magical weapon with two razor-sharp blades. ";
- break;
-
- case WPN_TRIPLE_SWORD:
- description += "A magical weapon with three "
- "great razor-sharp blades. ";
- break;
-
- case WPN_HAMMER:
- description += "The kind of thing you hit nails with, "
- "adapted for battle. ";
- break;
-
- case WPN_ANCUS:
- description += "A large and vicious toothed club. ";
- break;
-
- case WPN_WHIP:
- description += "A whip. ";
- break;
-
- case WPN_SABRE:
- description += "A sword with a medium length slashing blade. ";
- break;
-
- case WPN_DEMON_BLADE:
- description +=
- "A terrible weapon, forged in the fires of Hell. ";
- break;
-
- case WPN_BLESSED_BLADE:
- description += "A blade blessed by the Shining One. ";
- break;
-
- case WPN_DEMON_WHIP:
- description += "A terrible weapon, woven "
- "in the depths of the inferno. ";
- break;
-
- case WPN_DEMON_TRIDENT:
- description +=
- "A terrible weapon, molded by fire and brimstone. ";
- break;
-
- case WPN_BROAD_AXE:
- description += "An axe with a large blade. ";
- break;
-
- case WPN_WAR_AXE:
- description += "An axe intended for hand to hand combat. ";
- break;
-
- case WPN_SPIKED_FLAIL:
- description +=
- "A flail with large spikes on the metal lump. ";
- break;
-
- case WPN_GREAT_MACE:
- description += "A large and heavy mace. ";
- break;
-
- case WPN_DIRE_FLAIL:
- description += "A flail with spiked lumps on both ends.";
- break;
-
- case WPN_FALCHION:
- description += "A sword with a broad slashing blade. ";
- break;
-
- default:
- DEBUGSTR("Unknown weapon");
- }
-
- description += "$";
- }
- }
-
- if (verbose == 1 && !launches_things( item.sub_type ))
- {
- description += "$Damage rating: ";
- append_value(description, property( item, PWPN_DAMAGE ), false);
-
- description += "$Accuracy rating: ";
- append_value(description, property( item, PWPN_HIT ), true);
-
- description += "$Base attack delay: ";
- append_value(description, property( item, PWPN_SPEED ) * 10, false);
- description += "%%";
- }
- description += "$";
-
- if (!is_fixed_artefact( item ))
- {
- int spec_ench = get_weapon_brand( item );
-
- if (!is_random_artefact( item ) && verbose == 0)
- spec_ench = SPWPN_NORMAL;
-
- // special weapon descrip
- if (spec_ench != SPWPN_NORMAL && item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- description += "$";
-
- switch (spec_ench)
- {
- case SPWPN_FLAMING:
- description += "It emits flame when wielded, "
- "causing extra injury to most foes "
- "and up to double damage against "
- "particularly susceptible opponents. ";
- break;
- case SPWPN_FREEZING:
- description += "It has been specially enchanted to "
- "freeze those struck by it, causing "
- "extra injury to most foes and "
- "up to double damage against "
- "particularly susceptible opponents. ";
- break;
- case SPWPN_HOLY_WRATH:
- description += "It has been blessed by the Shining One "
- "to harm undead and cause great damage to "
- "the unholy creatures of Hell or Pandemonium. ";
- break;
- case SPWPN_ELECTROCUTION:
- description += "Occasionally upon striking a foe "
- "it will discharge some electrical energy "
- "and cause terrible harm. ";
- break;
- case SPWPN_ORC_SLAYING:
- description += "It is especially effective against "
- "all of orcish descent. ";
- break;
- case SPWPN_VENOM:
- if (launches_things( item.sub_type ))
- description += "It poisons the unbranded ammo it fires. ";
- else
- description += "It poisons the flesh of those it strikes. ";
- break;
- case SPWPN_PROTECTION:
- description += "It protects the one who wields it against "
- "injury (+5 to AC). ";
- break;
- case SPWPN_DRAINING:
- description += "A truly terrible weapon, "
- "it drains the life of those it strikes. ";
- break;
- case SPWPN_SPEED:
- if (launches_things( item.sub_type ))
- {
- description += "It allows its wielder to fire twice when "
- "they would otherwise have fired only once. ";
- }
- else
- {
- description += "It allows its wielder to attack twice when "
- "they would otherwise have struck only once. ";
- }
- break;
- case SPWPN_VORPAL:
- if (launches_things(item.sub_type))
- {
- description += "Any ";
- description += ammo_name( item );
- description += " fired from it inflicts extra damage.";
- }
- else
- {
- description += "It inflicts extra damage upon your enemies. ";
- }
- break;
- case SPWPN_FLAME:
- description += "It turns projectiles fired from it into "
- "bolts of fire. ";
- break;
- case SPWPN_FROST:
- description += "It turns projectiles fired from it into "
- "bolts of frost. ";
- break;
- case SPWPN_VAMPIRICISM:
- description += "It inflicts no extra harm, "
- "but heals its wielder somewhat when "
- "he or she strikes a living foe. ";
- break;
- case SPWPN_DISRUPTION:
- description += "It is a weapon blessed by Zin, "
- "and can inflict up to fourfold damage "
- "when used against the undead. ";
- break;
- case SPWPN_PAIN:
- description += "In the hands of one skilled in "
- "necromantic magic it inflicts "
- "extra damage on living creatures. ";
- break;
- case SPWPN_DISTORTION:
- description += "It warps and distorts space around it. ";
- break;
- case SPWPN_REACHING:
- description += "It can be evoked to extend its reach. ";
- break;
- }
- }
-
- if (is_random_artefact( item ))
- {
- if (item_ident( item, ISFLAG_KNOW_PROPERTIES ))
- {
- unsigned int old_length = description.length();
- randart_descpr( description, item );
-
- if (description.length() == old_length)
- description += "$";
- }
- else if (item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- description += "$This weapon may have some hidden properties.$";
- }
- }
- else if (spec_ench != SPWPN_NORMAL && item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- description += "$";
- }
- }
-
- if (item_known_cursed( item ))
- {
- description += "$It has a curse placed upon it.";
- }
-
- if (verbose == 1 && !launches_things( item.sub_type ))
- {
-#ifdef USE_NEW_COMBAT_STATS
- const int str_weight = weapon_str_weight( item.base_type, item.sub_type );
-
- if (str_weight >= 8)
- description += "$This weapon is best used by the strong.";
- else if (str_weight > 5)
- description += "$This weapon is better for the strong.";
- else if (str_weight <= 2)
- description += "$This weapon is best used by the dexterous.";
- else if (str_weight < 5)
- description += "$This weapon is better for the dexterous.";
-#endif
-
- switch (hands_reqd_for_weapon(item.base_type, item.sub_type))
- {
- case HANDS_ONE:
- description += "$It is a one handed weapon.";
- break;
- case HANDS_HALF:
- description += "$It can be used with one hand, or more "
- "effectively with two (i.e. when not using a shield).";
- break;
- case HANDS_TWO:
- description += "$It is a two handed weapon.";
- break;
- }
- }
-
- if (!is_random_artefact( item ))
- {
- switch (get_equip_race( item ))
- {
- case ISFLAG_DWARVEN:
- description += "$It is well-crafted and very durable.";
- break;
- }
-
- if (launches_things( item.sub_type ))
- {
- switch (get_equip_race( item ))
- {
- case ISFLAG_DWARVEN:
- description += "$It is most deadly when used with "
- "dwarven ammunition.";
- break;
- case ISFLAG_ELVEN:
- description += "$It is most deadly when used with "
- "elven ammunition.";
- break;
- case ISFLAG_ORCISH:
- description += "$It is most deadly when used with "
- "orcish ammunition.";
- break;
- }
- }
- }
-
- if (verbose == 1)
- {
- description += "$It falls into the";
-
- switch (item.sub_type)
- {
- case WPN_SLING:
- description += " 'slings' category. ";
- break;
- case WPN_BOW:
- case WPN_LONGBOW:
- description += " 'bows' category. ";
- break;
- case WPN_HAND_CROSSBOW:
- case WPN_CROSSBOW:
- description += " 'crossbows' category. ";
- break;
- case WPN_BLOWGUN:
- description += " 'darts' category. ";
- break;
- default:
- // Melee weapons
- switch (weapon_skill(item.base_type, item.sub_type))
- {
- case SK_SHORT_BLADES:
- description += " 'short blades' category. ";
- break;
- case SK_LONG_SWORDS:
- description += " 'long swords' category. ";
- break;
- case SK_AXES:
- description += " 'axes' category. ";
- break;
- case SK_MACES_FLAILS:
- description += " 'maces and flails' category. ";
- break;
- case SK_POLEARMS:
- description += " 'pole-arms' category. ";
- break;
- case SK_STAVES:
- description += " 'staves' category. ";
- break;
- default:
- description += " 'bug' category. ";
- DEBUGSTR("Unknown weapon type");
- break;
- }
- }
- }
-
- return (description);
-}
-
-
-//---------------------------------------------------------------
-//
-// describe_ammo
-//
-//---------------------------------------------------------------
-static std::string describe_ammo( const item_def &item )
-{
- std::string description;
-
- description.reserve(64);
-
- switch (item.sub_type)
- {
- case MI_STONE:
- description += "A stone. ";
- break;
- case MI_ARROW:
- description += "An arrow. ";
- break;
- case MI_NEEDLE:
- description += "A needle. ";
- break;
- case MI_BOLT:
- description += "A crossbow bolt. ";
- break;
- case MI_DART:
- description += "A small throwing weapon. ";
- break;
- case MI_LARGE_ROCK:
- description += "A rock, used by giants as a missile. ";
- break;
- case MI_NONE: // was eggplant
- description += "A purple vegetable. "
- "The presence of this object in the game "
- "indicates a bug (or some kind of cheating on your part). ";
- break;
- default:
- DEBUGSTR("Unknown ammo type");
- break;
- }
-
- if (item.special != 0 && item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- switch (item.special)
- {
- case 1:
- description += "$When fired from an appropriate launcher, "
- "it turns into a bolt of flame. ";
- break;
- case 2:
- description += "$When fired from an appropriate launcher, "
- "it turns into a bolt of ice. ";
- break;
- case 3:
- case 4:
- description += "$It is coated with poison. ";
- break;
- }
- }
-
- description += "$";
-
- return (description);
-}
-
-
-//---------------------------------------------------------------
-//
-// describe_armour
-//
-//---------------------------------------------------------------
-static std::string describe_armour( const item_def &item, char verbose )
-{
- std::string description;
-
- description.reserve(200);
-
- if (is_unrandom_artefact( item )
- && strlen(unrandart_descrip(1, item)) != 0)
- {
- description += "$";
- description += unrandart_descrip(1, item);
- description += "$$";
- }
- else
- {
- if (verbose == 1)
- {
- switch (item.sub_type)
- {
- case ARM_ROBE:
- description += "A cloth robe. ";
- break;
- case ARM_LEATHER_ARMOUR:
- description += "A suit made of hardened leather. ";
- break;
- case ARM_RING_MAIL:
- description += "A leather suit covered in little rings. ";
- break;
- case ARM_SCALE_MAIL:
- description +=
- "A leather suit covered in little metal plates. ";
- break;
- case ARM_CHAIN_MAIL:
- description += "A suit made of interlocking metal rings. ";
- break;
- case ARM_SPLINT_MAIL:
- description += "A suit made of splints of metal. ";
- break;
- case ARM_BANDED_MAIL:
- description += "A suit made of bands of metal. ";
- break;
- case ARM_PLATE_MAIL:
- description += "A suit of mail and large plates of metal. ";
- break;
- case ARM_SHIELD:
- description +=
- "A piece of metal, to be strapped on one's arm. "
- "It is cumbersome to wear, and slightly slows "
- "the rate at which you may attack. ";
- break;
- case ARM_CLOAK:
- description += "A cloth cloak. ";
- break;
-
- case ARM_HELMET:
- switch (get_helmet_type( item ))
- {
- case THELM_HELMET:
- case THELM_HELM:
- description += "A piece of metal headgear. ";
- break;
- case THELM_CAP:
- description += "A cloth or leather cap. ";
- break;
- case THELM_WIZARD_HAT:
- description += "A conical cloth hat. ";
- break;
- }
- break;
-
- case ARM_GLOVES:
- description += "A pair of gloves. ";
- break;
-
- case ARM_CENTAUR_BARDING:
- description += "An armour made for centaurs, "
- "to wear over their equine half.";
- break;
-
- case ARM_NAGA_BARDING:
- description += "A special armour made for nagas, "
- "to wear over their tails.";
- break;
-
- case ARM_BOOTS:
- description += "A pair of boots.";
- break;
-
- case ARM_BUCKLER:
- description += "A small shield. ";
- break;
- case ARM_LARGE_SHIELD:
- description += "Like a normal shield, only larger. ";
- if (you.species == SP_TROLL || you.species == SP_OGRE
- || you.species == SP_OGRE_MAGE
- || player_genus(GENPC_DRACONIAN))
- {
- description += "It looks like it would fit you well. ";
- }
- else
- {
- description += "It is very cumbersome to wear, and "
- "slows the rate at which you may attack. ";
- }
- break;
- case ARM_DRAGON_HIDE:
- description += "The scaly skin of a dragon. I suppose "
- "you could wear it if you really wanted to. ";
- break;
- case ARM_TROLL_HIDE:
- description += "The stiff and knobbly hide of a troll. "
- "I suppose you could wear it "
- "if you really wanted to. ";
- break;
- case ARM_CRYSTAL_PLATE_MAIL:
- description += "An incredibly heavy but extremely effective "
- "suit of crystalline armour. "
- "It is somewhat resistant to corrosion. ";
- break;
- case ARM_DRAGON_ARMOUR:
- description += "A magical armour, made from the scales of "
- "a fire-breathing dragon. It provides "
- "great protection from the effects of fire, "
- "but renders its wearer more susceptible to "
- "the effects of cold. ";
- break;
- case ARM_TROLL_LEATHER_ARMOUR:
- description += "A magical armour, made from the stiff and "
- "knobbly skin of a common troll. It magically regenerates "
- "its wearer's flesh at a fairly slow rate "
- "(unless already a troll). ";
- break;
- case ARM_ICE_DRAGON_HIDE:
- description += "The scaly skin of a dragon. I suppose "
- "you could wear it if you really wanted to. ";
- break;
- case ARM_ICE_DRAGON_ARMOUR:
- description += "A magical armour, made from the scales of "
- "a cold-breathing dragon. It provides "
- "great protection from the effects of cold, "
- "but renders its wearer more susceptible to "
- "the effects of fire and heat. ";
- break;
- case ARM_STEAM_DRAGON_HIDE:
- description += "The soft and supple scaley skin of "
- "a steam dragon. I suppose you could "
- "wear it if you really wanted to. ";
- break;
- case ARM_STEAM_DRAGON_ARMOUR:
- description += "A magical armour, made from the scales of "
- "a steam-breathing dragon. Although unlike "
- "the armour made from the scales of some "
- "larger dragons it does not provide its wearer "
- "with much in the way of special magical "
- "protection, it is extremely light and "
- "as supple as cloth. ";
- break; /* Protects from steam */
- case ARM_MOTTLED_DRAGON_HIDE:
- description += "The weirdly-patterned scaley skin of "
- "a mottled dragon. I suppose you could "
- "wear it if you really wanted to. ";
- break;
- case ARM_MOTTLED_DRAGON_ARMOUR:
- description += "A magical armour made from the scales of a "
- "mottled dragon. Although unlike the armour "
- "made from the scales of some larger dragons "
- "it does not provide its wearer with much in "
- "the way of special magical protection, it is "
- "as light and relatively uncumbersome as "
- "leather armour. ";
- break; /* Protects from napalm */
- case ARM_STORM_DRAGON_HIDE:
- description += "The hide of a storm dragon, covered in "
- "extremely hard blue scales. I suppose "
- "you could wear it if you really wanted to. ";
- break;
- case ARM_STORM_DRAGON_ARMOUR:
- description += "A magical armour made from the scales of "
- "a lightning-breathing dragon. It is heavier "
- "than most dragon scale armours, but gives "
- "its wearer great resistance to "
- "electrical discharges. ";
- break;
- case ARM_GOLD_DRAGON_HIDE:
- description += "The extremely tough and heavy skin of a "
- "golden dragon, covered in shimmering golden "
- "scales. I suppose you could wear it if "
- "you really wanted to. ";
- break;
- case ARM_GOLD_DRAGON_ARMOUR:
- description += "A magical armour made from the golden scales "
- "of a golden dragon. It is extremely heavy and "
- "cumbersome, but confers resistances to fire, "
- "cold, and poison on its wearer. ";
- break;
- case ARM_ANIMAL_SKIN:
- description += "The skins of several animals. ";
- break;
- case ARM_SWAMP_DRAGON_HIDE:
- description += "The slimy";
- if (you.species != SP_MUMMY)
- description += ", smelly";
- description += " skin of a swamp-dwelling dragon. I suppose "
- "you could wear it if you really wanted to. ";
- break;
- case ARM_SWAMP_DRAGON_ARMOUR:
- description += "A magical armour made from the scales of "
- "a swamp dragon. It confers resistance to "
- "poison on its wearer. ";
- break;
- default:
- DEBUGSTR("Unknown armour");
- }
-
- description += "$";
- }
- }
-
- if (verbose == 1
- && item.sub_type != ARM_SHIELD
- && item.sub_type != ARM_BUCKLER
- && item.sub_type != ARM_LARGE_SHIELD)
- {
- description += "$Armour rating: ";
-
- if (item.sub_type == ARM_HELMET
- && (get_helmet_type( item ) == THELM_CAP
- || get_helmet_type( item ) == THELM_WIZARD_HAT))
- {
- // caps and wizard hats don't have a base AC
- append_value(description, 0, false);
- }
- else if (item.sub_type == ARM_NAGA_BARDING
- || item.sub_type == ARM_CENTAUR_BARDING)
- {
- // Barding has AC value 4.
- append_value(description, 4, false);
- }
- else
- {
- append_value(description, property( item, PARM_AC ), false);
- }
-
- description += "$Evasion modifier: ";
- append_value(description, property( item, PARM_EVASION ), true);
- description += "$";
- }
-
- int ego = get_armour_ego_type( item );
- if (ego != SPARM_NORMAL
- && item_ident( item, ISFLAG_KNOW_TYPE )
- && verbose == 1)
- {
- description += "$";
-
- switch (ego)
- {
- case SPARM_RUNNING:
- description += "It allows its wearer to run at a great speed. ";
- break;
- case SPARM_FIRE_RESISTANCE:
- description += "It protects its wearer from heat and fire. ";
- break;
- case SPARM_COLD_RESISTANCE:
- description += "It protects its wearer from cold. ";
- break;
- case SPARM_POISON_RESISTANCE:
- description += "It protects its wearer from poison. ";
- break;
- case SPARM_SEE_INVISIBLE:
- description += "It allows its wearer to see invisible things. ";
- break;
- case SPARM_DARKNESS:
- description += "When activated it hides its wearer from "
- "the sight of others, but also increases "
- "their metabolic rate by a large amount. ";
- break;
- case SPARM_STRENGTH:
- description += "It increases the physical power of its wearer (+3 to strength). ";
- break;
- case SPARM_DEXTERITY:
- description += "It increases the dexterity of its wearer (+3 to dexterity). ";
- break;
- case SPARM_INTELLIGENCE:
- description += "It makes you more clever (+3 to intelligence). ";
- break;
- case SPARM_PONDEROUSNESS:
- description += "It is very cumbersome (-2 to EV, slows movement). ";
- break;
- case SPARM_LEVITATION:
- description += "It can be activated to allow its wearer to "
- "float above the ground and remain so indefinitely. ";
- break;
- case SPARM_MAGIC_RESISTANCE:
- description += "It increases its wearer's resistance "
- "to enchantments. ";
- break;
- case SPARM_PROTECTION:
- description += "It protects its wearer from harm (+3 to AC). ";
- break;
- case SPARM_STEALTH:
- description += "It enhances the stealth of its wearer. ";
- break;
- case SPARM_RESISTANCE:
- description += "It protects its wearer from the effects "
- "of both cold and heat. ";
- break;
-
- // these two are robes only:
- case SPARM_POSITIVE_ENERGY:
- description += "It partially protects its wearer from "
- "the effects of negative energy. ";
- break;
- case SPARM_ARCHMAGI:
- description += "It greatly increases the power of its "
- "wearer's magical spells, but is only "
- "intended for those who have " "very little left to learn. ";
- break;
-
- case SPARM_PRESERVATION:
- description += "It protects its wearer's possessions "
- "from damage and destruction. ";
- break;
- }
-
- description += "$";
- }
-
- if (is_random_artefact( item ))
- {
- if (item_ident( item, ISFLAG_KNOW_PROPERTIES ))
- randart_descpr( description, item );
- else if (item_ident( item, ISFLAG_KNOW_TYPE ))
- description += "$This armour may have some hidden properties.$";
- }
- else
- {
- switch (get_equip_race( item ))
- {
- case ISFLAG_ELVEN:
- //jmf: not light
- description += "$It is well-crafted and unobstructive";
-
- if (item.sub_type == ARM_CLOAK || item.sub_type == ARM_BOOTS)
- description += ", and helps its wearer avoid being noticed";
-
- description += ".";
- break;
-
- case ISFLAG_DWARVEN:
- description += "$It is well-crafted and very durable.";
- break;
-
- case ISFLAG_ORCISH:
- default:
- break;
- }
- }
-
- if (item_known_cursed( item ))
- {
- description += "$It has a curse placed upon it.";
- }
-
- return description;
-}
-
-//---------------------------------------------------------------
-//
-// describe_stick
-//
-//---------------------------------------------------------------
-static std::string describe_stick( const item_def &item )
-{
- std::string description;
-
- description.reserve(64);
-
- if (get_ident_type( OBJ_WANDS, item.sub_type ) != ID_KNOWN_TYPE)
- description += "A stick. Maybe it's magical. ";
- else
- {
- description += "A magical device which ";
- switch (item.sub_type)
- {
- case WAND_FLAME:
- description += "throws little bits of flame. ";
- break;
-
- case WAND_FROST:
- description += "throws little bits of frost. ";
- break;
-
- case WAND_SLOWING:
- description += "casts enchantments to slow down the actions of "
- "a creature at which it is directed. ";
- break;
-
- case WAND_HASTING:
- description += "casts enchantments to speed up the actions of "
- "a creature at which it is directed. ";
- break;
-
- case WAND_MAGIC_DARTS:
- description += "throws small bolts of destructive energy. ";
- break;
-
- case WAND_HEALING:
- description += "can heal a creature's wounds. ";
- break;
-
- case WAND_PARALYSIS:
- description += "can render a creature immobile. ";
- break;
-
- case WAND_FIRE:
- description += "throws great bolts of fire. ";
- break;
-
- case WAND_COLD:
- description += "throws great bolts of cold. ";
- break;
-
- case WAND_CONFUSION:
- description += "induces confusion and bewilderment in "
- "a target creature. ";
- break;
-
- case WAND_INVISIBILITY:
- description += "hides a creature from the view of others. ";
- break;
-
- case WAND_DIGGING:
- description += "drills tunnels through unworked rock. ";
- break;
-
- case WAND_FIREBALL:
- description += "throws exploding blasts of flame. ";
- break;
-
- case WAND_TELEPORTATION:
- description += "causes a creature to be randomly translocated. ";
- break;
-
- case WAND_LIGHTNING:
- description += "throws great bolts of lightning. ";
- break;
-
- case WAND_POLYMORPH_OTHER:
- description += "causes a creature to be transmogrified into "
- "another form. "
- "It doesn't work on you, so don't even try. ";
- break;
-
- case WAND_ENSLAVEMENT:
- description += "causes slavish obedience in a creature. ";
- break;
-
- case WAND_DRAINING:
- description += "throws a bolt of negative energy which "
- "drains the life essences of living creatures, "
- "but is useless against the undead. ";
- break;
-
- case WAND_RANDOM_EFFECTS:
- description += "can produce a variety of effects. ";
- break;
-
- case WAND_DISINTEGRATION:
- description += "disrupts the physical structure of "
- "an object, especially a creature's body. ";
- break;
-
- default:
- DEBUGSTR("Unknown stick");
- }
-
- if (item_ident( item, ISFLAG_KNOW_PLUSES ) && item.plus == 0)
- description += "Unfortunately, it has no charges left. ";
- }
-
- return description;
-}
-
-
-//---------------------------------------------------------------
-//
-// describe_food
-//
-//---------------------------------------------------------------
-static std::string describe_food( const item_def &item )
-{
- std::string description;
-
- description.reserve(100);
-
- switch (item.sub_type)
- {
- // rations
- case FOOD_MEAT_RATION:
- case FOOD_BREAD_RATION:
- description += "A filling ration of ";
- switch (item.sub_type)
- {
- case FOOD_MEAT_RATION:
- description += "dried and preserved meats";
- break;
- case FOOD_BREAD_RATION:
- description += "breads";
- break;
- }
- description += ". ";
- break;
-
- // fruits
- case FOOD_PEAR:
- case FOOD_APPLE:
- case FOOD_APRICOT:
- case FOOD_ORANGE:
- case FOOD_BANANA:
- case FOOD_STRAWBERRY:
- case FOOD_RAMBUTAN:
- case FOOD_LEMON:
- case FOOD_GRAPE:
- case FOOD_LYCHEE:
- case FOOD_SULTANA:
- description += "A";
- switch (item.sub_type)
- {
- case FOOD_PEAR:
- description += " delicious juicy";
- break;
- case FOOD_APPLE:
- description += " delicious red or green";
- break;
- case FOOD_APRICOT:
- description += " delicious orange";
- break;
- case FOOD_ORANGE:
- description += " delicious juicy orange";
- break;
- case FOOD_BANANA:
- description += " delicious yellow";
- break;
- case FOOD_STRAWBERRY:
- description += " small but delicious red";
- break;
- case FOOD_RAMBUTAN:
- description += " small but delicious tropical";
- break;
- case FOOD_LEMON:
- description += " yellow";
- break;
- case FOOD_GRAPE:
- description += " small";
- break;
- case FOOD_LYCHEE:
- description += " tropical";
- break;
- case FOOD_SULTANA:
- description += " dried";
- break;
- }
-
- description += " fruit";
-
- switch (item.sub_type)
- {
- case FOOD_BANANA:
- description += ", probably grown and imported by "
- "some amoral multinational as the "
- "result of a corrupt trade deal";
- break;
- case FOOD_RAMBUTAN:
- description += ". How it got into this dungeon "
- "is anyone's guess";
- break;
- case FOOD_SULTANA:
- description += " of some sort, possibly a grape";
- break;
- }
- description += ". ";
- break;
-
- // vegetables
- case FOOD_CHOKO:
- case FOOD_SNOZZCUMBER:
- description += "A";
- switch (item.sub_type)
- {
- case FOOD_CHOKO:
- description += "n almost tasteless green";
- break;
- case FOOD_SNOZZCUMBER:
- description += " repulsive cucumber-shaped";
- break;
- }
- description += " vegetable";
- switch (item.sub_type)
- {
- case FOOD_CHOKO:
- description += ", which grows on a vine";
- break;
- }
- description += ". ";
- break;
-
- // lumps, slices, chunks, and strips
- case FOOD_HONEYCOMB:
- case FOOD_ROYAL_JELLY:
- case FOOD_PIZZA:
- case FOOD_CHEESE:
- case FOOD_BEEF_JERKY:
- case FOOD_SAUSAGE:
- case FOOD_CHUNK:
- description += "A";
- switch (item.sub_type)
- {
- case FOOD_SAUSAGE:
- description += "n elongated";
- break;
- }
- switch (item.sub_type)
- {
- case FOOD_HONEYCOMB:
- case FOOD_ROYAL_JELLY:
- case FOOD_CHEESE:
- case FOOD_SAUSAGE:
- description += " lump";
- break;
- case FOOD_PIZZA:
- description += " slice";
- break;
- case FOOD_BEEF_JERKY:
- description += " strip";
- break;
- case FOOD_CHUNK:
- description += " piece";
- }
- description += " of ";
- switch (item.sub_type)
- {
- case FOOD_SAUSAGE:
- description += "low-grade gristle, entrails and "
- "cereal products encased in an intestine";
- break;
- case FOOD_HONEYCOMB:
- description += "the delicious honeycomb made by giant bees";
- break;
- case FOOD_ROYAL_JELLY:
- description += "the magical substance produced by giant bees "
- "to be fed to their queens";
- break;
- case FOOD_PIZZA:
- description += "pizza";
- break;
- case FOOD_CHEESE:
- description += "cheese";
- break;
- case FOOD_BEEF_JERKY:
- description += "preserved dead cow or bull";
- break;
- case FOOD_CHUNK:
- description += "dungeon meat";
- break;
- }
- description += ". ";
- switch (item.sub_type)
- {
- case FOOD_SAUSAGE:
- description += "Yum! ";
- break;
- case FOOD_PIZZA:
- description += "Don't tell me you don't know what that is! ";
- break;
- case FOOD_CHUNK:
- if (you.species != SP_GHOUL)
- description += "It looks rather unpleasant. ";
-
- if (item.special < 100)
- {
- if (you.species == SP_GHOUL)
- description += "It looks nice and ripe. ";
- else if (you.species != SP_MUMMY)
- {
- description += "In fact, it is "
- "rotting away before your eyes. "
- "Eating it would probably be unwise. ";
- }
- }
- break;
- }
- break;
-
- default:
- DEBUGSTR("Unknown food");
- }
-
- description += "$";
-
- return (description);
-}
-
-//---------------------------------------------------------------
-//
-// describe_potion
-//
-//---------------------------------------------------------------
-static std::string describe_potion( const item_def &item )
-{
- std::string description;
-
- description.reserve(64);
-
- if (get_ident_type( OBJ_POTIONS, item.sub_type ) != ID_KNOWN_TYPE)
- description += "A small bottle of liquid.";
- else
- {
- description += "A";
-
- switch (item.sub_type)
- {
- case POT_HEALING:
- description += " blessed";
- break;
- case POT_HEAL_WOUNDS:
- description += " magical healing";
- break;
- case POT_SPEED:
- description += "n enchanted";
- break;
- case POT_MIGHT:
- description += " magic";
- break;
- case POT_POISON:
- description += " nasty poisonous";
- break;
- case POT_PORRIDGE:
- description += " filling";
- break;
- case POT_DEGENERATION:
- description += " noxious";
- break;
- case POT_DECAY:
- description += " vile and putrid cursed";
- break;
- case POT_WATER:
- description += " unique";
- break;
- case POT_EXPERIENCE:
- description += " truly wonderful and very rare";
- break;
- case POT_MAGIC:
- description += " valuable";
- break;
- case POT_STRONG_POISON:
- description += " terribly venomous";
- break;
- }
-
- description += " ";
-
- switch (item.sub_type)
- {
- case POT_MIGHT:
- case POT_GAIN_STRENGTH:
- case POT_GAIN_DEXTERITY:
- case POT_GAIN_INTELLIGENCE:
- case POT_LEVITATION:
- case POT_SLOWING:
- case POT_PARALYSIS:
- case POT_CONFUSION:
- case POT_INVISIBILITY:
- case POT_PORRIDGE:
- case POT_MAGIC:
- case POT_RESTORE_ABILITIES:
- case POT_STRONG_POISON:
- case POT_BERSERK_RAGE:
- case POT_CURE_MUTATION:
- case POT_MUTATION:
- description += "potion";
- break;
- case POT_HEALING:
- description += "fluid";
- break;
- case POT_HEAL_WOUNDS:
- description += "elixir";
- break;
- case POT_SPEED:
- description += "beverage";
- break;
- case POT_POISON:
- case POT_DECAY:
- description += "liquid";
- break;
- case POT_DEGENERATION:
- description += "concoction";
- break;
- case POT_WATER:
- description += "substance";
- break;
- case POT_EXPERIENCE:
- description += "drink";
- break;
- }
-
- switch (item.sub_type)
- {
- case POT_HEALING:
- case POT_HEAL_WOUNDS:
- case POT_SPEED:
- case POT_MIGHT:
- case POT_LEVITATION:
- case POT_SLOWING:
- case POT_PARALYSIS:
- case POT_CONFUSION:
- case POT_INVISIBILITY:
- case POT_DEGENERATION:
- case POT_DECAY:
- case POT_MAGIC:
- case POT_RESTORE_ABILITIES:
- case POT_BERSERK_RAGE:
- case POT_CURE_MUTATION:
- case POT_MUTATION:
- description += " which ";
- break;
- case POT_GAIN_STRENGTH:
- case POT_GAIN_DEXTERITY:
- case POT_GAIN_INTELLIGENCE:
- case POT_PORRIDGE:
- description += " of ";
- break;
- }
-
- switch (item.sub_type)
- {
- case POT_HEALING:
- description += "heals some wounds, clears the mind, "
- "and cures diseases";
- break;
- case POT_HEAL_WOUNDS:
- description += "causes wounds to close and heal "
- "almost instantly";
- break;
- case POT_SPEED:
- description += "speeds the actions of anyone who drinks it";
- break;
- case POT_MIGHT:
- description += "greatly increases the strength and "
- "physical power of one who drinks it";
- break;
- case POT_GAIN_STRENGTH:
- case POT_GAIN_DEXTERITY:
- case POT_GAIN_INTELLIGENCE:
- description += "beneficial mutation";
- break;
- case POT_LEVITATION:
- description += "confers great buoyancy on one who consumes it";
- break;
- case POT_SLOWING:
- description += "slows your actions";
- break;
- case POT_PARALYSIS:
- description += "eliminates your control over your own body";
- break;
- case POT_CONFUSION:
- description += "confuses your perceptions and reduces "
- "your control over your own actions";
- break;
- case POT_INVISIBILITY:
- description += "hides you from the sight of others";
- break;
- case POT_PORRIDGE:
- description += "sludge, high in cereal fibre";
- break;
- case POT_DEGENERATION:
- description += "can do terrible things to your "
- "body, brain and reflexes";
- break;
- case POT_DECAY:
- description += "causes your flesh to decay "
- "before your very eyes";
- break;
- case POT_WATER:
- description += ", vital for the existence of most life";
- break;
- case POT_MAGIC:
- description += "grants a person with an "
- "infusion of magical energy";
- break;
- case POT_RESTORE_ABILITIES:
- description += "restores the abilities of one who drinks it";
- break;
- case POT_BERSERK_RAGE:
- description += "can send one into an incoherent rage";
- break;
- case POT_CURE_MUTATION:
- description += "removes some or all of any mutations "
- "which may be afflicting you";
- break;
- case POT_MUTATION:
- description += "does very strange things to you";
- break;
- }
-
- description += ". ";
-
- switch (item.sub_type)
- {
- case POT_HEALING:
- case POT_HEAL_WOUNDS:
- description += "If one uses it when they are "
- "at or near full health, it can also ";
-
- if (item.sub_type == POT_HEALING)
- description += "slightly ";
- description += "repair permanent injuries. ";
- break;
- }
-
- //default:
- // DEBUGSTR("Unknown potion"); // I had no idea where to put this back 16jan2000 {dlb}
- }
-
- description += "$";
-
- return (description);
-}
-
-
-//---------------------------------------------------------------
-//
-// describe_scroll
-//
-//---------------------------------------------------------------
-static std::string describe_scroll( const item_def &item )
-{
- std::string description;
-
- description.reserve(64);
-
- if (get_ident_type( OBJ_SCROLLS, item.sub_type ) != ID_KNOWN_TYPE)
- description += "A scroll of paper covered in magical writing.";
- else
- {
- switch (item.sub_type)
- {
- case SCR_IDENTIFY:
- description += "This useful magic scroll allows you to "
- "determine the properties of any object. ";
- break;
-
- case SCR_TELEPORTATION:
- description += "Reading the words on this scroll "
- "translocates you to a random position. ";
- break;
-
- case SCR_FEAR:
- description += "This scroll causes great fear in those "
- "who see the one who reads it. ";
- break;
-
- case SCR_NOISE:
- description += "This prank scroll, often slipped into a wizard's "
- "backpack by a devious apprentice, causes a loud noise. "
- "It is not otherwise noted for its usefulness. ";
- break;
-
- case SCR_REMOVE_CURSE:
- description += "Reading this scroll removes curses from "
- "the items you are using. ";
- break;
-
- case SCR_DETECT_CURSE:
- description += "This scroll allows you to detect the presence "
- "of cursed items among your possessions. ";
- break;
-
- case SCR_SUMMONING:
- description += "This scroll opens a conduit to the Abyss "
- "and draws a terrible beast to this world "
- "for a limited time. ";
- break;
-
- case SCR_ENCHANT_WEAPON_I:
- description += "This scroll places an enchantment on a weapon, "
- "making it more accurate in combat. It may fail "
- "to affect weapons already heavily enchanted. ";
- break;
-
- case SCR_ENCHANT_ARMOUR:
- description += "This scroll places an enchantment "
- "on a piece of armour. ";
- break;
-
- case SCR_TORMENT:
- description += "This scroll calls on the powers of Hell to "
- "inflict great pain on any nearby creature - "
- "including you! ";
- break;
-
- case SCR_RANDOM_USELESSNESS:
- description += "It is easy to be blinded to the essential "
- "uselessness of this scroll by the sense of achievement "
- "you get from getting it to work at all.";
- // -- The Hitchhiker's Guide to the Galaxy (paraphrase)
- break;
-
- case SCR_CURSE_WEAPON:
- description += "This scroll places a curse on a weapon. ";
- break;
-
- case SCR_CURSE_ARMOUR:
- description += "This scroll places a curse "
- "on a piece of armour. ";
- break;
-
- case SCR_IMMOLATION:
- description += "Small writing on the back of the scroll reads: "
- "\"Warning: contents under pressure. Do not use near"
- " flammable objects.\"";
- break;
-
- case SCR_BLINKING:
- description += "This scroll allows its reader to teleport "
- "a short distance, with precise control. Be wary that "
- "controlled teleports will cause the subject to "
- "become contaminated with magical energy. ";
- break;
-
- case SCR_PAPER:
- description += "Apart from a label, this scroll is blank. ";
- break;
-
- case SCR_MAGIC_MAPPING:
- description += "This scroll reveals the nearby surroundings "
- "of one who reads it. ";
- break;
-
- case SCR_FORGETFULNESS:
- description += "This scroll induces "
- "an irritating disorientation. ";
- break;
-
- case SCR_ACQUIREMENT:
- description += "This wonderful scroll causes the "
- "creation of a valuable item to "
- "appear before the reader. "
- "It is especially treasured by specialist "
- "magicians, as they can use it to obtain "
- "the powerful spells of their specialty. ";
- break;
-
- case SCR_ENCHANT_WEAPON_II:
- description += "This scroll places an enchantment on a weapon, "
- "making it inflict greater damage in combat. "
- "It may fail to affect weapons already "
- "heavily enchanted. ";
- break;
-
- case SCR_VORPALISE_WEAPON:
- description += "This scroll enchants a weapon so as to make "
- "it far more effective at inflicting harm on "
- "its wielder's enemies. Using it on a weapon "
- "already affected by some kind of special "
- "enchantment (other than that produced by a "
- "normal scroll of enchant weapon) is not advised. ";
- break;
-
- case SCR_RECHARGING:
- description += "This scroll restores the charges of "
- "any magical wand wielded by its reader. ";
- break;
-
- case SCR_ENCHANT_WEAPON_III:
- description += "This scroll enchants a weapon to be "
- "far more effective in combat. Although "
- "it can be used in the creation of especially "
- "enchanted weapons, it may fail to affect those "
- "already heavily enchanted. ";
- break;
-
- default:
- DEBUGSTR("Unknown scroll");
- }
- }
-
- description += "$";
-
- return (description);
-}
-
-
-//---------------------------------------------------------------
-//
-// describe_jewellery
-//
-//---------------------------------------------------------------
-static std::string describe_jewellery( const item_def &item, char verbose)
-{
- std::string description;
-
- description.reserve(200);
-
- if (is_unrandom_artefact( item ) && strlen(unrandart_descrip(1, item)) != 0)
- {
- description += "$";
- description += unrandart_descrip(1, item);
- description += "$$";
- }
- else if ((!is_random_artefact( item )
- && get_ident_type( OBJ_JEWELLERY, item.sub_type ) != ID_KNOWN_TYPE)
- || (is_random_artefact( item )
- && !item_ident( item, ISFLAG_KNOW_TYPE )))
- {
- description += "A piece of jewellery.";
- }
- else if (verbose == 1 || is_random_artefact( item ))
- {
- switch (item.sub_type)
- {
- case RING_REGENERATION:
- description += "This wonderful ring greatly increases the "
- "recuperative powers of its wearer, but also "
- "considerably speeds his or her metabolism. ";
- break;
-
- case RING_PROTECTION:
- description +=
- "This ring either protects its wearer from harm or makes "
- "them more vulnerable to injury, to a degree dependent "
- "on its power. ";
- break;
-
- case RING_PROTECTION_FROM_FIRE:
- description +=
- "This ring provides protection from heat and fire. ";
- break;
-
- case RING_POISON_RESISTANCE:
- description +=
- "This ring provides protection from the effects of poisons and venom. ";
- break;
-
- case RING_PROTECTION_FROM_COLD:
- description += "This ring provides protection from cold. ";
- break;
-
- case RING_STRENGTH:
- description +=
- "This ring increases or decreases the physical strength "
- "of its wearer, to a degree dependent on its power. ";
- break;
-
- case RING_SLAYING:
- description +=
- "This ring increases the hand-to-hand and missile combat "
- "skills of its wearer.";
- break;
-
- case RING_SEE_INVISIBLE:
- description +=
- "This ring allows its wearer to see those things hidden "
- "from view by magic. ";
- break;
-
- case RING_INVISIBILITY:
- description +=
- "This powerful ring can be activated to hide its wearer "
- "from the view of others, but increases the speed of his "
- "or her metabolism greatly while doing so. ";
- break;
-
- case RING_HUNGER:
- description +=
- "This accursed ring causes its wearer to hunger "
- "considerably more quickly. ";
- break;
-
- case RING_TELEPORTATION:
- description +=
- "This ring occasionally exerts its power to randomly "
- "translocate its wearer to another place, and can be "
- "deliberately activated for the same effect. ";
- break;
-
- case RING_EVASION:
- description +=
- "This ring makes its wearer either more or less capable "
- "of avoiding attacks, depending on its degree "
- "of enchantment. ";
- break;
-
- case RING_SUSTAIN_ABILITIES:
- description +=
- "This ring protects its wearer from the loss of their "
- "strength, dexterity and intelligence. ";
- break;
-
- case RING_SUSTENANCE:
- description +=
- "This ring provides energy to its wearer, so that they "
- "need eat less often. ";
- break;
-
- case RING_DEXTERITY:
- description +=
- "This ring increases or decreases the dexterity of its "
- "wearer, depending on the degree to which it has been "
- "enchanted. ";
- break;
-
- case RING_INTELLIGENCE:
- description +=
- "This ring increases or decreases the mental ability of "
- "its wearer, depending on the degree to which it has "
- "been enchanted. ";
- break;
-
- case RING_WIZARDRY:
- description +=
- "This ring increases the ability of its wearer to use "
- "magical spells. ";
- break;
-
- case RING_MAGICAL_POWER:
- description +=
- "This ring increases its wearer's reserves of magical "
- "power. ";
- break;
-
- case RING_LEVITATION:
- description +=
- "This ring allows its wearer to hover above the floor. ";
- break;
-
- case RING_LIFE_PROTECTION:
- description +=
- "This blessed ring protects the life-force of its wearer "
- "from negative energy, making them partially immune to "
- "the draining effects of undead and necromantic magic. ";
- break;
-
- case RING_PROTECTION_FROM_MAGIC:
- description +=
- "This ring increases its wearer's resistance to "
- "hostile enchantments. ";
- break;
-
- case RING_FIRE:
- description +=
- "This ring brings its wearer more in contact with "
- "the powers of fire. He or she gains resistance to "
- "heat and can use fire magic more effectively, but "
- "becomes more vulnerable to the effects of cold. ";
- break;
-
- case RING_ICE:
- description +=
- "This ring brings its wearer more in contact with "
- "the powers of cold and ice. He or she gains resistance "
- "to cold and can use ice magic more effectively, but "
- "becomes more vulnerable to the effects of fire. ";
- break;
-
- case RING_TELEPORT_CONTROL:
- description += "This ring allows its wearer to control the "
- "destination of any teleportation, although without "
- "perfect accuracy. Trying to teleport into a solid "
- "object will result in a random teleportation, at "
- "least in the case of a normal teleportation. Also "
- "be wary that controlled teleports will contaminate "
- "the subject with residual magical energy.";
- break;
-
- case AMU_RAGE:
- description +=
- "This amulet enables its wearer to attempt to enter "
- "a state of berserk rage, and increases their chance "
- "of successfully doing so. It also partially protects "
- "the user from passing out when coming out of that rage. ";
- break;
-
- case AMU_RESIST_SLOW:
- description +=
- "This amulet protects its wearer from some magically "
- "induced forms of slowness, and increases the duration "
- "of enchantments which speed his or her actions. ";
- break;
-
- case AMU_CLARITY:
- description +=
- "This amulet protects its wearer from some forms of "
- "mental confusion. ";
- break;
-
- case AMU_WARDING:
- description +=
- "This amulet repels some of the attacks of creatures "
- "which have been magically summoned. ";
- break;
-
- case AMU_RESIST_CORROSION:
- description +=
- "This amulet protects the armour and weaponry of its "
- "wearer from corrosion caused by acids, although not "
- "infallibly so. ";
- break;
-
- case AMU_THE_GOURMAND:
- description +=
- "This amulet allows its wearer to consume meat in "
- "various states of decay without suffering unduly as "
- "a result. Poisonous or cursed flesh is still not "
- "recommended. ";
- break;
-
- case AMU_CONSERVATION:
- description +=
- "This amulet protects some of the possessions of "
- "its wearer from outright destruction, but not "
- "infallibly so. ";
- break;
-
- case AMU_CONTROLLED_FLIGHT:
- description +=
- "Should the wearer of this amulet be levitated "
- "by magical means, he or she will be able to exercise "
- "some control over the resulting motion. This allows "
- "the descent of staircases and the retrieval of items "
- "lying on the ground, for example, but does not "
- "deprive the wearer of the benefits of levitation. ";
- break;
-
- case AMU_INACCURACY:
- description +=
- "This amulet makes its wearer less accurate in hand combat. ";
- break;
-
- case AMU_RESIST_MUTATION:
- description +=
- "This amulet protects its wearer from mutations, "
- "although not infallibly so. ";
- break;
-
- default:
- DEBUGSTR("Unknown jewellery");
- }
-
- description += "$";
- }
-
- if ((verbose == 1 || is_random_artefact( item ))
- && item_ident( item, ISFLAG_KNOW_PLUSES ))
- {
- // Explicit description of ring power (useful for randarts)
- // Note that for randarts we'll print out the pluses even
- // in the case that its zero, just to avoid confusion. -- bwr
- if (item.plus != 0
- || (item.sub_type == RING_SLAYING && item.plus2 != 0)
- || is_random_artefact( item ))
- {
- switch (item.sub_type)
- {
- case RING_PROTECTION:
- description += "$It affects your AC (";
- append_value( description, item.plus, true );
- description += ").";
- break;
-
- case RING_EVASION:
- description += "$It affects your evasion (";
- append_value( description, item.plus, true );
- description += ").";
- break;
-
- case RING_STRENGTH:
- description += "$It affects your strength (";
- append_value( description, item.plus, true );
- description += ").";
- break;
-
- case RING_INTELLIGENCE:
- description += "$It affects your intelligence (";
- append_value( description, item.plus, true );
- description += ").";
- break;
-
- case RING_DEXTERITY:
- description += "$It affects your dexterity (";
- append_value( description, item.plus, true );
- description += ").";
- break;
-
- case RING_SLAYING:
- if (item.plus != 0 || is_random_artefact( item ))
- {
- description += "$It affects your accuracy (";
- append_value( description, item.plus, true );
- description += ").";
- }
-
- if (item.plus2 != 0 || is_random_artefact( item ))
- {
- description += "$It affects your damage-dealing abilities (";
- append_value( description, item.plus2, true );
- description += ").";
- }
- break;
-
- default:
- break;
- }
- }
- }
-
- // randart properties
- if (is_random_artefact( item ))
- {
- if (item_ident( item, ISFLAG_KNOW_PROPERTIES ))
- randart_descpr( description, item );
- else if (item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- if (item.sub_type >= AMU_RAGE)
- description += "$This amulet may have hidden properties.$";
- else
- description += "$This ring may have hidden properties.$";
- }
- }
-
- if (item_known_cursed( item ))
- {
- description += "$It has a curse placed upon it.";
- }
-
- return (description);
-} // end describe_jewellery()
-
-//---------------------------------------------------------------
-//
-// describe_staff
-//
-//---------------------------------------------------------------
-static std::string describe_staff( const item_def &item )
-{
- std::string description;
-
- description.reserve(200);
-
- if (item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- // NB: the leading space is here {dlb}
- description += "This " + std::string( item_is_staff( item ) ? "staff "
- : "rod " );
-
- switch (item.sub_type)
- {
- case STAFF_WIZARDRY:
- description +=
- "increases the magical proficiency of its wielder by "
- "a considerable degree, increasing the power of their spells. ";
- break;
-
- case STAFF_POWER:
- description +=
- "provides a reservoir of magical power to its wielder. ";
- break;
-
- case STAFF_FIRE:
- description +=
- "increases the power of fire spells cast by its wielder, "
- "and protects him or her from the effects of heat and fire. "
- "It can burn those struck by it. ";
- break;
-
- case STAFF_COLD:
- description +=
- "increases the power of ice spells cast by its wielder, "
- "and protects him or her from the effects of cold. It can "
- "freeze those struck by it. ";
- break;
-
- case STAFF_POISON:
- description +=
- "increases the power of poisoning spells cast by its "
- "wielder, and protects him or her from the effects of "
- "poison. It can poison those struck by it. ";
- break;
-
- case STAFF_ENERGY:
- description +=
- "allows its wielder to cast magical spells without "
- "hungering as a result. ";
- break;
-
- case STAFF_DEATH:
- description +=
- "increases the power of necromantic spells cast by its "
- "wielder. It can cause great pain in those living souls "
- "its wielder strikes. ";
- break;
-
- case STAFF_CONJURATION:
- description +=
- "increases the power of conjurations cast by its wielder. ";
- break;
-
- case STAFF_ENCHANTMENT:
- description +=
- "increases the power of enchantments cast by its wielder. ";
- break;
-
- case STAFF_SUMMONING:
- description +=
- "increases the power of summonings cast by its wielder. ";
- break;
-
- case STAFF_SMITING:
- description +=
- "allows its wielder to smite foes from afar. The wielder "
- "must be at least level four to safely use this ability, "
- "which drains four charges. ";
- break;
-
- case STAFF_STRIKING:
- description += "allows its wielder to strike foes from afar "
- "with force bolts. ";
- break;
-
- case STAFF_SPELL_SUMMONING:
- description += "contains spells of summoning. ";
- break;
-
- case STAFF_WARDING:
- description +=
- "contains spells designed to repel one's enemies. ";
- break;
-
- case STAFF_DISCOVERY:
- description +=
- "contains spells which reveal various aspects of "
- "an explorer's surroundings to them. ";
- break;
-
- case STAFF_AIR:
- description +=
- "increases the power of air spells cast by its wielder. "
- "It can shock those struck by it. ";
- break;
-
- case STAFF_EARTH:
- description +=
- "increases the power of earth spells cast by its wielder. "
- "It can crush those struck by it. ";
- break;
-
- case STAFF_CHANNELING:
- description +=
- "allows its caster to channel ambient magical energy for "
- "his or her own purposes. ";
- break;
-
- default:
- description +=
- "contains spells of mayhem and destruction. ";
- break;
- }
-
- if (item_is_rod( item ))
- {
- if (item.sub_type != STAFF_STRIKING)
- description +=
- "$$It uses its own mana reservoir for casting spells, and "
- "recharges automatically by channeling mana from its "
- "wielder.";
- }
- else
- {
- description +=
- "$$Damage rating: 7 $Accuracy rating: +6 $Attack delay: 120%%";
-
- description += "$$It falls into the 'staves' category. ";
- }
- }
- else
- {
- description += "A stick imbued with magical properties.$";
- }
-
- return (description);
-}
-
-
-//---------------------------------------------------------------
-//
-// describe_misc_item
-//
-//---------------------------------------------------------------
-static std::string describe_misc_item( const item_def &item )
-{
- std::string description;
-
- description.reserve(100);
-
- if (item_ident( item, ISFLAG_KNOW_TYPE ))
- {
- switch (item.sub_type)
- {
- case MISC_BOTTLED_EFREET:
- description +=
- "A mighty efreet, captured by some wizard and bound into "
- "a bronze flask. Breaking the flask's seal will release it "
- "to wreak havoc - possibly on you. ";
- break;
- case MISC_CRYSTAL_BALL_OF_SEEING:
- description +=
- "A magical device which allows one to see the layout of "
- "their surroundings. It requires a degree of magical "
- "ability to be used reliably, otherwise it can produce "
- "unpredictable and possibly harmful results. ";
- break;
- case MISC_AIR_ELEMENTAL_FAN:
- description += "A magical device for summoning air "
- "elementals. It is rather unreliable, and usually requires "
- "several attempts to function correctly. Using it carries "
- "an element of risk, which is reduced if one is skilled in "
- "the appropriate elemental magic. ";
- break;
- case MISC_LAMP_OF_FIRE:
- description += "A magical device for summoning fire "
- "elementals. It is rather unreliable, and usually "
- "requires several attempts to function correctly. Using "
- "it carries an element of risk, which is reduced if one "
- "is skilled in the appropriate elemental magic.";
- break;
- case MISC_STONE_OF_EARTH_ELEMENTALS:
- description += "A magical device for summoning earth "
- "elementals. It is rather unreliable, and usually "
- "requires several attempts to function correctly. "
- "Using it carries an element of risk, which is reduced "
- "if one is skilled in the appropriate elemental magic.";
- break;
- case MISC_LANTERN_OF_SHADOWS:
- description +=
- "An unholy device which calls on the powers of darkness "
- "to assist its user, with a small cost attached. ";
- break;
- case MISC_HORN_OF_GERYON:
- description +=
- "The horn belonging to Geryon, guardian of the Vestibule "
- "of Hell. Legends say that a mortal who desires access "
- "into one of the Hells must use it in order to gain entry. ";
- break;
- case MISC_BOX_OF_BEASTS:
- description +=
- "A magical box containing many wild beasts. One may "
- "allow them to escape by opening the box's lid. ";
- break;
- case MISC_DECK_OF_WONDERS:
- description +=
- "A deck of highly mysterious and magical cards. One may "
- "draw a random card from it, but should be prepared to "
- "suffer the possible consequences! ";
- break;
- case MISC_DECK_OF_SUMMONINGS:
- description +=
- "A deck of magical cards, depicting a range of weird and "
- "wondrous creatures. ";
- break;
- case MISC_CRYSTAL_BALL_OF_ENERGY:
- description +=
- "A magical device which can be used to restore one's "
- "reserves of magical energy, but the use of which carries "
- "the risk of draining all of those energies completely. "
- "This risk varies inversely with the proportion of their "
- "maximum energy which the user possesses; a user near his "
- "or her full potential will find this item most beneficial. ";
- break;
- case MISC_EMPTY_EBONY_CASKET:
- description += "A magical box after its power is spent. ";
- break;
- case MISC_CRYSTAL_BALL_OF_FIXATION:
- description +=
- "A dangerous item which hypnotises anyone so unwise as "
- "to gaze into it, leaving them helpless for a significant "
- "length of time. ";
- break;
- case MISC_DISC_OF_STORMS:
- description +=
- "This extremely powerful item can unleash a destructive "
- "storm of electricity. It is especially effective in the "
- "hands of one skilled in air elemental magic, but cannot "
- "be used by one who is not a conductor. ";
- break;
- case MISC_RUNE_OF_ZOT:
- description +=
- "A talisman which allows entry into Zot's domain. ";
- break;
- case MISC_DECK_OF_TRICKS:
- description +=
- "A deck of magical cards, full of amusing tricks. ";
- break;
- case MISC_DECK_OF_POWER:
- description += "A deck of powerful magical cards. ";
- break;
- case MISC_PORTABLE_ALTAR_OF_NEMELEX:
- description +=
- "An altar to Nemelex Xobeh, built for easy assembly and "
- "disassembly. Evoke it to place it on a clear patch of floor, "
- "then pick it up again when you've finished. ";
- break;
- default:
- DEBUGSTR("Unknown misc item (2)");
- }
- }
- else
- {
- switch (item.sub_type)
- {
- case MISC_BOTTLED_EFREET:
- description += "A heavy bronze flask, warm to the touch. ";
- break;
- case MISC_CRYSTAL_BALL_OF_ENERGY:
- case MISC_CRYSTAL_BALL_OF_FIXATION:
- case MISC_CRYSTAL_BALL_OF_SEEING:
- description += "A sphere of clear crystal. ";
- break;
- case MISC_AIR_ELEMENTAL_FAN:
- description += "A fan. ";
- break;
- case MISC_LAMP_OF_FIRE:
- description += "A lamp. ";
- break;
- case MISC_STONE_OF_EARTH_ELEMENTALS:
- description += "A lump of rock. ";
- break;
- case MISC_LANTERN_OF_SHADOWS:
- description += "A strange lantern made out of ancient bones. ";
- break;
- case MISC_HORN_OF_GERYON:
- description += "A great silver horn, radiating unholy energies. ";
- break;
- case MISC_BOX_OF_BEASTS:
- case MISC_EMPTY_EBONY_CASKET:
- description += "A small black box. I wonder what's inside? ";
- break;
- case MISC_DECK_OF_WONDERS:
- case MISC_DECK_OF_TRICKS:
- case MISC_DECK_OF_POWER:
- case MISC_DECK_OF_SUMMONINGS:
- description += "A deck of cards. ";
- break;
- case MISC_RUNE_OF_ZOT:
- description += "A talisman of some sort. ";
- break;
- case MISC_DISC_OF_STORMS:
- description += "A grey disc. ";
- break;
- case MISC_PORTABLE_ALTAR_OF_NEMELEX:
- description +=
- "An altar to Nemelex Xobeh, built for easy assembly and "
- "disassembly. Evoke it to place on a clear patch of floor, "
- "then pick it up again when you've finished. ";
- break;
- default:
- DEBUGSTR("Unknown misc item");
- }
- }
-
- description += "$";
-
- return (description);
-}
-
-#if MAC
-#pragma mark -
-#endif
-
-// ========================================================================
-// Public Functions
-// ========================================================================
-
-bool is_dumpable_artifact( const item_def &item, char verbose)
-{
- bool ret = false;
-
- if (is_random_artefact( item ) || is_fixed_artefact( item ))
- {
- ret = item_ident( item, ISFLAG_KNOW_PROPERTIES );
- }
- else if (item.base_type == OBJ_ARMOUR
- && (verbose == 1 && item_ident( item, ISFLAG_KNOW_TYPE )))
- {
- const int spec_ench = get_armour_ego_type( item );
- ret = (spec_ench >= SPARM_RUNNING && spec_ench <= SPARM_PRESERVATION);
- }
- else if (item.base_type == OBJ_JEWELLERY
- && (verbose == 1
- && get_ident_type(OBJ_JEWELLERY, item.sub_type) == ID_KNOWN_TYPE))
- {
- ret = true;
- }
-
- return (ret);
-} // end is_dumpable_artifact()
-
-
-//---------------------------------------------------------------
-//
-// get_item_description
-//
-// Note that the string will include dollar signs which should
-// be interpreted as carriage returns.
-//
-//---------------------------------------------------------------
-std::string get_item_description( const item_def &item, char verbose, bool dump )
-{
- std::string description;
- description.reserve(500);
-
- if (!dump)
- {
- char str_pass[ ITEMNAME_SIZE ];
- item_name( item, DESC_INVENTORY_EQUIP, str_pass );
- description += std::string(str_pass);
- }
-
- description += "$$";
-
-#if DEBUG_DIAGNOSTICS
- if (!dump)
- {
- snprintf( info, INFO_SIZE,
- "base: %d; sub: %d; plus: %d; plus2: %d; special: %ld$"
- "quant: %d; colour: %d; flags: 0x%08lx$"
- "x: %d; y: %d; link: %d$ident_type: %d$$",
- item.base_type, item.sub_type, item.plus, item.plus2,
- item.special, item.quantity, item.colour, item.flags,
- item.x, item.y, item.link,
- get_ident_type( item.base_type, item.sub_type ) );
-
- description += info;
- }
-#endif
-
- switch (item.base_type)
- {
- case OBJ_WEAPONS:
- description += describe_weapon( item, verbose );
- break;
- case OBJ_MISSILES:
- description += describe_ammo( item );
- break;
- case OBJ_ARMOUR:
- description += describe_armour( item, verbose );
- break;
- case OBJ_WANDS:
- description += describe_stick( item );
- break;
- case OBJ_FOOD:
- description += describe_food( item );
- break;
- case OBJ_SCROLLS:
- description += describe_scroll( item );
- break;
- case OBJ_JEWELLERY:
- description += describe_jewellery( item, verbose );
- break;
- case OBJ_POTIONS:
- description += describe_potion( item );
- break;
- case OBJ_STAVES:
- description += describe_staff( item );
- break;
-
- case OBJ_BOOKS:
- switch (item.sub_type)
- {
- case BOOK_DESTRUCTION:
- description += "An extremely powerful but unpredictable book "
- "of magic. ";
- break;
-
- case BOOK_MANUAL:
- description += "A valuable book of magic which allows one to "
- "practise a certain skill greatly. As it is used, it gradually "
- "disintegrates and will eventually fall apart. ";
- break;
-
- default:
- description += "A book of magic spells. Beware, for some of the "
- "more powerful grimoires are not to be toyed with. ";
- break;
- }
- break;
-
- case OBJ_ORBS:
- description += "Once you have escaped to the surface with "
- "this invaluable artefact, your quest is complete. ";
- break;
-
- case OBJ_MISCELLANY:
- description += describe_misc_item( item );
- break;
-
- case OBJ_CORPSES:
- description +=
- ((item.sub_type == CORPSE_BODY) ? "A corpse. "
- : "A decaying skeleton. ");
- break;
-
- default:
- DEBUGSTR("Bad item class");
- description += "This item should not exist. Mayday! Mayday! ";
- }
-
- if (verbose == 1)
- {
- description += "$It weighs around ";
-
- const int mass = item_mass( item );
-
- char item_mass[16];
- itoa( mass / 10, item_mass, 10 );
-
- for (int i = 0; i < 14; i++)
- {
- if (item_mass[i] == '\0')
- {
- item_mass[i] = '.';
- item_mass[i+1] = (mass % 10) + '0';
- item_mass[i+2] = '\0';
- break;
- }
- }
-
- description += item_mass;
- description += " aum. "; // arbitrary unit of mass
- }
-
- return (description);
-} // end get_item_description()
-
-
-//---------------------------------------------------------------
-//
-// describe_item
-//
-// Describes all items in the game.
-//
-//---------------------------------------------------------------
-void describe_item( const item_def &item )
-{
-#ifdef DOS_TERM
- char buffer[3400];
-
- gettext(25, 1, 80, 25, buffer);
-
- window(25, 1, 80, 25);
-#endif
-
- clrscr();
-
- std::string description = get_item_description( item, 1 );
- print_description(description);
-
- if ( (item.base_type == OBJ_BOOKS && item_type_known(item)
- && item.sub_type != BOOK_DESTRUCTION
- && item.sub_type != BOOK_MANUAL)
- ||
- count_staff_spells(item, true) > 1 )
- {
- formatted_string fs;
- item_def dup = item;
- spellbook_contents( dup,
- item.base_type == OBJ_BOOKS?
- RBOOK_READ_SPELL
- : RBOOK_USE_STAFF,
- &fs );
- fs.display(2, -2);
- }
-
- if (getch() == 0)
- getch();
-
-#ifdef DOS_TERM
- puttext(25, 1, 80, 25, buffer);
- window(1, 1, 80, 25);
-#endif
-} // end describe_item()
-
-
-//---------------------------------------------------------------
-//
-// describe_spell
-//
-// Describes (most) every spell in the game.
-//
-//---------------------------------------------------------------
-void describe_spell(int spelled)
-{
- std::string description;
-
- description.reserve(500);
-
-#ifdef DOS_TERM
- char buffer[3400];
-
- gettext(25, 1, 80, 25, buffer);
- window(25, 1, 80, 25);
-#endif
-
- clrscr();
- description += spell_title( spelled );
- description += "$$This spell "; // NB: the leading space is here {dlb}
-
- switch (spelled)
- {
- case SPELL_IDENTIFY:
- description += "allows the caster to determine the properties of "
- "an otherwise inscrutable magic item. ";
- break;
-
- case SPELL_TELEPORT_SELF:
- description += "teleports the caster to a random location. ";
- break;
-
- case SPELL_CAUSE_FEAR:
- description += "causes fear in those near to the caster. ";
- break;
-
- case SPELL_CREATE_NOISE:
- description += "causes a loud noise to be heard. ";
- break;
-
- case SPELL_REMOVE_CURSE:
- description += "removes curses from any items which are "
- "being used by the caster. ";
- break;
-
- case SPELL_MAGIC_DART:
- description += "hurls a small bolt of magical energy. ";
- break;
-
- case SPELL_FIREBALL:
- description += "hurls an exploding bolt of fire. This spell "
- "does not cost additional spell levels if the learner already "
- "knows Delayed Fireball. ";
- break;
-
- case SPELL_DELAYED_FIREBALL:
- description = "$$Successfully casting this spell gives the caster "
- "the ability to instantaneously release a fireball at a later "
- "time. Knowing this spell allows the learner to memorise "
- "Fireball for no additional spell levels. ";
- break;
-
- case SPELL_BOLT_OF_MAGMA:
- description += "hurls a sizzling bolt of molten rock. ";
- break;
-
-// spells 7 through 12 ??? {dlb}
-
- case SPELL_CONJURE_FLAME:
- description += "creates a column of roaring flame. ";
- break;
-
- case SPELL_DIG:
- description += "digs a tunnel through unworked rock. ";
- break;
-
- case SPELL_BOLT_OF_FIRE:
- description += "hurls a great bolt of flames. ";
- break;
-
- case SPELL_BOLT_OF_COLD:
- description += "hurls a great bolt of ice and frost. ";
- break;
-
- case SPELL_LIGHTNING_BOLT:
- description += "hurls a mighty bolt of lightning. "
- "Although this spell inflicts less damage than "
- "similar fire and ice spells, it can at once "
- "rip through whole rows of creatures. ";
- break;
-
-// spells 18 and 19 ??? {dlb}
-
- case SPELL_POLYMORPH_OTHER:
- description += "randomly alters the form of another creature. ";
- break;
-
- case SPELL_SLOW:
- description += "slows the actions of a creature. ";
- break;
-
- case SPELL_HASTE:
- description += "speeds the actions of a creature. ";
- break;
-
- case SPELL_PARALYZE:
- description += "prevents a creature from moving. ";
- break;
-
- case SPELL_CONFUSING_TOUCH:
- description += "enchants the casters hands with magical energy. "
- "This energy is released when the caster touches "
- "a monster with their bare hands, and may induce "
- "a state of confusing in the monster. ";
- break;
-
- case SPELL_CONFUSE:
- description += "induces a state of bewilderment and confusion "
- "in a creature's mind. ";
- break;
-
- case SPELL_SURE_BLADE:
- description += "forms a mystical bond between the caster and "
- "a wielded short blade, making the blade much " "easier to use. ";
- break;
-
- case SPELL_INVISIBILITY:
- description += "hides a creature from the sight of others. ";
- break;
-
- case SPELL_THROW_FLAME:
- description += "throws a small bolt of flame. ";
- break;
-
- case SPELL_THROW_FROST:
- description += "throws a small bolt of frost. ";
- break;
-
- case SPELL_CONTROLLED_BLINK:
- description +=
- "allows short-range translocation, with precise control. "
- "Be wary that controlled teleports will cause the subject to "
- "become contaminated with magical energy. ";
- break;
-
- case SPELL_FREEZING_CLOUD:
- description += "conjures up a large cloud of lethally cold vapour. ";
- break;
-
- case SPELL_MEPHITIC_CLOUD:
- description +=
- "conjures up a large but short-lived cloud of vile fumes. ";
- break;
-
- case SPELL_RING_OF_FLAMES:
- description += "surrounds the caster with a mobile ring of searing "
- "flame, and keeps other fire clouds away from the caster. "
- "This spell attunes the caster to the forces of fire, "
- "increasing their fire magic and giving protection from fire. "
- "However, it also makes them much more susceptible to the forces "
- "of ice. "; // well, if it survives the fire wall it's a risk -- bwr
- break;
-
- case SPELL_RESTORE_STRENGTH:
- description += "restores the physical strength of the caster. ";
- break;
-
- case SPELL_RESTORE_INTELLIGENCE:
- description += "restores the intelligence of the caster. ";
- break;
-
- case SPELL_RESTORE_DEXTERITY:
- description += "restores the dexterity of the caster. ";
- break;
-
- case SPELL_VENOM_BOLT:
- description += "throws a bolt of poison. ";
- break;
-
- case SPELL_POISON_ARROW:
- description +=
- "hurls a magical arrow of the most vile and noxious toxin. "
- "No living thing is completely immune to it's effects. ";
- break;
-
- case SPELL_OLGREBS_TOXIC_RADIANCE:
- description +=
- "bathes the caster's surroundings in poisonous green light. ";
- break;
-
- case SPELL_TELEPORT_OTHER:
- description += "randomly translocates another creature. ";
- break;
-
- case SPELL_LESSER_HEALING:
- description +=
- "heals a small amount of damage to the caster's body. ";
- break;
-
- case SPELL_GREATER_HEALING:
- description +=
- "heals a large amount of damage to the caster's body. ";
- break;
-
- case SPELL_CURE_POISON_I:
- description += "removes poison from the caster's system. ";
- break;
-
- case SPELL_PURIFICATION:
- description += "purifies the caster's body, removing "
- "poison, disease, and certain malign enchantments. ";
- break;
-
- case SPELL_DEATHS_DOOR:
- description += "is extremely powerful, but carries a degree of risk. "
- "It renders living casters nigh invulnerable to harm "
- "for a brief period, but can bring them dangerously "
- "close to death (how close depends on one's necromantic "
- "abilities). The spell can be cancelled at any time by "
- "any healing effect, and the caster will receive one "
- "warning shortly before the spell expires. "
- "Undead cannot use this spell. ";
- break;
-
- case SPELL_SELECTIVE_AMNESIA:
- description += "allows the caster to selectively erase one spell "
- "from memory to recapture the magical energy bound "
- "up with it. Casters will be able to memorise this "
- "spell should even their minds be otherwise full of "
- "magic (i.e., already possessing the maximum number "
- "of spells). ";
- break;
-
- case SPELL_MASS_CONFUSION:
- description += "causes confusion in all who gaze upon the caster. ";
- break;
-
- case SPELL_STRIKING:
- description += "hurls a small bolt of force. ";
- break;
-
- case SPELL_SMITING:
- description += "smites one creature of the caster's choice. ";
- break;
-
- case SPELL_REPEL_UNDEAD:
- description += "calls on a divine power to repel the unholy. ";
- break;
-
- case SPELL_HOLY_WORD:
- description += "involves the intonation of a word of power "
- "which repels and can destroy unholy creatures. ";
- break;
-
- case SPELL_DETECT_CURSE:
- description += "alerts the caster to the presence of curses "
- "on his or her possessions. ";
- break;
-
- case SPELL_SUMMON_SMALL_MAMMAL:
- description += "summons one or more "
- "small creatures to the caster's aid. ";
- break;
-
- case SPELL_ABJURATION_I:
- description += "attempts to send hostile summoned creatures to "
- "the place from whence they came, or at least "
- "shorten their stay in the caster's locality. ";
- break;
-
- case SPELL_SUMMON_SCORPIONS:
- description += "summons one or more "
- "giant scorpions to the caster's assistance. ";
- break;
-
- case SPELL_LEVITATION:
- description += "allows the caster to float in the air. ";
- break;
-
- case SPELL_BOLT_OF_DRAINING:
- description += "hurls a deadly bolt of negative energy, "
- "which drains the life from any living creature " "it strikes. ";
- break;
-
- case SPELL_LEHUDIBS_CRYSTAL_SPEAR:
- description += "hurls a lethally sharp bolt of crystal. ";
- break;
-
- case SPELL_BOLT_OF_INACCURACY:
- description += "inflicts enormous damage upon any creature struck "
- "by the bolt of incandescent energy conjured into "
- "existence. Unfortunately, it is very difficult to "
- "aim and very rarely hits anything. Pity, that. ";
- break;
-
- case SPELL_POISONOUS_CLOUD:
- description += "conjures forth a great cloud of lethal gasses. ";
- break;
-
- case SPELL_FIRE_STORM:
- description += "creates a mighty storm of roaring flame. ";
- break;
-
- case SPELL_DETECT_TRAPS:
- description += "reveals traps in the caster's vicinity. ";
- break;
-
- case SPELL_BLINK:
- description += "randomly translocates the caster a short distance. ";
- break;
-
- case SPELL_ISKENDERUNS_MYSTIC_BLAST:
- description += "throws a crackling sphere of destructive energy. ";
- break;
-
- case SPELL_SWARM:
- description += "summons forth a pestilential swarm. ";
- break;
-
- case SPELL_SUMMON_HORRIBLE_THINGS:
- description += "opens a gate to the Abyss and calls through "
- "one or more hideous abominations from that dreadful place."
- " The powers who answer this invocation require of casters "
- "a portion of their intellect in exchange for this service.";
- break;
-
- case SPELL_ENSLAVEMENT:
- description += "causes an otherwise hostile creature "
- "to fight on your side for a while. ";
- break;
-
- case SPELL_MAGIC_MAPPING:
- description += "reveals details about the caster's surroundings. ";
- break;
-
- case SPELL_HEAL_OTHER:
- description += "heals another creature from a distance. ";
- break;
-
- case SPELL_ANIMATE_DEAD:
- description += "causes the dead to rise up and serve the caster; "
- "every corpse within a certain distance of the caster "
- "is affected. By means of this spell, powerful casters "
- "could press into service an army of the mindless undead. ";
- break;
-
- case SPELL_PAIN:
- description += "inflicts an extremely painful injury "
- "upon one living creature. ";
- break;
-
- case SPELL_EXTENSION:
- description +=
- "extends the duration of most beneficial enchantments "
- "affecting the caster. ";
- break;
-
- case SPELL_CONTROL_UNDEAD:
- description +=
- "attempts to enslave any undead in the vicinity of the caster. ";
- break;
-
- case SPELL_ANIMATE_SKELETON:
- description += "raises an inert skeleton to a state of unlife. ";
- break;
-
- case SPELL_VAMPIRIC_DRAINING:
- description += "steals the life of a living creature and grants it "
- "to the caster. Life will not be drained in excess of "
- "what the caster can capably absorb. ";
- break;
-
- case SPELL_SUMMON_WRAITHS:
- description +=
- "calls on the powers of the undead to aid the caster. ";
- break;
-
- case SPELL_DETECT_ITEMS:
- description +=
- "detects any items lying about the caster's general vicinity. ";
- break;
-
- case SPELL_BORGNJORS_REVIVIFICATION:
- description += "instantly heals any and all wounds suffered by the "
- "caster with an attendant, but also permanently lessens his or her "
- "resilience to injury -- the severity of which is dependent on "
- "(and inverse to) magical skill. ";
- break;
-
- case SPELL_BURN:
- description += "burns a creature. ";
- break;
-
- case SPELL_FREEZE:
- description += "freezes a creature. This may temporarily slow the "
- "metabolism of a cold-blooded creature. ";
- break;
-
- case SPELL_SUMMON_ELEMENTAL:
- description += "calls forth "
- "a spirit from the elemental planes to aid the caster. "
- "A large quantity of the desired element must be "
- "available; this is rarely a problem for earth and air, "
- "but may be for fire or water. The elemental will usually "
- "be friendly to casters -- especially those skilled in "
- "the appropriate form of elemental magic.";
- break;
-
- case SPELL_OZOCUBUS_REFRIGERATION:
- description += "drains the heat from the caster and her "
- "surroundings, causing harm to all creatures not resistant to "
- "cold. ";
- break;
-
- case SPELL_STICKY_FLAME:
- description += "conjures a sticky glob of liquid fire, which will "
- "adhere to and burn any creature it strikes. ";
- break;
-
- case SPELL_SUMMON_ICE_BEAST:
- description += "calls forth " "a beast of ice to serve the caster. ";
- break;
-
- case SPELL_OZOCUBUS_ARMOUR:
- description += "encases the caster's body in a protective layer "
- "of ice, the power of which depends on his or her "
- "skill with Ice magic. The caster and the caster's "
- "equipment are protected from the cold, but the "
- "spell will not function for casters already wearing "
- "heavy armour. The effects of this spell are boosted "
- "if the caster is in Ice Form. ";
- break;
-
- case SPELL_CALL_IMP:
- description += "calls forth " "a minor demon from the pits of Hell. ";
- break;
-
- case SPELL_REPEL_MISSILES:
- description += "reduces the chance of projectile attacks striking "
- "the caster. Even powerful attacks such as "
- "lightning bolts or dragon breath are affected, "
- "although smaller missiles are repelled to a "
- "much greater extent. ";
- break;
-
- case SPELL_BERSERKER_RAGE:
- description += "sends the caster into a temporary psychotic rage. ";
- break;
-
- case SPELL_DISPEL_UNDEAD:
- description +=
- "inflicts a great deal of damage on an undead creature. ";
- break;
-
- // spell 86 - Guardian
- // spell 87 - Pestilence
- // spell 99 - Thunderbolt
- // spell 100 - Flame of Cleansing
- // spell 101 - Shining Light
- // spell 102 - Summon Daeva
- // spell 103 - Abjuration II
-
- case SPELL_TWISTED_RESURRECTION:
- description += "allows its caster to imbue a mass of deceased flesh "
- "with a magical life force. Casting this spell involves "
- "the assembling several corpses together; the greater "
- "the combined mass of flesh available, the greater the "
- "chances of success. ";
- break;
-
- case SPELL_REGENERATION:
- description += "dramatically but temporarily increases the caster's "
- "recuperative abilities, while also increasing the rate "
- "of food consumption. ";
- break;
-
- case SPELL_BONE_SHARDS:
- description += "uses the bones of a skeleton (or similar materials: "
- "the rigid exoskeleton of an insect, for example) to "
- "dispense a lethal spray of slicing fragments, allowing "
- "its caster to dispense with conjurations in favour of "
- "necromancy alone to provide a low-level yet very "
- "powerful offensive spell. The use of a large and "
- "heavy skeleton (by wielding it) amplifies this spell's "
- "effect. ";
- break;
-
- case SPELL_BANISHMENT:
- description += "banishes one creature to the Abyss. Those wishing "
- "to visit that unpleasant place in person may always "
- "banish themselves. ";
- break;
-
- case SPELL_CIGOTUVIS_DEGENERATION:
- description +=
- "mutates one creature into a pulsating mass of flesh. ";
- break;
-
- case SPELL_STING:
- description += "throws a magical dart of poison. ";
- break;
-
- case SPELL_SUBLIMATION_OF_BLOOD:
- description += "converts flesh, blood, and other bodily fluids "
- "into magical energy. Casters may focus this spell "
- "on their own bodies (which can be dangerous but "
- "never directly lethal) or can wield freshly butchered "
- "flesh in order to draw power into themselves. ";
- break;
-
- case SPELL_TUKIMAS_DANCE:
- description += "causes a weapon held in the caster's hand to dance "
- "into the air and strike the caster's enemies. It will "
- "not function on magical staves and certain "
- "willful artefacts. ";
- break;
-
- case SPELL_HELLFIRE: // basically, a debug message {dlb}
- description += "should only be available from Dispater's staff. "
- "So how are you reading this? (describe.cc)";
- break;
-
- case SPELL_SUMMON_DEMON:
- description += "opens a gate to the realm of Pandemonium "
- "and draws forth one of its inhabitants "
- "to serve the caster for a time. ";
- break;
-
- case SPELL_DEMONIC_HORDE:
- description += "calls forth "
- "a small swarm of small demons "
- "to do battle with the caster's foes. ";
- break;
-
- case SPELL_SUMMON_GREATER_DEMON:
- description += "calls forth one of the greater demons of Pandemonium "
- "to serve the caster. Beware, for the spell binding it "
- "to service may not outlast "
- "that which binds it to this world! ";
- break;
-
- case SPELL_CORPSE_ROT:
- description += "rapidly accelerates the decomposition of any "
- "corpses lying around the caster, emitting in"
- "process a foul miasmic vapour, which eats away "
- "at the life force of any creature it envelops. ";
- break;
-
- case SPELL_TUKIMAS_VORPAL_BLADE:
- description += "bestows a lethal but temporary sharpness "
- "on a sword held by the caster. It will not affect "
- "weapons otherwise subject to special enchantments. ";
- break;
-
- case SPELL_FIRE_BRAND:
- description += "sets a weapon held by the caster ablaze. It will not "
- "affect weapons otherwise subject to special enchantments. ";
- break;
-
- case SPELL_FREEZING_AURA:
- description +=
- "surrounds a weapon held by the caster with an aura of "
- "freezing cold. It will not affect weapons which are "
- "otherwise subject to special enchantments. ";
- break;
-
- case SPELL_LETHAL_INFUSION:
- description += "infuses a weapon held by the caster with unholy "
- "energies. It will not affect weapons which are "
- "otherwise subject to special enchantments. ";
- break;
-
- case SPELL_CRUSH: // a theory of gravity in Crawl? {dlb}
- description += "crushes a nearby creature with waves of "
- "gravitational force. ";
- break;
-
- case SPELL_BOLT_OF_IRON:
- description += "hurls "
- "a large and heavy metal bolt " "at the caster's foes. ";
- break;
-
- case SPELL_STONE_ARROW:
- description += "hurls "
- "a sharp spine of rock outward from the caster. ";
- break;
-
- case SPELL_TOMB_OF_DOROKLOHE:
- description += "entombs the caster within four walls of rock. These "
- "walls will destroy most objects in their way, but "
- "their growth is obstructed by the presence of any "
- "creature. Beware - only the unwise cast this spell "
- "without reliable means of escape. ";
- break;
-
- case SPELL_STONEMAIL:
- description += "covers the caster with chunky scales of stone, "
- "the durability of which depends on his or her "
- "skill with Earth magic. These scales can coexist "
- "with other forms of armour, but are in and of "
- "themselves extremely heavy and cumbersome. The effects "
- "of this spell are increased if the caster is in Statue Form. ";
- break;
-
- case SPELL_SHOCK:
- description += "throws a bolt of electricity. ";
- break;
-
- case SPELL_SWIFTNESS:
- description += "imbues its caster with the ability to achieve "
- "great movement speeds. Flying spellcasters can move even "
- "faster.";
- break;
-
- case SPELL_FLY:
- description +=
- "grants to the caster the ability to fly through the air. ";
- break;
-
- case SPELL_INSULATION:
- description += "protects the caster from electric shocks. ";
- break;
-
- case SPELL_ORB_OF_ELECTROCUTION:
- description += "hurls "
- "a crackling orb of electrical energy "
- "which explodes with immense force on impact. ";
- break;
-
- case SPELL_DETECT_CREATURES:
- description += "allows the caster to detect any creatures "
- "within a certain radius. ";
- break;
-
- case SPELL_CURE_POISON_II:
- description +=
- "removes some or all toxins from the caster's system. ";
- break;
-
- case SPELL_CONTROL_TELEPORT:
- description += "allows the caster to control translocations. Be "
- "wary that controlled teleports will cause the subject to "
- "become contaminated with magical energy. ";
- break;
-
- case SPELL_POISON_AMMUNITION:
- description += "envenoms missile ammunition held by the caster. ";
- break;
-
- case SPELL_POISON_WEAPON:
- description +=
- "temporarily coats any sharp bladed weapon with poison. Will only "
- "work on weapons without an existing enchantment.";
- break;
-
- case SPELL_RESIST_POISON:
- description += "protects the caster from exposure to all poisons "
- "for a period of time. ";
- break;
-
- case SPELL_PROJECTED_NOISE:
- description += "produces a noise emanating "
- "from a place of the caster's own choosing. ";
- break;
-
- case SPELL_ALTER_SELF:
- description += "causes aberrations to form in the caster's body, "
- "leaving the caster in a weakened state "
- "(though it is not fatal in and of itself). "
- "It may fail to affect those who are already "
- "heavily mutated. ";
- break;
-
-// spell 145 - debugging ray
-
- case SPELL_RECALL:
- description += "is greatly prized by summoners and necromancers, "
- "as it allows the caster to recall any friendly "
- "creatures nearby to a position adjacent to the caster. ";
- break;
-
- case SPELL_PORTAL:
- description += "creates a gate allowing long-distance travel "
- "in relatively ordinary environments "
- "(i.e., the Dungeon only). The portal lasts "
- "long enough for the caster and nearby creatures "
- "to enter. Casters are never taken past the level "
- "limits of the current area. ";
- break;
-
- case SPELL_AGONY:
- description += "cuts the resilience of a target creature in half, "
- "although it will never cause death directly. ";
- break;
-
- case SPELL_SPIDER_FORM:
- description += "temporarily transforms the caster into a venomous, "
- "spider-like creature. Spellcasting is slightly more difficult "
- "in this form. This spell is not powerful enough to allow "
- "the caster to slip out of cursed equipment. ";
- break;
-
- case SPELL_DISRUPT:
- description += "disrupts space around another creature, "
- "causing injury.";
- break;
-
- case SPELL_DISINTEGRATE:
- description += "violently rends apart anything in a small volume of "
- "space. Can be used to cause severe damage.";
- break;
-
- case SPELL_BLADE_HANDS:
- description += "causes long, scythe-shaped blades to grow "
- "from the caster's hands. It makes spellcasting somewhat "
- "difficult. This spell is not powerful enough to force "
- "a cursed weapon from the caster's hands.";
- break;
-
- case SPELL_STATUE_FORM:
- description += "temporarily transforms the caster into a "
- "slow-moving (but extremely robust) stone statue. ";
- break;
-
- case SPELL_ICE_FORM:
- description += "temporarily transforms the caster's body into a "
- "frozen ice-creature. ";
- break;
-
- case SPELL_DRAGON_FORM:
- description += "temporarily transforms the caster into a "
- "great, fire-breathing dragon. ";
- break;
-
- case SPELL_NECROMUTATION:
- description += "first transforms the caster into a "
- "semi-corporeal apparition receptive to negative energy, "
- "then infuses that form with the powers of Death. "
- "The caster becomes resistant to "
- "cold, poison, magic and hostile negative energies. ";
- break;
-
- case SPELL_DEATH_CHANNEL:
- description += "raises living creatures slain by the caster "
- "into a state of unliving slavery as spectral horrors. ";
- break;
-
- case SPELL_SYMBOL_OF_TORMENT:
- description += "calls on the powers of Hell to cause agonising "
- "injury to any living thing in the caster's vicinity. "
- "It carries within itself a degree of danger, "
- "for any brave enough to invoke it, for the Symbol "
- "also affects its caller and indeed will not function "
- "if he or she is immune to its terrible effects. "
- "Despite its ominous power, this spell is never lethal. ";
- break;
-
- case SPELL_DEFLECT_MISSILES:
- description += "protects the caster from "
- "any kind of projectile attack, "
- "although particularly powerful attacks "
- "(lightning bolts, etc.) are deflected "
- "to a lesser extent than lighter missiles. ";
- break;
-
- case SPELL_ORB_OF_FRAGMENTATION:
- description += "throws a heavy sphere of metal "
- "which explodes on impact into a rain of "
- "deadly, jagged fragments. "
- "It can rip a creature to shreds, "
- "but proves ineffective against heavily-armoured targets. ";
- break;
-
- case SPELL_ICE_BOLT:
- description += "throws forth a chunk of ice. "
- "It is particularly effective against "
- "those creatures not immune to the effects of freezing, "
- "but the half of its destructive potential that comes from "
- "its weight and cutting edges "
- "cannot be ignored by even cold-resistant creatures. ";
- break;
-
- case SPELL_ICE_STORM:
- description += "conjures forth "
- "a raging blizzard of ice, sleet and freezing gasses. ";
- break;
-
- case SPELL_ARC:
- description += "zaps at random a nearby creature with a powerful "
- "electrical current.";
- break;
-
- case SPELL_AIRSTRIKE: // jet planes in Crawl ??? {dlb}
- description +=
- "causes the air around a creature to twist itself into "
- "a whirling vortex of meteorological fury. ";
- break;
-
- case SPELL_SHADOW_CREATURES:
- description += "weaves a creature from shadows and threads of "
- "Abyssal matter. The creature thus brought into "
- "existence will recreate some type of creature "
- "found in the caster's immediate vicinity. "
- "The spell even creates appropriate equipment for "
- "the creature, which are given a lasting substance "
- //jmf: if also conjuration:
- //"by the spell's conjuration component. ";
- //jmf: else:
- "by their firm contact with reality. ";
- break;
-
- //jmf: new spells
- case SPELL_FLAME_TONGUE:
- description += "creates a short burst of flame.";
- break;
-
- case SPELL_PASSWALL:
- description += "tunes the caster's body such that it can instantly "
- "pass through solid rock. This can be dangerous, "
- "since it is possible for the spell to expire while "
- "the caster is en route, and it also takes time for the "
- "caster to attune to the rock, during which time they will "
- "be helpless. ";
- break;
-
- case SPELL_IGNITE_POISON:
- description += "attempts to convert all poison within the caster's "
- "view into liquid flame. It is very effective against "
- "poisonous creatures or those carrying poison potions. "
- "It is also an amazingly painful way to eliminate "
- "poison from one's own system. ";
- break;
-
- case SPELL_STICKS_TO_SNAKES: // FIXME: description sucks
- description += "uses wooden items in the caster's grasp as raw "
- "material for a powerful summoning. Note that highly "
- "enchanted items, such as wizard's staves, will not be "
- "affected. ";
- // "Good examples of sticks include arrows, quarterstaves and clubs.";
- break;
-
- case SPELL_SUMMON_LARGE_MAMMAL:
- description += "summons a canine to the caster's aid.";
- break;
-
- case SPELL_SUMMON_DRAGON: //jmf: reworking, currently unavailable
- description += "summons and binds a powerful dragon to perform the "
- "caster's bidding. Beware, for the summons may succeed "
- "even as the binding fails. ";
- break;
-
- case SPELL_TAME_BEASTS:
- description += "attempts to tame animals in the caster's vicinity. "
- "It works best on animals amenable to domestication. ";
- break;
-
- case SPELL_SLEEP:
- description += "tries to lower its target's metabolic rate, "
- "inducing hypothermic hibernation. It may have side effects "
- "on cold-blooded creatures. ";
- break;
-
- case SPELL_MASS_SLEEP:
- description += "tries to lower the metabolic rate of every creature "
- "within the caster's view enough to induce hypothermic hibernation. "
- "It may have side effects on cold-blooded creatures. ";
- break;
-
-/* ******************************************************************
-// not implemented {dlb}:
- case SPELL_DETECT_MAGIC:
- description += "probes one or more items lying nearby for enchantment. "
- "An experienced diviner may glean additional information. ";
- break;
-****************************************************************** */
-
- case SPELL_DETECT_SECRET_DOORS:
- description += "is beloved by lazy dungeoneers everywhere, for it can "
- "greatly reduce time-consuming searches. ";
- break;
-
- case SPELL_SEE_INVISIBLE:
- description += "enables the caster to perceive things that are "
- "shielded from ordinary sight. ";
- break;
-
- case SPELL_FORESCRY:
- description += "makes the caster aware of the immediate future; "
- "while not far enough to predict the result of a "
- "fight, it does give the caster ample time to get "
- "out of the way of a punch (reflexes allowing). ";
- break;
-
- case SPELL_SUMMON_BUTTERFLIES:
- description +=
- "creates a shower of colourful butterflies. How pretty!";
- break;
-
- case SPELL_WARP_BRAND:
- description += "temporarily binds a localized warp field to the "
- "invoker's weapon. This spell is very dangerous to cast, "
- "as the field is likely to effect the caster as well. ";
- break;
-
- case SPELL_SILENCE:
- description += "eliminates all sound near the caster. This makes "
- "reading scrolls, casting spells, praying or yelling "
- "in the caster's vicinity impossible. (Applies to "
- "caster too, of course.) This spell will not hide your "
- "presence, since its oppressive, unnatural effect "
- "will almost certainly alert any living creature that something "
- "is very wrong. ";
- break;
-
- case SPELL_SHATTER:
- description +=
- "causes a burst of concussive force around the caster, "
- "which will damage most creatures, although those "
- "composed of stone, metal or crystal, or otherwise "
- "brittle, will particularly suffer. The magic has been "
- "known to adversely affect walls. ";
- break;
-
- case SPELL_DISPERSAL:
- description += "tries to teleport away any monsters directly beside "
- "the caster. ";
- break;
-
- case SPELL_DISCHARGE:
- description += "releases electric charges against those "
- "next to the caster. These may arc to "
- "adjacent monsters (or even the caster) before "
- "they eventually ground out. ";
- break;
-
- case SPELL_BEND:
- description +=
- "applies a localized spatial distortion to the detriment"
- " of some nearby creature. ";
- break;
-
- case SPELL_BACKLIGHT:
- description += "causes a halo of glowing light to surround and "
- "effectively outline a creature. This glow offsets "
- "the dark, musty atmosphere of the dungeon, and "
- "thereby makes the affected creature appreciably easier to hit.";
- break;
-
- case SPELL_INTOXICATE:
- description += "works by converting a small portion of brain matter "
- "into alcohol. It affects all intelligent humanoids within "
- "the caster's view (presumably including the caster). It "
- "is frequently used as an icebreaker at wizard parties. ";
- break;
-
- case SPELL_GLAMOUR: // intended only as Grey Elf ability
- description += "is an Elvish magic, which draws upon the viewing "
- "creature's credulity and the caster's comeliness "
- "to charm, confuse or render comatose. ";
- break;
-
- case SPELL_EVAPORATE:
- description += "heats a potion causing it to explode into a large "
- "cloud when thrown. The potion must be thrown immediately, "
- "as part of the spell, for this to work. ";
- break;
-
- case SPELL_FULSOME_DISTILLATION:
- description += "extracts the vile and poisonous essences from a "
- "corpse. A rotten corpse may produce a stronger potion."
- "$$You probably don't want to drink the results. ";
- break;
-
-/* ******************************************************************
-// not implemented {dlb}:
- case SPELL_ERINGYAS_SURPRISING_BOUQUET:
- description += "transmutes any wooden items in the caster's grasp "
- "into a bouquet of beautiful flowers. ";
- break;
-****************************************************************** */
-
- case SPELL_FRAGMENTATION:
- description +=
- "creates a concussive explosion within a large body of "
- "rock (or other hard material), to the detriment of "
- "any who happen to be standing nearby. ";
- break;
-
- case SPELL_AIR_WALK:
- description += "transforms the caster's body into an insubstantial "
- "cloud. The caster becomes immaterial and nearly immune "
- "to physical harm, but is vulnerable to magical fire "
- "and ice. While insubstantial the caster is, of course, "
- "unable to interact with physical objects (but may still "
- "cast spells). ";
- break;
-
- case SPELL_SANDBLAST:
- description += "creates a short blast of high-velocity particles. "
- "It works best when the caster provides some source "
- "(by wielding a stone), but will do what it can with "
- "whatever ambient grit is available. ";
- break;
-
- case SPELL_ROTTING:
- description += "causes the flesh of all those near the caster to "
- "rot. It will affect the living and many of the "
- "corporeal undead. ";
- break;
-
- case SPELL_MAXWELLS_SILVER_HAMMER:
- description += "bestows a lethal but temporary gravitic field "
- "to a crushing implement held by the caster. "
- "It will not affect weapons otherwise subject to "
- "special enchantments. ";
- break;
-
- case SPELL_CONDENSATION_SHIELD:
- description += "causes a disc of dense vapour to condense out of the "
- "air surrounding the caster. It acts like a normal "
- "shield, but its density (and therefore stopping power) "
- "depends upon the caster's skill with Ice Magic. The "
- "disc is controlled by the caster's mind and thus will "
- "not conflict with the wielding of a two-handed weapon. ";
- break;
-
- case SPELL_STONESKIN:
- description += "hardens the one's skin to a degree determined "
- "by one's skill in Earth Magic. This only works on relatively "
- "normal flesh; it will aid neither the undead nor the bodily "
- "transformed. The effects of this spell are boosted if the "
- "caster is in Statue Form. ";
- break;
-
- case SPELL_SIMULACRUM:
- description += "uses a piece of a flesh in hand to create a replica "
- "of the original being out of ice. This magic is "
- "unstable so eventually the replica will sublimate "
- "into a freezing cloud, if it isn't hacked or melted "
- "into a small puddle of water first. ";
- break;
-
- case SPELL_CONJURE_BALL_LIGHTNING:
- description += "allows the conjurer to create ball lightning. "
- "Using the spell is not without risk - ball lighting "
- "can be difficult to control. ";
- break;
-
- case SPELL_CHAIN_LIGHTNING:
- description += "releases a massive electrical discharge that "
- "arcs from target to target until it grounds out.";
- break;
-
- case SPELL_TWIST:
- description += "causes a slight spatial distortion around a monster "
- "in line of sight of the caster, causing injury. ";
- break;
-
- case SPELL_FAR_STRIKE:
- description += "allows the caster to transfer the force of a "
- "weapon strike to any target the caster can see. "
- "This spell will only deliver the impact of the blow; "
- "magical side-effects and enchantments cannot be "
- "transferred in this way. The force transferred by "
- "this spell has little to do with one's skill with "
- "weapons, and more to do with personal strength, "
- "translocation skill, and magic ability. ";
- break;
-
- case SPELL_SWAP:
- description += "allows the caster to swap positions with an adjacent "
- "being. ";
- break;
-
- case SPELL_APPORTATION:
- description += "allows the caster to pull the top item or group of "
- "similar items from a distant pile to the floor "
- "near the caster. The mass of the target item(s) will "
- "make the task more difficult, with some items too "
- "massive to ever be moved by this spell. Using this "
- "spell on a group of items can be risky; insufficient "
- "power will cause some of the items to be lost in the "
- "infinite void.";
- break;
-
- default:
- DEBUGSTR("Bad spell");
- description += "apparently does not exist. "
- "Casting it may therefore be unwise. "
-#if DEBUG
- "Instead, go fix it. ";
-#else
- "Please contact Dungeon Tech Support "
- "at /dev/null for details. ";
-#endif // DEBUG
- }
-
- print_description(description);
-
- if (getch() == 0)
- getch();
-
-#ifdef DOS_TERM
- puttext(25, 1, 80, 25, buffer);
- window(1, 1, 80, 25);
-#endif
-} // end describe_spell()
-
-
-//---------------------------------------------------------------
-//
-// describe_monsters
-//
-// Contains sketchy descriptions of every monster in the game.
-//
-//---------------------------------------------------------------
-void describe_monsters(int class_described, unsigned char which_mons)
-{
- std::string description;
-
- description.reserve(200);
-
-#ifdef DOS_TERM
- char buffer[3400];
-
- gettext(25, 1, 80, 25, buffer);
- window(25, 1, 80, 25);
-#endif
-
- clrscr();
- description = std::string( ptr_monam( &(menv[ which_mons ]), DESC_CAP_A ) );
- description += "$$";
-
- switch (class_described)
- {
- // (missing) case 423 - MONS_ANOTHER_LAVA_THING ??? 15jan2000 {dlb}
- // no entry in m_list.h 17jan200 {dlb}
- // monster has no stats!
- // mv: changed ANOTHER_LAVA_THING to SALAMANDER, added stats and
- // description
- // (missing) case 250 - MONS_PROGRAM_BUG ??? 16jan2000 {dlb}
- case MONS_KILLER_BEE_LARVA:
- description += "A small, powerless larva of killer bee.";
- break;
-
- case MONS_QUASIT:
- description += "A small twisted demon with long sharply pointed tail.";
- break;
-
- case MONS_ANGEL:
- description += "A winged holy being of unnatural beauty. "
- "It's surrounded by aura of brilliant golden light. ";
- break;
-
- case MONS_HUMAN:
- // These should only be possible from polymorphing or shapeshifting.
- description += "A remarkably nondescript person. How odd!";
- break;
-
- case MONS_GIANT_ANT:
- description += "A black ant with poisonous pincers,"
- " about the size of a large dog.";
- break;
-
- case MONS_SOLDIER_ANT:
- description += "A giant ant with large mandibles and a vicious sting.";
- break;
-
- case MONS_QUEEN_ANT:
- description += "A bloated insect, covered in thick chitinous armour."
- "Now you know where all those ants keep coming from!";
- break;
-
- case MONS_ANT_LARVA:
- description += "A baby ant. Isn't it cute?";
- break;
-
- case MONS_GIANT_BAT:
- description += "A huge black bat.";
- break;
-
- case MONS_CENTAUR:
- case MONS_CENTAUR_WARRIOR:
- description += "A hybrid with the torso of a "
- "human atop the body of a large horse. ";
- if (class_described == MONS_CENTAUR_WARRIOR)
- description += "It looks strong and aggressive. ";
- break;
-
- case MONS_YAKTAUR:
- case MONS_YAKTAUR_CAPTAIN:
- description += "Like a centaur, but half yak. ";
- if (class_described == MONS_YAKTAUR_CAPTAIN)
- description += "It looks very strong and aggressive. ";
- break;
-
- case MONS_RED_DEVIL:
- description += "The Red Devil is slightly shorter than a human, "
- "but muscular and covered in spikes and horns. Two "
- "short wings sprout from its shoulders.";
- break;
-
- case MONS_ROTTING_DEVIL:
- description += "A hideous decaying form.";
- if (you.species == SP_GHOUL)
- description += "$It smells great!";
- else if (you.species != SP_MUMMY)
- description += "$It stinks.";
- break;
-
- case MONS_HAIRY_DEVIL:
- description += "A small humanoid demon covered in brown hair. "
- "Watch out - it may have fleas!";
- break;
-
- case MONS_ICE_DEVIL:
- description += "A man-sized demon covered in glittering ice.";
- break;
-
- case MONS_BLUE_DEVIL:
- description += "A strange and nasty blue thing. It looks cold.";
- break;
-
- case MONS_IRON_DEVIL:
- description += "A hideous humanoid figure with metal skin.";
- break;
-
- case MONS_ETTIN:
- description += "A large, two headed humanoid. Most often seen "
- "wielding two weapons, so that the heads will have one less "
- "thing to bicker about.";
- break;
-
- case MONS_FUNGUS:
- description += "A lumpy grey fungus, "
- "growing well in the dank underground dungeon.";
- break;
-
- case MONS_GOBLIN:
- description += "A race of short, ugly and unfriendly humanoids.";
- break;
-
- case MONS_HOUND:
- description += "A fearsome hunting dog.";
- break;
-
- case MONS_HELL_HOUND:
- description += "A huge black dog, with glowing red eyes and "
- "smoke pouring from its fanged mouth.";
- break;
-
- case MONS_WAR_DOG:
- description += "A vicious dog, trained to kill."
- "Its neck is protected by massive spiked collar.";
- break;
-
- case MONS_IMP:
- description += "A small, ugly minor demon.";
- break;
-
- case MONS_JACKAL:
- description += "A small, dog-like scavenger. Packs of these creatures "
- "roam the underworld, searching for carrion to devour.";
- break;
-
- case MONS_KILLER_BEE:
- description += "A giant bee, bearing a deadly barb which can sting "
- "repeatedly.";
- break;
-
- case MONS_QUEEN_BEE:
- description += "Even larger and more dangerous-looking than its "
- "offspring, this creature wants you out of its hive. Now!";
- break;
-
- case MONS_BUMBLEBEE:
- description += "A very large and fat hairy bee.";
- break;
-
- case MONS_MANTICORE:
- description += "A hideous cross-breed, bearing the features of a "
- "human and a lion, with great bat-like wings. Its tail "
- "bristles with spikes, which can be loosed at potential prey.";
- break;
-
- case MONS_NECROPHAGE:
- description += "A vile undead creation of the most unholy necromancy,"
- " these creatures are made from the decaying corpses "
- "of humanoid creatures. They exist to spread disease "
- "and decay, and gain power from the decaying corpses "
- "of other beings.";
- break;
-
- case MONS_GHOUL:
- description += "An undead humanoid creature created from the decaying "
- "corpse by some unholy means of necromancy. It "
- "exists to spread disease and decay, and gains power"
- "from the decaying corpses same way as necrophage does.";
- break;
-
- case MONS_ORC:
- description += "An ugly subterranean race, orcs combine the"
- " worst features of humans, pigs, and several"
- " other unpleasant creatures.";
- break;
-
- case MONS_ORC_KNIGHT:
- description += "A heavily armoured orc, covered in scars from many "
- "past battles.";
- break;
-
- case MONS_ORC_PRIEST:
- description += "A servant of the ancient and cruel gods of the orcs,"
- " dressed in long robe. he's mumbling some strange prayers. "
- "Hope that they will remain unheard.";
- break;
-
- case MONS_ORC_HIGH_PRIEST:
- description += "An exalted servant of the orc god.";
- break;
-
- case MONS_ORC_SORCERER:
- description += "An orc who draws magical power from Hell.";
- break;
-
- case MONS_ORC_WARLORD:
- description += "A very large and strong looking orc.";
- break;
-
- case MONS_ORC_WARRIOR:
- description += "An armoured orc, obviously experienced in the ways of "
- "hacking other creatures apart.";
- break;
-
- case MONS_ORC_WIZARD:
- description += "While orcs are generally quite stupid, occasionally"
- " one develops an aptitude for magic.";
- break;
-
- case MONS_PHANTOM:
- description += "A transparent man-like undead spirit.";
- break;
-
- case MONS_RAT:
- description += "Rats which have grown large and aggressive in "
- "the pestilential dungeon environment.";
- break;
-
- case MONS_GREY_RAT:
- description += "A very large grey rat.";
- break;
-
- case MONS_GREEN_RAT:
- description += "A very large rat, with hair and skin of a "
- "most peculiar green colour.";
- break;
-
- case MONS_ORANGE_RAT:
- description += "A huge rat, with weird knobbly orange skin."
- "It glows with unholy energies. ";
- break;
-
- case MONS_SCORPION:
- description += "A giant black scorpion, its body covered in thick"
- " armour plating, and its tail tipped by a nasty "
- "venomous sting.";
- break;
-
-/* ******************************************************************
-// the tunneling worm is no more ...
-// not until it can be re-implemented safely {dlb}
- case MONS_TUNNELING_WORM:
- case MONS_WORM_TAIL:
- description += "A gargantuan worm, its huge maw capable of crushing rock into dust with little trouble.";
- break;
-****************************************************************** */
-
- case MONS_BRAIN_WORM:
- description += "A slimy mauve worm with a greatly distended head.";
- break;
-
- case MONS_LAVA_WORM:
- description += "A vicious red worm which swims through molten rock.";
- break;
-
- case MONS_SPINY_WORM:
- description += "A great black worm, its many-segmented body covered "
- "in spiky plates of chitinous armour. Acidic venom drips "
- "from its toothy maw.";
- break;
-
- case MONS_SWAMP_WORM:
- description += "A large slimy worm, adept at swimming through the "
- "muck of this foul swamp.";
- break;
-
- case MONS_WORM:
- description += "A giant worm, with unusually large teeth.";
- break;
-
- case MONS_UGLY_THING:
- description += "An ugly thing. Yuck.";
- break;
-
- case MONS_VERY_UGLY_THING:
- description += "A very ugly thing. Double yuck.";
- break;
-
- case MONS_FIRE_VORTEX:
- description += "A swirling cloud of flame.";
- break;
-
- case MONS_SPATIAL_VORTEX:
- description += "A crazily shifting twist in the fabric of reality.";
- break;
-
- case MONS_ABOMINATION_SMALL:
- description +=
- "A hideous form, created or summoned by some arcane process.";
- break;
-
- case MONS_ABOMINATION_LARGE:
- description += "A huge and hideous form, created or summoned "
- "by some arcane process.";
- break;
-
- case MONS_YELLOW_WASP:
- description += "A giant wasp covered with thick plates of yellow "
- "chitinous armour.";
- break;
-
- case MONS_RED_WASP:
- description += "A huge red wasp with a viciously barbed stinger.";
- break;
-
- case MONS_ZOMBIE_SMALL:
- description += "A corpse raised to undeath by necromancy. ";
- break;
- case MONS_ZOMBIE_LARGE:
- description += "A large corpse raised to undeath by necromancy. ";
- break;
-
- case MONS_SIMULACRUM_LARGE:
- case MONS_SIMULACRUM_SMALL:
- description += "An ice replica of a monster, that's animated by "
- "the powers of necromancy. ";
- break;
-
- case MONS_CYCLOPS:
- description += "A giant with one eye in the centre of its forehead."
- " Despite their lack of binocular vision, cyclopes "
- "throw boulders with fearsomely accuracy.";
- break;
-
- case MONS_DRAGON:
- description += "A great reptilian beast, covered in thick green "
- "scales and with two huge bat-like wings. Little trails "
- "of smoke spill from its toothy maw.";
- break;
-
- case MONS_GOLDEN_DRAGON:
- description += "A great dragon covered in shining golden scales. ";
- break;
-
- case MONS_ICE_DRAGON:
- description +=
- "Like a normal dragon, only white and covered in frost.";
- break;
-
- case MONS_IRON_DRAGON:
- description += "A very heavy and apparently flightless dragon.";
- break;
-
- case MONS_MOTTLED_DRAGON:
- description += "A small dragon with strangely mottled scales.";
- break;
-
- case MONS_QUICKSILVER_DRAGON:
- description += "A long and sinuous dragon, seemingly more neck and "
- "tail than anything else. Its skin shines like molten mercury, "
- "and magical energies arc from its pointed snout.";
- break;
-
- case MONS_SHADOW_DRAGON:
- description += "A great shadowy shape, radiating evil and death.";
- break;
-
- case MONS_SKELETAL_DRAGON:
- description += "A huge undead abomination, pieced together from "
- "the broken bones of many dragons.";
- break;
-
- case MONS_STEAM_DRAGON:
- description += "A relatively small grey dragon, with steam pouring "
- "from its mouth.";
- break;
-
- case MONS_STORM_DRAGON:
- description += "A huge and very powerful dragon. "
- "Sparks crackle along its enormous scaly wings.";
- break;
-
- case MONS_SWAMP_DRAGON:
- description += "A slimy dragon, covered in swamp muck. "
- "Poisonous gasses dribble from its snout.";
- break;
-
- case MONS_SERPENT_OF_HELL:
- description += "A huge red glowing dragon, burning with hellfire. ";
- break;
-
- case MONS_SWAMP_DRAKE:
- description += "A small and slimy dragon, covered in swamp muck. ";
- if (you.species != SP_MUMMY)
- description += "It smells horrible.";
- break;
-
- case MONS_FIREDRAKE:
- description += "A small dragon, puffing clouds of smoke.";
- break;
-
- case MONS_TWO_HEADED_OGRE:
- description += "A huge ogre with two heads on top of a "
- "bloated ogre body. It is capable of holding a weapon "
- "in each giant hand.";
- break;
-
- case MONS_FIEND:
- description += "One of the most fearsome denizens of any Hell. "
- "A huge and powerful demon wreathed in hellfire,"
- " with great scaly wings.";
- break;
-
- case MONS_ICE_FIEND:
- description += "One of the most terrible denizens of the "
- "many Hells, the Ice Fiend is a huge icy figure, "
- "covered in frost and wreathed in freezing air.";
- break;
-
- case MONS_SHADOW_FIEND:
- description += "One of the most terrible denizens of the many Hells, "
- "this horrible being appears as a great mass of "
- "writhing shadows which occasionally reveal a huge, "
- "horned skeleton.";
- break;
-
- case MONS_GIANT_SPORE:
- description += "A volatile floating ball of spores, "
- "covered in knobbly rhizome growths.";
- break;
-
- case MONS_HOBGOBLIN:
- description += "A larger and stronger relatives of goblins.";
- break;
-
- case MONS_ICE_BEAST:
- description +=
- "A terrible creature, formed of snow and crystalline ice. "
- "Its feet leave puddles of icy water on the floor.";
- break;
-
- case MONS_KOBOLD:
- description += "Reputedly the creation of an ancient demon-god, "
- "kobolds are small goblin-like creatures with canine heads.";
- break;
-
- case MONS_BIG_KOBOLD:
- description += "An unusually large kobold.";
- break;
-
- case MONS_KOBOLD_DEMONOLOGIST:
- description += "A kobold who has learned to summon and direct demons.";
- break;
-
- case MONS_LICH:
- description +=
- "A wizard who didn't want to die, a Lich is a skeletal,"
- " desiccated corpse kept alive by a mighty exercise of "
- "necromancy. These undead creatures can wield great "
- "magic and are best avoided by all but the most confident.";
- break;
-
- case MONS_ANCIENT_LICH:
- description += "A lich who has grown mighty over countless years. ";
- break;
-
- case MONS_MUMMY:
- description += "An undead figure covered in "
- "bandages and embalming fluids, "
- "compelled to walk by an ancient curse. "
- "It radiates a malign aura to those who intrude on its domain. ";
- break;
-
- case MONS_GUARDIAN_MUMMY:
- description += "An ancient warrior, embalmed "
- "and cursed to walk in undeath for eternity.";
- break;
-
- case MONS_GREATER_MUMMY:
- case MONS_MUMMY_PRIEST:
- description += "The embalmed and undead corpse of an ancient ";
- if (class_described == MONS_GREATER_MUMMY)
- description += "ruler";
- else
- description += "servant of darkness";
- description += ".";
- break;
-
- case MONS_NAGA:
- case MONS_NAGA_MAGE:
- case MONS_NAGA_WARRIOR:
- case MONS_GUARDIAN_NAGA:
- case MONS_GREATER_NAGA:
- if (you.species == SP_NAGA)
- description = "An attractive";
- else
- description = "A strange";
-
- description += " hybrid; human from the chest up,"
- " with a scaly, muscular torso trailing off like "
- " that of a snake. ";
-
- switch (class_described)
- {
- case MONS_GUARDIAN_NAGA:
- description += "These nagas are "
- "often used as guardians by powerful creatures.";
- break;
- case MONS_GREATER_NAGA:
- description += "It looks strong and aggressive.";
- break;
- case MONS_NAGA_MAGE:
- description += "An eldritch nimbus trails its motions. ";
- break;
- case MONS_NAGA_WARRIOR:
- description += "It bears scars of many past battles. ";
- break;
- }
- break;
-
- case MONS_OGRE:
- description += "A larger, uglier and fatter relative "
- "of orcs and goblins.";
- break;
-
- case MONS_OGRE_MAGE:
- description += "A rare breed of ogre, skilled in the use of magic.";
- break;
-
- case MONS_PLANT:
- description += "Few plants can grow in the unpleasant dungeon "
- "environment, but some have managed to adapt and even thrive "
- "underground in the absence of the sun.";
- break;
-
- case MONS_OKLOB_PLANT:
- description += "A vicious plant, dripping with vitriol.";
- break;
-
- case MONS_RAKSHASA:
- case MONS_RAKSHASA_FAKE:
- description += "A type of demon who comes to the material world in "
- "search of power and knowledge. Rakshasas are experts"
- " in the art of illusion, among other things.";
- break;
-
- case MONS_SNAKE:
- description += "The common dungeon snake. ";
- break;
-
- case MONS_BLACK_SNAKE:
- description += "A large black snake. ";
- break;
-
- case MONS_BROWN_SNAKE:
- description += "A large brown snake.";
- break;
-
- case MONS_GREY_SNAKE:
- description += "A very large grey python.";
- break;
-
- case MONS_LAVA_SNAKE:
- description += "A burning red snake which rears up from pools "
- "of lava and tries to bite you.";
- break;
-
- case MONS_SMALL_SNAKE:
- description += "The lesser dungeon snake.";
- break;
-
- case MONS_YELLOW_SNAKE:
- description += "A large yellow tubular reptile.";
- break;
-
- case MONS_GIANT_NEWT:
- description += "Several times the size of a normal newt, but still "
- "not really impressive.";
- break;
-
- case MONS_GIANT_GECKO:
- description += "A lizard with pads on its toes allowing it to cling "
- "to walls and ceilings. It's much larger than a normal gecko... "
- "perhaps it's something in the water?";
- break;
-
- case MONS_GIANT_IGUANA:
- case MONS_GIANT_LIZARD:
- description += "A huge lizard with great crunching jaws.";
- break;
-
- case MONS_GILA_MONSTER:
- description += "A large lizard with brightly coloured stripes and "
- "splotches.";
- break;
-
- case MONS_KOMODO_DRAGON:
- description += "An enormous monitor lizard. It's more than capable "
- "of preying on large animals. Bits of fetid and rotting flesh "
- "from its last few meals are stuck in its teeth.";
- break;
-
- case MONS_LINDWURM:
- description += "A small serpentine dragon with a pair of strong "
- "forelimbs. Its thick scales give off an eerie green glow.";
- break;
-
- case MONS_TROLL:
- description +=
- "A huge, nasty-looking creature. Its thick and knobbly hide "
- "seems to heal almost instantly from most wounds.";
- break;
-
- case MONS_DEEP_TROLL:
- description += "A stooped troll.";
- break;
-
- case MONS_IRON_TROLL:
- description +=
- "A great troll, plated with thick scales of rusty iron.";
- // you can't see its hide, but think it's thick and kobbly, too :P {dlb}
- //jmf: I thought its skin *was* the rusty iron. If so, ought to change
- // shatter_monsters in spells4.cc.
- break;
-
- case MONS_ROCK_TROLL:
- description +=
- "An enormous and very nasty-looking humanoid creature. Its "
- "rocky hide seems to heal almost instantaneously from most wounds.";
- break;
-
- case MONS_UNSEEN_HORROR:
- description +=
- "These creatures are usually unseen by the eyes of most,"
- " and those few who have seen them would rather not have.";
- break;
-
- case MONS_VAMPIRE:
- description += "A powerful undead.";
- if (you.is_undead == US_ALIVE)
- description += " It wants to drink your blood! ";
- break;
-
- case MONS_VAMPIRE_KNIGHT:
- description +=
- "A powerful warrior, with skills undiminished by undeath.";
- if (you.is_undead == US_ALIVE)
- description += " It wants to drink your blood! ";
- break;
-
- case MONS_VAMPIRE_MAGE:
- description += "Undeath has not lessened this powerful mage.";
- if (you.is_undead == US_ALIVE)
- description += " It wants to drink your blood! ";
- break;
-
- case MONS_WRAITH:
- description += "This undead spirit appears as a cloud of black mist "
- "surrounding an insubstantial skeletal form. Its eyes "
- "burn bright with unholy malevolence.";
- break;
-
- case MONS_FREEZING_WRAITH:
- description += "A cloud of freezing air surrounding an incorporeal "
- "skeletal form.";
- break;
-
- case MONS_SHADOW_WRAITH:
- description += "A mist-wreathed skeletal shadow hanging in mid-air, "
- "this creature is almost invisible even to your enhanced sight. ";
- // assumes: to read this message, has see invis
- break;
-
- case MONS_YAK:
- description += "The common dungeon yak, covered in shaggy yak hair "
- "and bearing a nasty pair of yak horns.";
- break;
-
- case MONS_DEATH_YAK:
- description += "A larger and beefier relative of the common dungeon "
- "yak. Its little red eyes gleam with hunger for living flesh.";
- break;
-
- case MONS_WYVERN:
- description += "A dragon-like creature with long sharply pointed tail."
- " Although smaller and less formidable than true dragons, "
- "wyverns are nonetheless a foe to be reckoned with.";
- break;
-
- case MONS_GIANT_EYEBALL:
- description += "A giant eyeball, with a captivating stare.";
- break;
-
- case MONS_GREAT_ORB_OF_EYES:
- description += "A levitating ball, covered in malignant eyes.";
- break;
-
- case MONS_EYE_OF_DEVASTATION:
- description += "A huge eyeball, encased in a levitating globe of "
- "incandescent energy. ";
- break;
-
- case MONS_SHINING_EYE:
- description += "A huge and strangely deformed eyeball, "
- "pulsating with light. "
- "Beauty is certainly nowhere to be found " "in this beholder. ";
- break;
-
- case MONS_EYE_OF_DRAINING:
- description +=
- "These hovering horrors are especially loathed by wizards.";
- break;
-
- case MONS_WIGHT:
- description += "An ancient warrior, kept in a state of undeath "
- "by its will to live.";
- break;
-
- case MONS_WOLF_SPIDER:
- description += "A large hairy spider with vicious mandibles, "
- "roaming the dungeon in search of food.";
- break;
-
- case MONS_REDBACK:
- description += "A vicious black spider with a splash of red on its "
- "swollen abdomen. Its mandibles drip with lethal poison.";
- break;
-
- case MONS_SHADOW:
- description +=
- "An wisp of unliving shadow, drifting on the edge of vision.";
- break;
-
- case MONS_HUNGRY_GHOST:
- description += "The undead form of someone who died of starvation,"
- " this creature wants the same thing to happen to you!";
- break;
-
- case MONS_BUTTERFLY:
- description += "A large multicoloured butterfly with beautifully "
- "patterned wings.";
- break;
-
- case MONS_WANDERING_MUSHROOM:
- description += "A large, fat mushroom.";
- break;
-
- case MONS_EFREET:
- description +=
- "A huge and muscular figure engulfed in a cloud of searing flame.";
- break;
-
- case MONS_GIANT_ORANGE_BRAIN:
- description += "A huge wrinkled brain, floating just off the floor."
- " Every now and then it seems to pulsate.";
- break;
-
- case MONS_GIANT_BEETLE:
- description += "A huge black beetle with great crunching mandibles "
- "and very hard chitinous armour.";
- break;
-
- case MONS_BORING_BEETLE:
- description +=
- "A large brown beetle with huge, rock-crushing mandibles.";
- break;
-
- case MONS_BOULDER_BEETLE:
- description +=
- "A huge grey beetle with an almost impenetrable rocky carapace.";
- break;
-
- case MONS_FLYING_SKULL:
- description +=
- "Unholy magic keeps a disembodied undead skull hovering "
- "above the floor. It has a nasty set of teeth.";
- break;
-
- case MONS_MINOTAUR:
- description += "A large muscular human with the head of a bull. "
- "It makes its home in secluded labyrinths.";
- break;
-
- case MONS_SLIME_CREATURE:
- description +=
- "An icky glob of slime, which slithers along the ground.";
- break;
-
- case MONS_HELLION:
- description += "A frightful demon, covered in roaring hellfire.";
- break;
-
- case MONS_TORMENTOR:
- description += "This malign devil is covered in all manner "
- "of claws, spines and cruel hooks.";
- break;
-
- case MONS_REAPER:
- description += "A skeletal form wielding a giant scythe. ";
- if (you.is_undead == US_ALIVE)
- description += "It has come for your soul!";
- break;
-
- case MONS_SOUL_EATER:
- description +=
- "This greater demon looks like a shadow gliding through "
- "the air towards you. It radiates an intense aura of negative power.";
- break;
-
- case MONS_BEAST:
- description += "A weird and hideous cross between beast and human.";
- break;
-
- case MONS_GLOWING_SHAPESHIFTER:
- description += "A shapeshifter who has lost control over its "
- "transformations, and is constantly changing form.";
- break;
-
- case MONS_SHAPESHIFTER:
- description += "A weird creature with the power to change its form. "
- "It is very rarely observed alive in its natural state.";
- break;
-
- case MONS_GIANT_MITE:
- description += "A large arachnid with vicious poisoned mouth-parts.";
- break;
-
- case MONS_GRIFFON:
- case MONS_HIPPOGRIFF:
- description += "A large creature with the hindquarters of a ";
- if (class_described == MONS_HIPPOGRIFF)
- description += "horse";
- else
- description += "lion";
- description += " and the wings, head, and talons of a great eagle. ";
- break;
-
- case MONS_HYDRA:
- description +=
- "A great reptilian beast, distantly related to the dragon."
- " It has many heads, and the potential to grow many more!";
- break;
-
- case MONS_SKELETON_SMALL: //MONS_SMALL_SKELETON:
- case MONS_SKELETON_LARGE: //MONS_LARGE_SKELETON:
- description +=
- "A skeleton compelled to unlife by the exercise of necromancy.";
- break;
-
- case MONS_SKELETAL_WARRIOR:
- description += "The vicious and heavily armed skeleton of a humanoid "
- "creature, animated by unholy power.";
- break;
-
- case MONS_HELL_KNIGHT:
- description += "A heavily armoured warrior, in league with the powers"
- " of Hell.";
- break;
-
- case MONS_WIZARD:
- description += "An rather eccentric person, dabbling in all sorts of"
- " arcanities.";
- break;
-
- case MONS_NECROMANCER:
- description +=
- "A wizard specializing in the practices of necromantic magic.";
- break;
-
- case MONS_GNOLL:
- description +=
- "A taller and better equipt relative of goblins and orcs.";
- break;
-
- case MONS_CLAY_GOLEM:
- description += "A huge animated clay statue.";
- break;
-
- case MONS_WOOD_GOLEM:
- description += "An animated wooden statue.";
- break;
-
- case MONS_STONE_GOLEM:
- description += "A huge animated stone statue.";
- break;
-
- case MONS_IRON_GOLEM:
- description += "A huge animated metal statue.";
- break;
-
- case MONS_CRYSTAL_GOLEM:
- description += "A huge animated crystal statue.";
- break;
-
- case MONS_TOENAIL_GOLEM:
- description += "A huge animated statue made entirely from toenail "
- "clippings. Some people just have too much time on their hands.";
- break;
-
- case MONS_ELECTRIC_GOLEM:
- description += "An animated figure made completely of electricity. ";
- break;
-
- case MONS_EARTH_ELEMENTAL:
- description += "A spirit drawn from the elemental plane of earth, "
- "which exists in this world by inhabiting a lump of earth and rocks.";
- break;
-
- case MONS_FIRE_ELEMENTAL:
- description += "A spirit drawn from the elemental plane of fire, "
- "which exists in this world as a brilliant column of raging flames.";
- break;
-
- case MONS_AIR_ELEMENTAL:
- description += "A spirit drawn from the elemental plane of air. "
- "It exists in this world as a swirling vortex of air, "
- "often dissipating and reforming.";
- break;
-
- case MONS_WATER_ELEMENTAL:
- description += "A spirit drawn from the elemental plane of water. "
- "It exists on this world as part of a body of water.";
- break;
-
- case MONS_SPECTRAL_WARRIOR: // spectre
- description += "A hideous translucent green undead spirit.";
- break;
-
- case MONS_CURSE_TOE:
- description += "A disembodied toe, hanging in the air and"
- " radiating an intense field of negative energy.";
- break;
-
- case MONS_PULSATING_LUMP:
- description += "A revolting glob of writhing flesh.";
- break;
-
- case MONS_OOZE:
- description += "A disgusting glob of grey sludge.";
- break;
-
- case MONS_BROWN_OOZE:
- description += "A viscous liquid, flowing along the floor "
- "in search of organic matter to corrode. ";
- break;
-
- case MONS_DEATH_OOZE:
- description += "A putrid mass of decaying flesh. ";
- break;
-
- case MONS_GIANT_AMOEBA:
- description += "A pulsating lump of protoplasm. ";
- break;
-
- case MONS_JELLY:
- description += "A pulsating mass of acidic protoplasm. It can and "
- "will eat almost anything, and grows a little each time...";
- break;
-
- case MONS_AZURE_JELLY:
- description += "A frosty blob of bright blue cytoplasm. ";
- break;
-
- case MONS_ACID_BLOB:
- description +=
- "A lump of sickly green flesh, dripping with lethal acid.";
- break;
-
- case MONS_JELLYFISH:
- description += "A pulsating glob of transparent flesh, waiting just "
- "below the surface to sting you with its many tentacles.";
- break;
-
- case MONS_ROYAL_JELLY:
- description += "A particularly rich and golden gelatinous thing. ";
- break;
-
- case MONS_FIRE_GIANT:
- description += "A huge ruddy humanoid with bright hair. ";
- break;
-
- case MONS_FROST_GIANT:
- description += "A huge blue humanoid with hoarfrost hair.";
- break;
-
- case MONS_HILL_GIANT:
- description +=
- "Although one of the smaller giant varieties, this hill giant is still big enough to be dangerous.";
- break;
-
- case MONS_STONE_GIANT:
- description +=
- "A gigantic humanoid with grey skin almost as hard as rock. "
- "It carries several boulders - are you up for a game of 'catch'?";
- break;
-
- case MONS_TITAN:
- description += "This lightning-limned humanoid is unusually large "
- "and powerful, even among giants.";
- break;
-
- case MONS_FLAYED_GHOST:
- description += "A hideous undead creature, with torn skin hanging "
- "from an emaciated body.";
- break;
-
- case MONS_INSUBSTANTIAL_WISP:
- description += "A thin wisp of floating gas.";
- break;
-
- case MONS_VAPOUR:
- description += "A normally invisible cloud of weird-looking vapour.";
- break;
-
- case MONS_DANCING_WEAPON:
- description += "A weapon dancing in the air. ";
- break;
-
- case MONS_ELEPHANT_SLUG:
- description += "A huge grey slug with folds of wrinkled skin. ";
- break;
-
- case MONS_GIANT_SLUG:
- description += "A huge and disgusting gastropod. ";
- break;
-
- case MONS_GIANT_SNAIL:
- description +=
- "A huge and disgusting gastropod with light green shell. ";
- break;
-
- case MONS_SHEEP:
- description += "A stupid woolly animal, with murder in its eyes. ";
- break;
-
- case MONS_HOG:
- description += "A large, fat and very ugly pig. ";
- break;
-
- case MONS_HELL_HOG:
- description += "A large, fat and very ugly pig, suckled "
- "in the pits of Hell. ";
- break;
-
- case MONS_GIANT_MOSQUITO:
- description += "A huge, bloated mosquito. It looks diseased.";
- break;
-
- case MONS_GIANT_CENTIPEDE:
- description += "It has a lot of legs.";
- break;
-
- case MONS_GIANT_BLOWFLY:
- description += "A huge and irritating fly.";
- break;
-
- case MONS_GIANT_FROG:
- description +=
- "It probably didn't get this big by eating little insects.";
- break;
-
- case MONS_GIANT_BROWN_FROG:
- description += "A very large and vicious-looking carnivorous frog. "
- "Its knobbly brown skin blends in with the rough rock of your surroundings.";
- break;
-
- case MONS_SPINY_FROG:
- description +=
- "Although slightly smaller than its cousin, the giant brown"
- " frog, the spiny frog makes up for lack of size by being"
- " covered in wickedly barbed spines and spurs.";
- break;
-
- case MONS_BLINK_FROG:
- description +=
- "A weird-looking frog, constantly blinking in and out of reality.";
- break;
-
- case MONS_GIANT_COCKROACH:
- description += "A large brown cockroach.";
- break;
-
- case MONS_PIT_FIEND:
- description += "A huge winged fiend with incredibly tough skin.";
- break;
-
- case MONS_GARGOYLE:
- description += "A hideous stone statue come to life.";
- break;
-
- case MONS_METAL_GARGOYLE:
- description += "A hideous metal statue come to life.";
- break;
-
- case MONS_MOLTEN_GARGOYLE:
- description += "A hideous melting stone statue come to life.";
- break;
-
- case MONS_ELF:
- case MONS_DEEP_ELF_SOLDIER:
- case MONS_DEEP_ELF_FIGHTER:
- case MONS_DEEP_ELF_KNIGHT:
- case MONS_DEEP_ELF_MAGE:
- case MONS_DEEP_ELF_SUMMONER:
- case MONS_DEEP_ELF_CONJURER:
- case MONS_DEEP_ELF_PRIEST:
- 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:
- description +=
- "One of the race of elves which inhabits this dreary cave.$";
- switch (class_described)
- {
-
- case MONS_DEEP_ELF_SOLDIER:
- description += "This one is just common soldier.";
- break;
-
- case MONS_DEEP_ELF_FIGHTER:
- description += "This soldier has learned some magic.";
- break;
-
- case MONS_DEEP_ELF_KNIGHT:
- description += "This one bears the scars of battles past.";
- break;
-
- case MONS_DEEP_ELF_MAGE:
- description += "Mana crackles between this one's long fingers.";
- break;
-
- case MONS_DEEP_ELF_SUMMONER:
- case MONS_DEEP_ELF_CONJURER:
- description += "This one is a mage specialized in the ancient art ";
- if (class_described == MONS_DEEP_ELF_SUMMONER)
- description += "of summoning servants";
- else
- description += "of hurling energies";
- description += " of destruction.";
- break;
-
- case MONS_DEEP_ELF_PRIEST:
- description += "This one is a servant of the deep elves' god.";
- break;
-
- case MONS_DEEP_ELF_HIGH_PRIEST:
- description +=
- "This one is an exalted servant of the deep elves' god.";
- break;
-
- case MONS_DEEP_ELF_DEMONOLOGIST:
- description +=
- "This mage specialized in demonology, and is marked heavily "
- "from long years in contact with unnatural demonic forces.";
- break;
-
- case MONS_DEEP_ELF_ANNIHILATOR:
- description += "This one likes destructive magics more than most, "
- "and is better at them.";
- break;
-
- case MONS_DEEP_ELF_SORCERER:
- description += "This mighty spellcaster draws power from Hell.";
- break;
-
- case MONS_DEEP_ELF_DEATH_MAGE:
- description += "A strong negative aura surrounds this one.";
- break;
-
- case MONS_ELF:
- // These are only possible from polymorphing or shapeshifting.
- description += "This one is remarkably plain looking.";
- break;
- }
- break;
-
- case MONS_WHITE_IMP:
- description += "A small and mischievous minor demon. ";
- break;
-
- case MONS_LEMURE:
- description += "A vaguely humanoid blob of putrid white flesh. ";
- break;
-
- case MONS_UFETUBUS:
- description += "A chattering and shrieking minor demon. ";
- break;
-
- case MONS_MANES:
- description += "An ugly, twisted little minor demon. ";
- break;
-
- case MONS_MIDGE:
- description += "A small flying demon. ";
- break;
-
- case MONS_NEQOXEC:
- description += "A weirdly shaped demon. ";
- break;
-
- case MONS_ORANGE_DEMON:
- description += "A bright orange demon with a venomous stinger. ";
- break;
-
- case MONS_HELLWING:
- description +=
- "A hideous skeletal demon, with wings of ancient withered skin. ";
- break;
-
- case MONS_SMOKE_DEMON:
- description += "A writhing cloud of smoke hanging in the air. ";
- break;
-
- case MONS_YNOXINUL:
- description += "A demon with shiny metallic scales. ";
- break;
-
- case MONS_EXECUTIONER:
- description += "A horribly powerful demon. ";
- break;
-
- case MONS_GREEN_DEATH:
- description +=
- "A bloated form covered in oozing sores and exhaling clouds of lethal poison. ";
- break;
-
- case MONS_BLUE_DEATH:
- description += "A blue greater demon. ";
- break;
-
- case MONS_BALRUG:
- description +=
- "A huge and very powerful demon, wreathed in fire and shadows. ";
- break;
-
- case MONS_CACODEMON:
- description += "A hideously ugly demon of rage and legendary power. ";
- break;
-
- case MONS_DEMONIC_CRAWLER:
- description += "A long and bloated body, supported by "
- "dozens of short legs and topped with an evil-looking head. ";
- break;
-
- case MONS_SUN_DEMON:
- description +=
- "A demonic figure shining with the light and fury of a fallen star.";
- break;
-
- case MONS_SHADOW_IMP:
- description += "A small and shadowy minor demon.";
- break;
-
- case MONS_SHADOW_DEMON:
- description += "A mysterious demonic figure,"
- " constantly blurring into multiple shadows of itself.";
- break;
-
- case MONS_LOROCYPROCA:
- description += "A tall and gaunt figure, "
- "draped in long robes which flow as if alive.";
- break;
-
- case MONS_GERYON:
- description +=
- "A huge and slithery arch-demon, guarding the gates of Hell. ";
- break;
-
- case MONS_DISPATER:
- description += "The lord of the Iron City of Dis. ";
- break;
-
- case MONS_ASMODEUS:
- description +=
- "One of the arch-demons who dwell in the depths of Hell. ";
- break;
-
- case MONS_ANTAEUS:
- description += "A great titan who lives in the depths of Cocytus. ";
- break;
-
- case MONS_ERESHKIGAL:
- description +=
- "A fearsome arch-fiend who rules the deathly netherworld of Tartarus. ";
- break;
-
- case MONS_VAULT_GUARD:
- description += "A heavily armed and armoured guardian of the Vaults. ";
- break;
-
- case MONS_CURSE_SKULL:
- description +=
- "A charred skull floating in the air and rotating slowly. "
- "Mystic symbols carved into its blackened surface indicate "
- "its resistance to almost any form of attack. ";
- break;
-
- case MONS_ORB_GUARDIAN:
- description +=
- "A huge and glowing purple creature, created by the Orb to "
- "defend itself. ";
- break;
-
- case MONS_DAEVA:
- description +=
- "A divine agent of the Shining One. It manifests as a winged "
- "figure obscured by an aura of brilliant golden light. ";
- break;
-
- case MONS_SPECTRAL_THING:
- description += "A hideous glowing apparition.";
- break;
-
- case MONS_TENTACLED_MONSTROSITY:
- description +=
- "A writhing mass of tentacles, all covered in putrid mucous.";
- break;
-
- case MONS_SPHINX:
- description +=
- "A large creature with a human head, the body of a lion, and "
- "the wings of a huge bird.";
- break;
-
- case MONS_ROTTING_HULK:
- description += "A shambling undead, related to the ghoul.";
- break;
-
- case MONS_KILLER_KLOWN:
- description += "A comical figure full of life and laughter. It"
- " looks very happy to see you... but is there a slightly malicious"
- " cast to its features? Is that red facepaint or something"
- " altogether less pleasant? Join in the fun, and maybe you'll"
- " find out!";
- break;
-
- case MONS_MOTH_OF_WRATH:
- description += "A huge moth, as violent as it is hairy.";
- break;
-
- case MONS_DEATH_COB:
- description += "A dreadful undead cob of corn.";
- break;
-
- case MONS_BOGGART:
- description +=
- "A twisted little sprite-goblin. Beware of its magical tricks!";
- break;
-
- case MONS_LAVA_FISH:
- description += "A fish which lives in lava.";
- break;
-
- case MONS_BIG_FISH:
- description += "A fish of unusual size.";
- break;
-
- case MONS_GIANT_GOLDFISH:
- description +=
- "This is what happens when you give your pet goldfish too much food!";
- break;
-
- case MONS_ELECTRICAL_EEL:
- description +=
- "A small and slimy eel, crackling with electrical discharge.";
- break;
-
- case MONS_DRACONIAN:
- case MONS_RED_DRACONIAN:
- case MONS_WHITE_DRACONIAN:
- case MONS_GREEN_DRACONIAN:
- case MONS_PALE_DRACONIAN:
- case MONS_MOTTLED_DRACONIAN:
- case MONS_BLACK_DRACONIAN:
- case MONS_YELLOW_DRACONIAN:
- case MONS_PURPLE_DRACONIAN:
- case MONS_DRACONIAN_SHIFTER:
- case MONS_DRACONIAN_SCORCHER:
- case MONS_DRACONIAN_ZEALOT:
- case MONS_DRACONIAN_ANNIHILATOR:
- case MONS_DRACONIAN_CALLER:
- case MONS_DRACONIAN_MONK:
- case MONS_DRACONIAN_KNIGHT:
- {
- description += "A ";
-
- const int subsp = draco_subspecies( &menv[which_mons] );
- switch (subsp)
- {
- case MONS_DRACONIAN: description += "brown "; break;
- case MONS_BLACK_DRACONIAN: description += "black "; break;
- case MONS_MOTTLED_DRACONIAN: description += "mottled "; break;
- case MONS_YELLOW_DRACONIAN: description += "yellow "; break;
- case MONS_GREEN_DRACONIAN: description += "green "; break;
- case MONS_PURPLE_DRACONIAN: description += "purple "; break;
- case MONS_RED_DRACONIAN: description += "red "; break;
- case MONS_WHITE_DRACONIAN: description += "white "; break;
- case MONS_PALE_DRACONIAN: description += "pale "; break;
- default:
- break;
- }
-
- description += "scaled humanoid with wings.";
- break;
- }
- case MONS_PLAYER_GHOST:
- description += "The apparition of ";
- description += ghost_description();
- description += ".$";
- break;
-
- case MONS_PANDEMONIUM_DEMON:
- description += describe_demon();
- break;
-
- // mimics -- I'm not considering these descriptions a bug. -- bwr
- case MONS_GOLD_MIMIC:
- description +=
- "An apparently harmless pile of gold coins hides a nasty "
- "venomous shapechanging predator.";
- break;
-
- case MONS_WEAPON_MIMIC:
- description +=
- "An apparently abandoned weapon, actually a vicious little "
- "beast in disguise.";
- break;
-
- case MONS_ARMOUR_MIMIC:
- description +=
- "An apparently abandoned suit of finely-made armour, actually "
- "a vicious little beast in disguise.";
- break;
-
- case MONS_SCROLL_MIMIC:
- description +=
- "An ancient parchment covered in arcane runes. Did it just twitch?";
- break;
-
- case MONS_POTION_MIMIC:
- description += "A delicious looking magical drink. Go on, pick it up!";
- break;
-
- case MONS_BALL_LIGHTNING:
- description += "An oddity of nature, ball lightning bounces around "
- "behaving almost, but not quite, entirely unlike "
- "regular lightning. ";
- break;
-
- case MONS_ORB_OF_FIRE:
- description += "A globe of raw primordial fire, capable of "
- "impressive pyrotechnics.";
- break;
-
- // the quokka is no more ... {dlb}
- // the quokka is back, without cyberware -- bwr
- case MONS_QUOKKA:
- description += "A small marsupial. Don't call it a rat.";
- break;
-
- // uniques
- case MONS_MNOLEG: // was: Nemelex Xobeh - and wrong! {dlb}
- description += "A weirdly glowing figure, "
- "dancing through the twisted air of Pandemonium. ";
- break;
-
- case MONS_LOM_LOBON: // was: Sif Muna - and wrong! {dlb}
- description += "An ancient and strangely serene demon. "
- "It regards you coldly from "
- "the huge glowing eye in the centre of its forehead. ";
- break;
-
- case MONS_CEREBOV: // was: Okawaru - and wrong! {dlb}
- description += "A violent and wrathful demon, "
- "Cerebov appears as a giant human "
- "covered in shining golden armour "
- "and wielding a huge twisted sword. ";
- break;
-
- case MONS_GLOORX_VLOQ: // was: Kikubaaqudgha - and wrong! {dlb}
- description += "A shadowy figure clothed in profound darkness. ";
- break;
-
- case MONS_TERENCE:
- description += "An evil human fighter.";
- break;
-
- case MONS_JESSICA:
- description += "An evil apprentice sorceress.";
- break;
-
- case MONS_SIGMUND:
- description += "An evil and spry old human, whose eyes "
- "twinkle with madness. Sigmund wields a nasty looking scythe.";
- break;
-
- case MONS_EDMUND:
- description += "A lightly armoured warrior.";
- break;
-
- case MONS_PSYCHE:
- description += "A fair-haired magess.";
- break;
-
- case MONS_DONALD:
- description += "An adventurer like you, trying to find the Orb.";
- break;
-
- case MONS_MICHAEL:
- description += "A powerful spellcaster, dressed in a long robe.";
- break;
-
- case MONS_JOSEPH:
- description += "Looks like a mercenary.";
- break;
-
- case MONS_ERICA:
- description += "A comely spellweaver.";
- break;
-
- case MONS_JOSEPHINE:
- description += "An ugly elderly figure, dressed in Druidic clothes.";
- break;
-
- case MONS_HAROLD:
- description += "An evil human bounty hunter.";
- break;
-
- case MONS_NORBERT:
- description += "A skilled warrior.";
- break;
-
- case MONS_JOZEF:
- description += "A tall bounty hunter.";
- break;
-
- case MONS_AGNES:
- description += "A lanky warrior.";
- break;
-
- case MONS_MAUD:
- description += "An evil warrior who looks inexplicably like a rodent.";
- break;
-
- case MONS_LOUISE:
- description += "An unusually heavily armoured spellcaster.";
- break;
-
- case MONS_FRANCIS:
- description += "A wizened spellcaster.";
- break;
-
- case MONS_FRANCES:
- description += "A stout warrior, bearing a deep facial scar.";
- break;
-
- case MONS_RUPERT:
- description += "An evil berserker.";
- break;
-
- case MONS_WAYNE:
- description += "A fat, evil dwarf in a stupid looking hat.";
- break;
-
- case MONS_DUANE:
- description += "An evil mercenary with unusually large ears.";
- break;
-
- case MONS_NORRIS:
- description += "A tan, fit and thoroughly evil surfer.";
- break;
-
- case MONS_ADOLF:
- description += "A svelte fighter-mage with unfortunate facial hair.";
- break;
-
- case MONS_MARGERY:
- description += "A lithe spellcaster.";
- break;
-
- case MONS_IJYB:
- description += "A small and twisted goblin, wearing some ugly blue rags.";
- break;
-
- case MONS_BLORK_THE_ORC:
- description += "A particularly fat and ugly orc.";
- break;
-
- case MONS_EROLCHA:
- description += "An especially cunning ogre magess.";
- break;
-
- case MONS_URUG:
- description += "A rude";
- if (you.species != SP_MUMMY)
- description += ", smelly";
- description += " orc.";
- break;
-
- case MONS_SNORG:
- description += "A hairy troll.";
- break;
-
- case MONS_XTAHUA:
- description += "An ancient and mighty dragon.";
- break;
-
- case MONS_BORIS:
- description +=
- "An ancient lich. The air around his shrouded form crackles with evil energy. ";
- break;
-
- case MONS_SHUGGOTH:
- description += "A vile creature with an elongated head, spiked tail "
- "and wicked six-fingered claws. Its awesome strength is matched by "
- "its umbrage at being transported to this backwater dimension. ";
- break;
-
- case MONS_WOLF:
- description += "A large and strong grey canine.";
- break;
-
- case MONS_WARG:
- description += "A particularly large and evil looking wolf, usually "
- "found in the company of orcs.";
- break;
-
- case MONS_BEAR:
- description += "The common dungeon bear.";
- break;
-
- case MONS_GRIZZLY_BEAR:
- description += "A large, nasty bear with grey fur.";
- break;
-
- case MONS_POLAR_BEAR:
- description += "A large and very strong bear covered in glistening "
- "white fur. ";
- break;
-
- case MONS_BLACK_BEAR:
- description += "A small black bear.";
- break;
-
- case MONS_SALAMANDER: // mv: was ANOTHER_LAVA_THING
- description += "A strange half-human half-snake creature "
- "covered in thick red scales and thorns.";
- break;
-
- case MONS_PROGRAM_BUG:
- default:
- description += "If this monster is a \"program bug\", then it's "
- "recommended that you save your game and reload. Please report "
- "monsters who masquerade as program bugs or run around the "
- "dungeon without a proper description to the authorities.";
- break;
- // onocentaur - donkey
- }
-
-#if DEBUG_DIAGNOSTICS
-
- if (mons_class_flag( menv[ which_mons ].type, M_SPELLCASTER ))
- {
- int hspell_pass[6] = { MS_NO_SPELL, MS_NO_SPELL, MS_NO_SPELL,
- MS_NO_SPELL, MS_NO_SPELL, MS_NO_SPELL };
-
- int msecc = ((class_described == MONS_HELLION) ? MST_BURNING_DEVIL :
- (class_described == MONS_PANDEMONIUM_DEMON) ? MST_GHOST
- : menv[ which_mons ].number);
-
- mons_spell_list(msecc, hspell_pass);
-
- bool found_spell = false;
-
- for (int i = 0; i < 6; i++)
- {
- if (hspell_pass[i] != MS_NO_SPELL)
- {
- if (!found_spell)
- {
- description += "$Monster Spells:$";
- found_spell = true;
- }
-
- snprintf( info, INFO_SIZE, " %d: %s$", i,
- mons_spell_name( hspell_pass[i] ) );
-
- description += info;
- }
- }
- }
-
- bool has_item = false;
- for (int i = 0; i < NUM_MONSTER_SLOTS; i++)
- {
- if (menv[ which_mons ].inv[i] != NON_ITEM)
- {
- if (!has_item)
- {
- description += "$Monster Inventory:$";
- has_item = true;
- }
-
- char buff[ ITEMNAME_SIZE ];
-
- item_def item = mitm[ menv[which_mons].inv[i] ];
- set_ident_flags( item, ISFLAG_IDENT_MASK );
-
- item_name( item, DESC_NOCAP_A, buff );
- snprintf( info, INFO_SIZE, " %d: %s$", i, buff );
- description += info;
- }
- }
-
-#endif
-
- print_description(description);
-
- if (getch() == 0)
- getch();
-
-#ifdef DOS_TERM
- puttext(25, 1, 80, 25, buffer);
- window(1, 1, 80, 25);
-#endif
-} // end describe_monsters
-
-//---------------------------------------------------------------
-//
-// ghost_description
-//
-// Describes the current ghost's previous owner. The caller must
-// prepend "The apparition of" or whatever and append any trailing
-// punctuation that's wanted.
-//
-//---------------------------------------------------------------
-std::string ghost_description(bool concise)
-{
- char tmp_buff[ INFO_SIZE ];
-
- // We're fudging stats so that unarmed combat gets based off
- // of the ghost's species, not the player's stats... exact
- // stats are required anyways, all that matters is whether
- // dex >= str. -- bwr
- const int dex = 10;
- int str;
- switch (ghost.values[GVAL_SPECIES])
- {
- case SP_HILL_DWARF:
- case SP_MOUNTAIN_DWARF:
- case SP_TROLL:
- case SP_OGRE:
- case SP_OGRE_MAGE:
- case SP_MINOTAUR:
- case SP_HILL_ORC:
- case SP_CENTAUR:
- case SP_NAGA:
- case SP_MUMMY:
- case SP_GHOUL:
- str = 15;
- break;
-
- case SP_HUMAN:
- case SP_DEMIGOD:
- case SP_DEMONSPAWN:
- str = 10;
- break;
-
- default:
- str = 5;
- break;
- }
-
- snprintf( tmp_buff, sizeof(tmp_buff),
- "%s the %s, a%s %s %s",
- ghost.name,
-
- skill_title( ghost.values[GVAL_BEST_SKILL],
- ghost.values[GVAL_SKILL_LEVEL],
- ghost.values[GVAL_SPECIES],
- str, dex, GOD_NO_GOD ),
-
- (ghost.values[GVAL_EXP_LEVEL] < 4) ? " weakling" :
- (ghost.values[GVAL_EXP_LEVEL] < 7) ? "n average" :
- (ghost.values[GVAL_EXP_LEVEL] < 11) ? "n experienced" :
- (ghost.values[GVAL_EXP_LEVEL] < 16) ? " powerful" :
- (ghost.values[GVAL_EXP_LEVEL] < 22) ? " mighty" :
- (ghost.values[GVAL_EXP_LEVEL] < 26) ? " great" :
- (ghost.values[GVAL_EXP_LEVEL] < 27) ? "n awesomely powerful"
- : " legendary",
-
- ( concise? get_species_abbrev(ghost.values[GVAL_SPECIES]) :
- species_name( ghost.values[GVAL_SPECIES],
- ghost.values[GVAL_EXP_LEVEL] ) ),
-
- ( concise? get_class_abbrev(ghost.values[GVAL_CLASS]) :
- get_class_name( ghost.values[GVAL_CLASS] ) ) );
-
- return std::string(tmp_buff);
-}
-
-static void print_god_abil_desc( int abil )
-{
- const ability_def &abil_info = get_ability_def( abil );
-
- const std::string cost = "(" + make_cost_description( abil_info ) + ")";
-
- // Produce a 79 character string with cost right justified:
- std::string str( abil_info.name );
- str += std::string( 79 - str.length() - cost.length(), ' ' ) + cost + EOL;
-
- cprintf( str.c_str() );
-}
-
-
-//---------------------------------------------------------------
-//
-// describe_god
-//
-// Describes all gods. Accessible through altars (by praying), or
-// by the ^ key if player is a worshipper.
-//
-//---------------------------------------------------------------
-
-void describe_god( int which_god, bool give_title )
-{
-
- const char *description; // mv: tmp string used for printing description
- int colour; // mv: colour used for some messages
-
-#ifdef DOS_TERM
- char buffer[4000];
- gettext( 1, 1, 80, 25, buffer );
- window( 1, 1, 80, 25 );
-#endif
-
- clrscr();
-
- if (give_title)
- {
- textcolor( WHITE );
- cprintf( " Religion" EOL );
- textcolor( LIGHTGREY );
- }
-
- if (which_god == GOD_NO_GOD) //mv:no god -> say it and go away
- {
- cprintf( EOL "You are not religious." );
- goto end_god_info;
- }
-
- colour = god_colour(which_god);
-
- //mv: print god's name and title - if you can think up better titles
- //I have nothing against
- textcolor(colour);
- cprintf (god_name(which_god,true)); //print long god's name
- cprintf (EOL EOL);
-
- //mv: print god's description
- textcolor (LIGHTGRAY);
-
- switch (which_god)
- {
- case GOD_ZIN:
- description = "Zin is an ancient and revered God, dedicated to the establishment of order" EOL
- "and the destruction of the forces of chaos and night. Valued worshippers " EOL
- "can gain a variety of powers useful in the fight against the evil, but must" EOL
- "abstain from the use of necromancy and other forms of unholy magic." EOL
- "Zin appreciates long-standing faith as well as sacrifices of valued objects." EOL;
- break;
-
- case GOD_SHINING_ONE:
- description = "The Shining One is a powerful crusading deity, allied with Zin in the fight" EOL
- "against evil. Followers may be granted with the ability to summarily dispense" EOL
- "the wrath of heaven, but must never use any form of evil magic and should" EOL
- "fight honourably. The Shining One appreciates long-standing persistence in " EOL
- "the endless crusade, as well as the dedicated destruction of unholy creatures.";
- break;
-
- case GOD_KIKUBAAQUDGHA:
- description = "Kikubaaqudgha is a terrible Demon-God, served by those who seek knowledge of" EOL
- "the powers of death. Followers gain special powers over the undead, and " EOL
- "especially favoured servants can call on mighty demons to slay their foes." EOL
- "Kikubaaqudgha requires the deaths of living creatures as often as possible," EOL
- "but is not interested in the offering of corpses except at an appropriate" EOL
- "altar.";
- break;
-
- case GOD_YREDELEMNUL:
- description = "Yredelemnul is worshipped by those who seek powers over death and the undead" EOL
- "without having to learn to use necromancy. Followers can raise legions of " EOL
- "servile undead and gain a number of other useful (if unpleasant) powers." EOL
- "Yredelemnul appreciates killing, but prefers corpses to be put to use rather" EOL
- "than sacrificed.";
- break;
-
- case GOD_XOM:
- description = "Xom is a wild and unpredictable God of chaos, who seeks not worshippers but" EOL
- "playthings to toy with. Many choose to follow Xom in the hope of receiving" EOL
- "fabulous rewards and mighty powers, but Xom is nothing if not capricious. ";
- break;
-
- case GOD_VEHUMET:
- description = "Vehumet is a God of the destructive powers of magic. Followers gain various" EOL
- "useful powers to enhance their command of the hermetic arts, and the most" EOL
- "favoured stand to gain access to some of the fearsome spells in Vehumet's" EOL
- "library. One's devotion to Vehumet can be proved by the causing of as much" EOL
- "carnage and destruction as possible.";
- break;
-
- case GOD_OKAWARU:
- description = "Okawaru is a dangerous and powerful God of battle. Followers can gain a " EOL
- "number of powers useful in combat as well as various rewards, but must " EOL
- "constantly prove themselves through battle and the sacrifice of corpses" EOL
- "and valuable items.";
- break;
-
- case GOD_MAKHLEB:
- description = "Makhleb the Destroyer is a fearsome God of chaos and violent death. Followers," EOL
- "who must constantly appease Makhleb with blood, stand to gain various powers " EOL
- "of death and destruction. The Destroyer appreciates sacrifices of corpses and" EOL
- "valuable items.";
- break;
-
- case GOD_SIF_MUNA:
- description = "Sif Muna is a contemplative but powerful deity, served by those who seek" EOL
- "magical knowledge. Sif Muna appreciates sacrifices of valuable items, and" EOL
- "the casting of spells as often as possible.";
- break;
-
- case GOD_TROG:
- description = "Trog is an ancient God of anger and violence. Followers are expected to kill" EOL
- "in Trog's name and sacrifice the dead, and in return gain power in battle and" EOL
- "occasional rewards. Trog hates wizards, and followers are forbidden the use" EOL
- "of spell magic. ";
- break;
-
- case GOD_NEMELEX_XOBEH:
- description = "Nemelex is a strange and unpredictable trickster God, whose powers can be" EOL
- "invoked through the magical packs of cards which Nemelex paints in the ichor" EOL
- "of demons. Followers receive occasional gifts, and should use these gifts as" EOL
- "as much as possible. Offerings of any type of item are also appreciated.";
- break;
-
- case GOD_ELYVILON:
- description = "Elyvilon the Healer is worshipped by the healers (among others), who gain" EOL
- "their healing powers by long worship and devotion. Although Elyvilon prefers" EOL
- "a creed of pacifism, those who crusade against evil are not excluded. Elyvilon" EOL
- "appreciates the offering of weapons. ";
- break;
-
- default:
- description = "God of Program Bugs is a weird and dangerous God and his presence should" EOL
- "be reported to dev-team.";
- }
-
- cprintf(description);
- //end of printing description
-
- // title only shown for our own god
- if (you.religion == which_god)
- {
- //mv: print title based on piety
- cprintf( EOL EOL "Title - " );
- textcolor(colour);
-
- // mv: if your piety is high enough you get title
- // based on your god
- if (you.piety > 160)
- {
- cprintf((which_god == GOD_SHINING_ONE) ? "Champion of Law" :
- (which_god == GOD_ZIN) ? "Divine Warrior" :
- (which_god == GOD_ELYVILON) ? "Champion of Light" :
- (which_god == GOD_OKAWARU) ? "Master of Thousand Battles" :
- (which_god == GOD_YREDELEMNUL) ? "Master of Eternal Death" :
- (which_god == GOD_KIKUBAAQUDGHA) ? "Lord of Darkness" :
- (which_god == GOD_MAKHLEB) ? "Champion of Chaos" :
- (which_god == GOD_VEHUMET) ? "Lord of Destruction" :
- (which_god == GOD_TROG) ? "Great Slayer" :
- (which_god == GOD_NEMELEX_XOBEH) ? "Great Trickster" :
- (which_god == GOD_SIF_MUNA) ? "Master of Arcane" :
- (which_god == GOD_XOM) ? "Teddy Bear" :
- "Bogy the Lord of the Bugs"); // Xom and no god is handled before
- }
- else
- {
- //mv: most titles are still universal - if any one wants to
- //he might write specific titles for all gods or rewrite current
- //ones (I know they are not perfect)
- //btw. titles are divided according to piety levels on which you get
- //new abilities.In the main it means - new ability = new title
- switch (which_god)
- {
- case GOD_ZIN:
- case GOD_SHINING_ONE:
- case GOD_KIKUBAAQUDGHA:
- case GOD_YREDELEMNUL:
- case GOD_VEHUMET:
- case GOD_OKAWARU:
- case GOD_MAKHLEB:
- case GOD_SIF_MUNA:
- //mv: what about
- //sinner, believer, apprentice, disciple, adept, scholar, oracle
- case GOD_TROG:
- case GOD_NEMELEX_XOBEH:
- case GOD_ELYVILON:
- cprintf ( (you.piety >= 120) ? "High Priest" :
- (you.piety >= 100) ? "Elder" :
- (you.piety >= 75) ? "Priest" :
- (you.piety >= 50) ? "Deacon" :
- (you.piety >= 30) ? "Novice" :
- (you.piety > 5) ? "Believer"
- : "Sinner" );
- break;
-
- case GOD_XOM:
- cprintf( (you.experience_level >= 20) ? "Xom's favourite toy"
- : "Toy" );
- break;
-
- default:
- cprintf ("Bug");
- }
- }
- }
- // end of print title
-
- // mv: now let's print favor as Brent suggested
- // I know these messages aren't perfect so if you can
- // think up something better, do it
-
- textcolor(LIGHTGRAY);
- cprintf(EOL EOL "Favour - ");
- textcolor(colour);
-
- //mv: player is praying at altar without appropriate religion
- //it means player isn't checking his own religion and so we only
- //display favour and will go out
- if (you.religion != which_god)
- {
- textcolor (colour);
- snprintf( info, INFO_SIZE,
- (you.penance[which_god] >= 50) ? "%s's wrath is upon you!" :
- (you.penance[which_god] >= 20) ? "%s is annoyed with you." :
- (you.penance[which_god] >= 5) ? "%s well remembers your sins." :
- (you.penance[which_god] > 0) ? "%s is ready to forgive your sins." :
- (you.worshipped[which_god]) ? "%s is ambivalent towards you."
- : "%s is neutral towards you.",
- god_name(which_god) );
-
- cprintf(info);
- }
- else
- {
- if (player_under_penance()) //mv: penance check
- {
- cprintf( (you.penance[which_god] >= 50) ? "Godly wrath is upon you!" :
- (you.penance[which_god] >= 20) ? "You've transgressed heavily! Be penitent!" :
- (you.penance[which_god] >= 5 ) ? "You are under penance."
- : "You should show more discipline." );
-
- }
- else
- {
- if (which_god == GOD_XOM)
- cprintf("You are ignored.");
- else
- {
- snprintf( info, INFO_SIZE,
-
- (you.piety > 130) ? "A prized avatar of %s.":
- (you.piety > 100) ? "A shining star in the eyes of %s." :
- (you.piety > 70) ? "A rising star in the eyes of %s." :
- (you.piety > 40) ? "%s is most pleased with you." :
- (you.piety > 20) ? "%s has noted your presence." :
- (you.piety > 5) ? "%s is noncommittal."
- : "You are beneath notice.",
-
- god_name(which_god)
- );
-
- cprintf(info);
- }
- }
- //end of favour
-
- //mv: following code shows abilities given from god (if any)
-
-
- textcolor(LIGHTGRAY);
- cprintf(EOL EOL "Granted powers : (Cost)" EOL);
- textcolor(colour);
-
-
- // mv: these gods protects you during your prayer (not mentioning XOM)
- // chance for doing so is (random2(you.piety) >= 30)
- // Note that it's not depending on penance.
- // Btw. I'm not sure how to explain such divine protection
- // because god isn't really protecting player - he only sometimes
- // saves his life (probably it shouldn't be displayed at all).
- // What about this ?
- if ((which_god == GOD_ZIN
- || which_god == GOD_SHINING_ONE
- || which_god == GOD_ELYVILON
- || which_god == GOD_OKAWARU
- || which_god == GOD_YREDELEMNUL)
- && you.piety >= 30)
- {
- snprintf( info, INFO_SIZE,
- "%s %s watches over you during prayer." EOL,
- god_name(which_god),
- (you.piety >= 150) ? "carefully": // > 4/5
- (you.piety >= 90) ? "often" : // > 2/3
- "sometimes" // less than 2:3
- );
-
- cprintf(info);
- }
-
- // mv: No abilities (except divine protection)
- // under penance (fix me if I'm wrong)
- if (player_under_penance())
- {
- cprintf( "None." EOL );
- }
- else
- {
- switch (which_god) //mv: finaly let's print abilities
- {
- case GOD_ZIN:
- if (you.piety >= 30)
- print_god_abil_desc( ABIL_ZIN_REPEL_UNDEAD );
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- print_god_abil_desc( ABIL_ZIN_HEALING );
-
- if (you.piety >= 75)
- print_god_abil_desc( ABIL_ZIN_PESTILENCE );
-
- if (you.piety >= 100)
- print_god_abil_desc( ABIL_ZIN_HOLY_WORD );
-
- if (you.piety >= 120)
- print_god_abil_desc( ABIL_ZIN_SUMMON_GUARDIAN );
- break;
-
- case GOD_SHINING_ONE:
- if (you.piety >= 30)
- print_god_abil_desc( ABIL_TSO_REPEL_UNDEAD );
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- print_god_abil_desc( ABIL_TSO_SMITING );
-
- if (you.piety >= 75)
- print_god_abil_desc( ABIL_TSO_ANNIHILATE_UNDEAD );
-
- if (you.piety >= 100)
- print_god_abil_desc( ABIL_TSO_CLEANSING_FLAME );
-
- if (you.piety >= 120)
- print_god_abil_desc( ABIL_TSO_SUMMON_DAEVA );
- break;
-
- case GOD_KIKUBAAQUDGHA:
- if (you.piety >= 30)
- print_god_abil_desc( ABIL_KIKU_RECALL_UNDEAD_SLAVES );
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- cprintf("You are protected from some of the side-effects of death magic." EOL);
-
- if (you.piety >= 75)
- print_god_abil_desc( ABIL_KIKU_ENSLAVE_UNDEAD );
-
- if (you.piety >= 120)
- print_god_abil_desc( ABIL_KIKU_INVOKE_DEATH );
- break;
-
- case GOD_YREDELEMNUL:
- if (you.piety >= 30)
- print_god_abil_desc( ABIL_YRED_ANIMATE_CORPSE );
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- print_god_abil_desc( ABIL_YRED_RECALL_UNDEAD );
-
- if (you.piety >= 75)
- print_god_abil_desc( ABIL_YRED_ANIMATE_DEAD );
-
- if (you.piety >= 100)
- print_god_abil_desc( ABIL_YRED_DRAIN_LIFE );
-
- if (you.piety >= 120)
- print_god_abil_desc( ABIL_YRED_CONTROL_UNDEAD );
- break;
-
-
- case GOD_VEHUMET:
- if (you.piety >= 30)
- {
- cprintf( "You can gain power from the those you kill " EOL
- " in Vehumet's name, or those slain by your servants." EOL );
- }
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- cprintf( "Vehumet assists with destructive magics during prayer." EOL );
-
- if (you.piety >= 75)
- cprintf( "During prayer you have some protection from summoned creatures." EOL );
-
- if (you.piety >= 100)
- print_god_abil_desc( ABIL_VEHUMET_CHANNEL_ENERGY );
- break;
-
-
- case GOD_OKAWARU:
- if (you.piety >= 30)
- print_god_abil_desc( ABIL_OKAWARU_MIGHT );
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- print_god_abil_desc( ABIL_OKAWARU_HEALING );
-
- if (you.piety >= 120)
- print_god_abil_desc( ABIL_OKAWARU_HASTE );
- break;
-
- case GOD_MAKHLEB:
- if (you.piety >= 30)
- {
- cprintf( "You can gain power from the deaths " EOL
- " of those you kill in Makhleb's name." EOL );
- }
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- print_god_abil_desc( ABIL_MAKHLEB_MINOR_DESTRUCTION );
-
- if (you.piety >= 75)
- print_god_abil_desc( ABIL_MAKHLEB_LESSER_SERVANT_OF_MAKHLEB );
-
- if (you.piety >= 100)
- print_god_abil_desc( ABIL_MAKHLEB_MAJOR_DESTRUCTION );
-
- if (you.piety >= 120)
- print_god_abil_desc( ABIL_MAKHLEB_GREATER_SERVANT_OF_MAKHLEB );
- break;
-
- case GOD_SIF_MUNA:
- if (you.piety >= 50)
- print_god_abil_desc( ABIL_SIF_MUNA_FORGET_SPELL );
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 100)
- cprintf( "You are protected from some side-effects of spellcasting." EOL );
- break;
-
- case GOD_TROG:
- if (you.piety >= 30)
- print_god_abil_desc( ABIL_TROG_BERSERK );
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- print_god_abil_desc( ABIL_TROG_MIGHT );
-
- if (you.piety >= 100)
- print_god_abil_desc( ABIL_TROG_HASTE_SELF );
- break;
-
- case GOD_ELYVILON:
- if (you.piety >= 30)
- print_god_abil_desc( ABIL_ELYVILON_LESSER_HEALING );
- else
- cprintf( "None." EOL );
-
- if (you.piety >= 50)
- print_god_abil_desc( ABIL_ELYVILON_PURIFICATION );
-
- if (you.piety >= 75)
- print_god_abil_desc( ABIL_ELYVILON_HEALING );
-
- if (you.piety >= 100)
- print_god_abil_desc( ABIL_ELYVILON_RESTORATION );
-
- if (you.piety >= 120)
- print_god_abil_desc( ABIL_ELYVILON_GREATER_HEALING );
- break;
-
- default: //mv: default is Xom, Nemelex and all bugs.
- cprintf( "None." EOL );
- } //end of printing abilities
- }
- }
-
-
-end_god_info: //end of everything (life, world, universe etc.)
-
- getch(); // wait until keypressed
-
-#ifdef DOS_TERM //mv: if DOS_TERM is defined than buffer is returned to screen
- //if not redraw_screen() is called everytime when this function is
- //called
- puttext(1, 1, 80, 25, buffer);
- window(1, 1, 80, 25);
-#endif
-} //mv: That's all folks.