dw_fluffos_v1/
dw_fluffos_v1/fluffos-1.22c11/
dw_fluffos_v1/fluffos-1.22c11/ChangeLog.old/
dw_fluffos_v1/fluffos-1.22c11/Win32/
dw_fluffos_v1/fluffos-1.22c11/compat/
dw_fluffos_v1/fluffos-1.22c11/compat/simuls/
dw_fluffos_v1/fluffos-1.22c11/include/
dw_fluffos_v1/fluffos-1.22c11/mudlib/
dw_fluffos_v1/fluffos-1.22c11/testsuite/
dw_fluffos_v1/fluffos-1.22c11/testsuite/clone/
dw_fluffos_v1/fluffos-1.22c11/testsuite/command/
dw_fluffos_v1/fluffos-1.22c11/testsuite/data/
dw_fluffos_v1/fluffos-1.22c11/testsuite/etc/
dw_fluffos_v1/fluffos-1.22c11/testsuite/include/
dw_fluffos_v1/fluffos-1.22c11/testsuite/inherit/
dw_fluffos_v1/fluffos-1.22c11/testsuite/inherit/master/
dw_fluffos_v1/fluffos-1.22c11/testsuite/log/
dw_fluffos_v1/fluffos-1.22c11/testsuite/single/
dw_fluffos_v1/fluffos-1.22c11/testsuite/single/tests/compiler/
dw_fluffos_v1/fluffos-1.22c11/testsuite/single/tests/efuns/
dw_fluffos_v1/fluffos-1.22c11/testsuite/single/tests/operators/
dw_fluffos_v1/fluffos-1.22c11/testsuite/u/
dw_fluffos_v1/fluffos-1.22c11/tmp/
dw_fluffos_v1/lib/
dw_fluffos_v1/lib/binaries/cmds/
dw_fluffos_v1/lib/binaries/cmds/creator/
dw_fluffos_v1/lib/binaries/cmds/living/
dw_fluffos_v1/lib/binaries/cmds/player/
dw_fluffos_v1/lib/binaries/d/admin/obj/
dw_fluffos_v1/lib/binaries/d/liaison/
dw_fluffos_v1/lib/binaries/global/virtual/
dw_fluffos_v1/lib/binaries/global/virtual/setup_compiler/
dw_fluffos_v1/lib/binaries/obj/handlers/autodoc/
dw_fluffos_v1/lib/binaries/obj/handlers/terrain_things/
dw_fluffos_v1/lib/binaries/obj/misc/
dw_fluffos_v1/lib/binaries/obj/misc/buckets/
dw_fluffos_v1/lib/binaries/obj/monster/
dw_fluffos_v1/lib/binaries/obj/reactions/
dw_fluffos_v1/lib/binaries/obj/reagents/
dw_fluffos_v1/lib/binaries/secure/cmds/creator/
dw_fluffos_v1/lib/binaries/secure/master/
dw_fluffos_v1/lib/binaries/std/
dw_fluffos_v1/lib/binaries/std/dom/
dw_fluffos_v1/lib/binaries/std/effects/object/
dw_fluffos_v1/lib/binaries/std/guilds/
dw_fluffos_v1/lib/binaries/std/languages/
dw_fluffos_v1/lib/binaries/std/races/
dw_fluffos_v1/lib/binaries/std/room/
dw_fluffos_v1/lib/binaries/std/room/basic/
dw_fluffos_v1/lib/binaries/std/shops/
dw_fluffos_v1/lib/binaries/std/shops/inherit/
dw_fluffos_v1/lib/binaries/www/
dw_fluffos_v1/lib/cmds/guild-race/
dw_fluffos_v1/lib/cmds/guild-race/crafts/
dw_fluffos_v1/lib/cmds/guild-race/other/
dw_fluffos_v1/lib/cmds/playtester/
dw_fluffos_v1/lib/cmds/playtester/senior/
dw_fluffos_v1/lib/d/admin/
dw_fluffos_v1/lib/d/admin/log/
dw_fluffos_v1/lib/d/admin/mapper/31-10-01/mapmaker/event/
dw_fluffos_v1/lib/d/admin/meetings/
dw_fluffos_v1/lib/d/admin/obj/
dw_fluffos_v1/lib/d/admin/room/we_care/
dw_fluffos_v1/lib/d/admin/save/
dw_fluffos_v1/lib/d/dist/
dw_fluffos_v1/lib/d/dist/mtf/
dw_fluffos_v1/lib/d/dist/pumpkin/
dw_fluffos_v1/lib/d/dist/pumpkin/chars/
dw_fluffos_v1/lib/d/dist/pumpkin/desert/
dw_fluffos_v1/lib/d/dist/pumpkin/gumboot/
dw_fluffos_v1/lib/d/dist/pumpkin/hospital/
dw_fluffos_v1/lib/d/dist/pumpkin/inherit/
dw_fluffos_v1/lib/d/dist/pumpkin/map/
dw_fluffos_v1/lib/d/dist/pumpkin/plain/
dw_fluffos_v1/lib/d/dist/pumpkin/pumpkin/
dw_fluffos_v1/lib/d/dist/pumpkin/save/
dw_fluffos_v1/lib/d/dist/pumpkin/squash/
dw_fluffos_v1/lib/d/dist/pumpkin/terrain/
dw_fluffos_v1/lib/d/dist/pumpkin/woods/
dw_fluffos_v1/lib/d/dist/start/
dw_fluffos_v1/lib/d/learning/TinyTown/buildings/
dw_fluffos_v1/lib/d/learning/TinyTown/map/
dw_fluffos_v1/lib/d/learning/TinyTown/roads/
dw_fluffos_v1/lib/d/learning/add_command/
dw_fluffos_v1/lib/d/learning/arms_and_weps/
dw_fluffos_v1/lib/d/learning/chars/
dw_fluffos_v1/lib/d/learning/cutnpaste/
dw_fluffos_v1/lib/d/learning/examples/npcs/
dw_fluffos_v1/lib/d/learning/examples/player_houses/npcs/
dw_fluffos_v1/lib/d/learning/examples/terrain_map/basic/
dw_fluffos_v1/lib/d/learning/functions/
dw_fluffos_v1/lib/d/learning/handlers/
dw_fluffos_v1/lib/d/learning/help_topics/npcs/
dw_fluffos_v1/lib/d/learning/help_topics/objects/
dw_fluffos_v1/lib/d/learning/help_topics/rcs_demo/
dw_fluffos_v1/lib/d/learning/help_topics/rooms/
dw_fluffos_v1/lib/d/learning/help_topics/rooms/crowd/
dw_fluffos_v1/lib/d/learning/help_topics/rooms/situations/
dw_fluffos_v1/lib/d/learning/items/
dw_fluffos_v1/lib/d/learning/save/
dw_fluffos_v1/lib/d/liaison/
dw_fluffos_v1/lib/d/liaison/NEWBIE/doc/
dw_fluffos_v1/lib/d/liaison/NEWBIE/save/oldlog/
dw_fluffos_v1/lib/db/
dw_fluffos_v1/lib/doc/
dw_fluffos_v1/lib/doc/creator/
dw_fluffos_v1/lib/doc/creator/autodoc/include/reaction/
dw_fluffos_v1/lib/doc/creator/autodoc/include/ritual_system/
dw_fluffos_v1/lib/doc/creator/autodoc/include/talker/
dw_fluffos_v1/lib/doc/creator/autodoc/include/terrain_map/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/baggage/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/clock/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/clothing/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/cont_save/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/corpse/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/money/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/monster/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/scabbard/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/service_provider/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/state_changer/
dw_fluffos_v1/lib/doc/creator/autodoc/obj/wand/
dw_fluffos_v1/lib/doc/creator/autodoc/std/book_dir/
dw_fluffos_v1/lib/doc/creator/autodoc/std/key/
dw_fluffos_v1/lib/doc/creator/autodoc/std/learning/
dw_fluffos_v1/lib/doc/creator/autodoc/std/map/
dw_fluffos_v1/lib/doc/creator/autodoc/std/race/
dw_fluffos_v1/lib/doc/creator/autodoc/std/weapon_logic/
dw_fluffos_v1/lib/doc/creator/files/
dw_fluffos_v1/lib/doc/creator/policy/
dw_fluffos_v1/lib/doc/creator/room/
dw_fluffos_v1/lib/doc/effects/
dw_fluffos_v1/lib/doc/ideas/
dw_fluffos_v1/lib/doc/known_command/
dw_fluffos_v1/lib/doc/lpc/basic_manual/
dw_fluffos_v1/lib/doc/lpc/intermediate/
dw_fluffos_v1/lib/doc/new/add_command/
dw_fluffos_v1/lib/doc/new/handlers/
dw_fluffos_v1/lib/doc/new/living/
dw_fluffos_v1/lib/doc/new/living/race/
dw_fluffos_v1/lib/doc/new/living/spells/
dw_fluffos_v1/lib/doc/new/player/
dw_fluffos_v1/lib/doc/new/room/guild/
dw_fluffos_v1/lib/doc/new/room/outside/
dw_fluffos_v1/lib/doc/new/room/storeroom/
dw_fluffos_v1/lib/doc/object/
dw_fluffos_v1/lib/doc/playtesters/
dw_fluffos_v1/lib/doc/policy/
dw_fluffos_v1/lib/doc/weapons/
dw_fluffos_v1/lib/global/handlers/
dw_fluffos_v1/lib/global/virtual/setup_compiler/
dw_fluffos_v1/lib/include/
dw_fluffos_v1/lib/include/cmds/
dw_fluffos_v1/lib/include/effects/
dw_fluffos_v1/lib/include/npc/
dw_fluffos_v1/lib/include/shops/
dw_fluffos_v1/lib/net/daemon/chars/
dw_fluffos_v1/lib/net/inherit/
dw_fluffos_v1/lib/net/intermud3/
dw_fluffos_v1/lib/net/intermud3/services/
dw_fluffos_v1/lib/net/obj/
dw_fluffos_v1/lib/net/save/
dw_fluffos_v1/lib/net/smnmp/
dw_fluffos_v1/lib/net/snmp/
dw_fluffos_v1/lib/obj/amulets/
dw_fluffos_v1/lib/obj/b_day/
dw_fluffos_v1/lib/obj/examples/
dw_fluffos_v1/lib/obj/food/alcohol/
dw_fluffos_v1/lib/obj/food/chocolates/
dw_fluffos_v1/lib/obj/food/fruits/
dw_fluffos_v1/lib/obj/food/meat/
dw_fluffos_v1/lib/obj/food/nuts/
dw_fluffos_v1/lib/obj/food/seafood/
dw_fluffos_v1/lib/obj/food/vegetables/
dw_fluffos_v1/lib/obj/fungi/
dw_fluffos_v1/lib/obj/furnitures/artwork/
dw_fluffos_v1/lib/obj/furnitures/bathroom/
dw_fluffos_v1/lib/obj/furnitures/beds/
dw_fluffos_v1/lib/obj/furnitures/cabinets/
dw_fluffos_v1/lib/obj/furnitures/chairs/
dw_fluffos_v1/lib/obj/furnitures/chests/
dw_fluffos_v1/lib/obj/furnitures/clocks/
dw_fluffos_v1/lib/obj/furnitures/crockery/
dw_fluffos_v1/lib/obj/furnitures/cupboards/
dw_fluffos_v1/lib/obj/furnitures/cushions/
dw_fluffos_v1/lib/obj/furnitures/fake_plants/
dw_fluffos_v1/lib/obj/furnitures/lamps/
dw_fluffos_v1/lib/obj/furnitures/mirrors/
dw_fluffos_v1/lib/obj/furnitures/outdoor/
dw_fluffos_v1/lib/obj/furnitures/safes/
dw_fluffos_v1/lib/obj/furnitures/shelves/
dw_fluffos_v1/lib/obj/furnitures/sideboards/
dw_fluffos_v1/lib/obj/furnitures/sofas/
dw_fluffos_v1/lib/obj/furnitures/stoves/
dw_fluffos_v1/lib/obj/furnitures/tables/
dw_fluffos_v1/lib/obj/furnitures/wardrobes/
dw_fluffos_v1/lib/obj/handlers/
dw_fluffos_v1/lib/obj/handlers/autodoc/
dw_fluffos_v1/lib/obj/jewellery/anklets/
dw_fluffos_v1/lib/obj/jewellery/bracelets/
dw_fluffos_v1/lib/obj/jewellery/earrings/
dw_fluffos_v1/lib/obj/jewellery/misc/
dw_fluffos_v1/lib/obj/jewellery/necklaces/
dw_fluffos_v1/lib/obj/jewellery/rings/
dw_fluffos_v1/lib/obj/media/
dw_fluffos_v1/lib/obj/misc/buckets/
dw_fluffos_v1/lib/obj/misc/jars/
dw_fluffos_v1/lib/obj/misc/papers/
dw_fluffos_v1/lib/obj/misc/player_shop/
dw_fluffos_v1/lib/obj/misc/shops/
dw_fluffos_v1/lib/obj/misc/traps/
dw_fluffos_v1/lib/obj/monster/
dw_fluffos_v1/lib/obj/monster/godmother/
dw_fluffos_v1/lib/obj/monster/transport/
dw_fluffos_v1/lib/obj/plants/inherit/
dw_fluffos_v1/lib/obj/potions/
dw_fluffos_v1/lib/open/boards/
dw_fluffos_v1/lib/save/autodoc/
dw_fluffos_v1/lib/save/bank_accounts/
dw_fluffos_v1/lib/save/boards/frog/
dw_fluffos_v1/lib/save/books/bed_catalog/
dw_fluffos_v1/lib/save/creators/
dw_fluffos_v1/lib/save/mail/
dw_fluffos_v1/lib/save/mail/p/
dw_fluffos_v1/lib/save/newsrc/b/
dw_fluffos_v1/lib/save/newsrc/c/
dw_fluffos_v1/lib/save/newsrc/d/
dw_fluffos_v1/lib/save/newsrc/f/
dw_fluffos_v1/lib/save/newsrc/p/
dw_fluffos_v1/lib/save/newsrc/s/
dw_fluffos_v1/lib/save/newsrc/w/
dw_fluffos_v1/lib/save/players/c/
dw_fluffos_v1/lib/save/players/d/
dw_fluffos_v1/lib/save/players/g/
dw_fluffos_v1/lib/save/players/p/
dw_fluffos_v1/lib/save/players/s/
dw_fluffos_v1/lib/save/soul/data/
dw_fluffos_v1/lib/save/tasks/
dw_fluffos_v1/lib/save/vaults/
dw_fluffos_v1/lib/secure/cmds/lord/
dw_fluffos_v1/lib/secure/config/
dw_fluffos_v1/lib/secure/items/
dw_fluffos_v1/lib/secure/player/
dw_fluffos_v1/lib/soul/
dw_fluffos_v1/lib/soul/i/
dw_fluffos_v1/lib/soul/j/
dw_fluffos_v1/lib/soul/k/
dw_fluffos_v1/lib/soul/o/
dw_fluffos_v1/lib/soul/q/
dw_fluffos_v1/lib/soul/to_approve/
dw_fluffos_v1/lib/soul/u/
dw_fluffos_v1/lib/soul/v/
dw_fluffos_v1/lib/soul/wish_list/
dw_fluffos_v1/lib/soul/y/
dw_fluffos_v1/lib/soul/z/
dw_fluffos_v1/lib/std/creator/
dw_fluffos_v1/lib/std/effects/
dw_fluffos_v1/lib/std/effects/attached/
dw_fluffos_v1/lib/std/effects/external/
dw_fluffos_v1/lib/std/effects/fighting/
dw_fluffos_v1/lib/std/effects/other/
dw_fluffos_v1/lib/std/environ/
dw_fluffos_v1/lib/std/guilds/
dw_fluffos_v1/lib/std/hospital/
dw_fluffos_v1/lib/std/house/
dw_fluffos_v1/lib/std/house/onebedhouse/
dw_fluffos_v1/lib/std/house/onebedhut/
dw_fluffos_v1/lib/std/house/tworoomflat/
dw_fluffos_v1/lib/std/languages/
dw_fluffos_v1/lib/std/liquids/
dw_fluffos_v1/lib/std/nationality/
dw_fluffos_v1/lib/std/nationality/accents/
dw_fluffos_v1/lib/std/nationality/accents/national/
dw_fluffos_v1/lib/std/nationality/accents/regional/
dw_fluffos_v1/lib/std/npc/goals/
dw_fluffos_v1/lib/std/npc/goals/basic/
dw_fluffos_v1/lib/std/npc/goals/misc/
dw_fluffos_v1/lib/std/npc/inherit/
dw_fluffos_v1/lib/std/npc/plans/
dw_fluffos_v1/lib/std/npc/plans/basic/
dw_fluffos_v1/lib/std/outsides/
dw_fluffos_v1/lib/std/races/shadows/
dw_fluffos_v1/lib/std/room/basic/topography/
dw_fluffos_v1/lib/std/room/controller/
dw_fluffos_v1/lib/std/room/controller/topography/
dw_fluffos_v1/lib/std/room/furniture/games/
dw_fluffos_v1/lib/std/room/furniture/inherit/
dw_fluffos_v1/lib/std/room/inherit/carriage/
dw_fluffos_v1/lib/std/room/inherit/topography/
dw_fluffos_v1/lib/std/room/punishments/
dw_fluffos_v1/lib/std/room/topography/area/
dw_fluffos_v1/lib/std/room/topography/iroom/
dw_fluffos_v1/lib/std/room/topography/milestone/
dw_fluffos_v1/lib/std/shadows/
dw_fluffos_v1/lib/std/shadows/attached/
dw_fluffos_v1/lib/std/shadows/curses/
dw_fluffos_v1/lib/std/shadows/disease/
dw_fluffos_v1/lib/std/shadows/fighting/
dw_fluffos_v1/lib/std/shadows/room/
dw_fluffos_v1/lib/std/shops/controllers/
dw_fluffos_v1/lib/std/shops/objs/
dw_fluffos_v1/lib/std/shops/player_shop/
dw_fluffos_v1/lib/std/shops/player_shop/office_code/
dw_fluffos_v1/lib/std/socket/
dw_fluffos_v1/lib/www/
dw_fluffos_v1/lib/www/external/autodoc/
dw_fluffos_v1/lib/www/external/java/telnet/Documentation/
dw_fluffos_v1/lib/www/external/java/telnet/Documentation/images/
dw_fluffos_v1/lib/www/external/java/telnet/examples/
dw_fluffos_v1/lib/www/external/java/telnet/tools/
dw_fluffos_v1/lib/www/pics/
dw_fluffos_v1/lib/www/secure/creator/
dw_fluffos_v1/lib/www/secure/editors/
dw_fluffos_v1/lib/www/secure/survey_results/
/*  -*- LPC -*-  */
/*
 * $Locker:  $
 * $Id: desc.c,v 1.11 2003/01/30 16:44:28 taffyd Exp $
 * 
*/
/**
 * The main description handling class.  Keeps track of the longs short
 * etc.
 * @author Pinkfish
 * @change sometime Deutha
 * Added all the a_short(), the_short() etc stuff.
 */
inherit "/std/basic/hide_invis";

nosave mixed short_d;
nosave mixed plural_d;
nosave mixed long_d;
private nosave string short_desc;

/**
 * This method sets the short description for the object.  Be careful
 * with using function pointers here, as they do not save when
 * players log out.
 * <p>
 * The short description is the description seen in peoples inventorys and
 * in brief mode when you enter rooms. This should be only a few words
 * long and should contain a fairly good description of the
 * object. Colour processing is done on basicly all of discworlds output,
 * so that will work in the short.
 * @param words the short description
 * @example
 * set_short("red rose");
 * @see short()
 * @see query_short()
 * @see a_short()
 * @see the_short()
 * @see poss_short()
 * @see one_short()
 */
void set_short(mixed words) {
  if (functionp(words)) {
    if (!short_d)
      plural_d = (: pluralize(evaluate(short_d)) :);
  } else {
     if ( !short_d && words && ( words != "" ) )
        plural_d = pluralize( words );
  }
   short_d = words;
} /* set_short() */

/**
 * This method sets the long description for the object.  The long description
 * is what the player sees with they 'look' at the object.  Please make sure
 * tht you use sentances in your long description.  Something like
 * 'The red box' is not a sentance.  You can use colour codes in your
 * long description to make it look cool.
 * @see help::look
 * @see long()
 * @see query_long()
 * @see help::colours
 * @param str the long description
 * @example
 * set_long("Picture perfect and glowing with an internal radience the "
 *          "Red Rose is simply wonderful.\n");
 */
void set_long(mixed str) { long_d = str; }
/**
 * This method sets the main plural for the object.  The main plural
 * is like the short description for the pluralised object.  If this
 * is not set then the short will attempt to be pluralised to
 * figure it out.
 * @see efun::pluralize()
 * @see query_plural()
 * @see query_main_plural()
 * @see set_short()
 * @see add_plural()
 * @param str the main plural
 * @example
 * set_main_plural("green wombles");
 */
void set_main_plural(mixed str) { plural_d = str; }
/**
 * This method returns the current value of the main plural.
 * @return the main plural
 */
mixed query_main_plural() { return plural_d; }

/**
 * This method returns the unadulterated short description.  The other
 * short calls might modify the output to display some status information.
 * @return the short description
 * @see short()
 * @see set_short()
 * @see a_short()
 * @see the_short()
 * @see poss_short()
 * @see one_short()
 */
mixed query_short() {
   if ( functionp( short_d ) )  {
      return evaluate(short_d);
   }
   else return short_d;
}

/** 
 * This method creates a simple short description for players based on their
 * stats, gender and guild.
 */
string query_short_desc() {
  string tmp;
  
  if(!short_desc) {
    short_desc = "";
    if(this_object()->query_str() > 16)
      short_desc += "strapping ";
    else if(this_object()->query_dex() > 16)
      short_desc += "nimble ";
    else if(this_object()->query_int() > 16)
      short_desc += "studious ";
    else if(this_object()->query_wis() > 16)
      short_desc += "pious ";

    short_desc += "young ";
    switch(this_object()->query_guild_ob()) {
    case "/std/guilds/warrior":
      short_desc += (this_object()->query_gender() == 2? "female " : "male ") +
        "warrior";
      break;
    case "/std/guilds/thief":
      tmp = "/std/guilds/thief"->query_guild_data();
      if(tmp)
        short_desc += (this_object()->query_gender() == 2? "female ": "male ")+
          tmp;
      else
        short_desc += (this_object()->query_gender() == 2? "female ": "male ")+
          "thief";
      break;
    case "/std/guilds/wizard":
      short_desc += (this_object()->query_gender() == 2? "female " : "male ") +
        "wizard";
      break;
    case "/std/guilds/witch":
      short_desc += "witch";
      break;
    case "/std/guilds/assassin":
      short_desc += (this_object()->query_gender() == 2? "female " : "male ") +
        "assassin";
      break;
    default:
      short_desc += (this_object()->query_gender() == 2? "lass" : "lad");
    }
  }

  return short_desc;
}

/**
 * This method returns the pluralized version of query_short_desc(). 
 * @see query_short_desc()
 */
string query_plural_desc() {
    // a strapping young thief -> two strapping young thieves. 
    // the standard pluralize() function will be fine for now.
    return pluralize( query_short_desc() ); 
} /* query_plural_desc() */ 

/**
 * This method returns the unadulterated long description.  The other
 * long calls might modify the output to display some status information.
 * @return the long description
 * @see long()
 * @see set_long()
 */
varargs mixed query_long(string str, int dark) {
  if (functionp(long_d))
    return evaluate(long_d);
  return long_d;
} /* query_long() */

/**
 * This method returns extra details about the object that should be
 * known above the basic long.  This is printed to people who do not
 * own the object in question (long() is used if you own it).
 * @param arg the argument the look was called with
 * @param dark how dark the place is
 * @param looker the person looking at the object
 */
string query_long_details(string arg, int dark, object looker) {
   return 0;
} /* query_long_details() */

/**
 * This method returns the current short description.  This is often
 * overridden to return status information about the object.
 * @return the short description string
 * @param dark if it is dark when viewing
 */
varargs string short(int dark) {
  if (functionp(short_d))
    return (string)evaluate(short_d);
  return short_d; 
} /* short() */

/**
 * This method returns the current long description.  This is
 * often overriden to display other information.
 * @return the current long descriptions
 * @param str the string which matched us
 * @param dark is it dark when viewing
 * @see set_long()
 */
string long(string str, int dark) {
  if (!long_d)
    return "You see nothing particularly interesting.\n";
  if (functionp(long_d))
    return (string)evaluate(long_d);
  return long_d;
} /* long() */

/**
 * This method returns the current plural string.  This is often overridden
 * to display extra information about the object, like the short and
 * long calls.  There is always an exception to a naming scheme :)
 * @see set_main_plural()
 * @see query_main_plural()
 * @return the plural string
 * @param dark if it was dark when viewing
 */
varargs string query_plural( int dark ) {
  if (!plural_d)
    if (!short( dark ))
      return 0;
    else
      return pluralize(short( dark ));
  if (functionp(plural_d))
    return (string)evaluate(plural_d);
  return plural_d;
} /* query_plural() */

/**
 * This returns the determinate for the object.  The determinate is
 * something like 'the'.  You set the derterminate by setting
 * the "determinate" property.  The viewer is check to see if
 * they can see the object as well, if it cannot be seen
 * "' is returned.
 * @example
 * // Set the determinate property
 * add_property("determinate", "the");
 * @see /std/basic/property->add_property()
 * @param thing the thing to check for visibility
 */
string query_determinate(object thing) {
  if(query_visible(thing)) {
#ifdef USE_ROLE_PLAYING_SHORTS
    if(interactive(this_object()) &&
      thing->query_role_playing() &&
       !thing->is_friend(this_object()->query_name()))
      return "a ";
#endif
    return (string)this_object()->query_property( "determinate" );
  }
  return "";
} /* query_determinate() */

/**
 * This method does weird stuff.  Pretty much it just calls the
 * short() function with the dark parameter...  This should not be
 * used to generate output.  Use a_short(), the_short(), or
 * one_short or poss_short() instead.
 * @see short()
 * @see /global/player->check_dark()
 * @return the string being the short
 * @param thing the viewer
 * @see a_short()
 * @see the_short()
 * @see poss_short()
 * @see one_short()
 */
varargs string pretty_short( object thing ) {
   int dark, verbose;

   if ( objectp( thing ) ) {
      dark = (int)thing->check_dark( (int)this_object()->query_light() ); 
      if(userp(thing))
        verbose = thing->query_verbose("names");
   }
     
   return (string)this_object()->short( dark, verbose );
} /* pretty_short() */

/**
 * The observer dependant plural.  It was specifical written to
 * handle money that needed to be displayed over several lines but
 * only be one object. The way this was achived was if pretty_plural
 * returns an array then each of the elements of the array is considered
 * to be a seperate object and displayed accordingly. 
 * @see set_main_plural()
 * @see /obj/money->pretty_plural()
 * @param thing the observer
 * @return the plural string
 */
varargs string pretty_plural( object thing ) {
   int dark;
   if ( objectp( thing ) )
      dark = (int)thing->check_dark( (int)this_object()->query_light() );
   return (string)this_object()->query_plural( dark );
} /* pretty_plural() */

/**
 * This method returns the "indeterminate" short.  This function returns a
 * string that the message system replaces, when messages are printed, by the
 * determinate of the object and its short as given by pretty_short. The
 * string should not be stored, since the object to which it refers may
 * not later exist; it can be processed with convert_message.
 * <p>
 * The return of this function needs more processing before the player
 * sees it.  In general you will not need to worry about this.
 * @param flag If this flag is set, do not bring the player out of hiding.
 * @see set_short()
 * @see short()
 * @see the_short()
 * @see poss_short()
 * @see one_short()
 * @see /global/events->convert_message()
 * @example
 * "a poor beggar"
 * "the Weasel"
 * "Detritus"
 */
varargs string a_short( int flag ) {
/*
   if ( objectp( thing ) ) {
      log_file( "SHORT", "a_short from "+ implode( map_array( previous_object( -1 ) + ({ this_object() }), (: file_name( $1 ) :) ), ", " ) +"\n" );
      return (string)thing->a_short();
   }
*/
   if ( this_object() == this_player() && !flag )
      this_object()->remove_hide_invis( "hiding" );
   return "$a_short:"+ file_name( this_object() ) +"$";
} /* a_short() */

/**
 * This method returns an "out-of-a-group" short.
 * This function returns a string that the message system replaces, when
 * messages are printed, by a string dependent on the determinate of
 * the object and its short as given by pretty_short. If the viewer
 * is not in the same environment as the object or if the determinate is
 * defined and is not "a " or "an ", that string is the determinate. If
 * there is more than one object with the same plural as that object in its
 * environment, then that string is "one of the "; otherwise the
 * string is "the ". The output from from one_short should not be
 * stored, since the object to which it refers may not later exist; it can be
 * processed with convert_message. One_short is mostly used for
 * referring to a living object when it performs an action independent
 * of any previous actions. 
 * <p>
 * The return of this function needs more processing before the player
 * sees it.  In general you will not need to worry about this.
 * @param flag If this flag is set, do not bring the player out of hiding.
 * @see set_short()
 * @see short()
 * @see a_short()
 * @see the_short()
 * @see poss_short()
 * @see /global/events->convert_message()
 * @example
 * "one of the poor beggars"
 * "the Weasel"
 * "Detritus"
 * "One of the sailors falls over"
 */
varargs string one_short( int flag ) {
   if ( this_object() == this_player() && !flag )
      this_object()->remove_hide_invis( "hiding" );
   return "$one_short:"+ file_name( this_object() ) +"$";
} /* one_short() */

/**
 * This method returns the "possessed" short.  This function returns a
 * string that the message system replaces, when messages are printed, by a
 * string dependent on the possessor of the object and its short as
 * given by pretty_short. If the object has no environment or is not in a
 * living object or corpse, that string is the determinate. If the
 * environment of the object is the viewer of the message, that string
 * is "your". If the determinate is defined and is not "a " or "an ",
 * or, if it is not defined or is "a " or "an " but it is the only thing in its
 * environment with its plural, that string is the possessive of the owner, if
 * the owner has already been mentioned in constructing a sentence, or the
 * owner's the_short plus "'s "; otherwise, the string is "one
 * of the " plus the possessive bit as described in the previous part of
 * this sentence. Got all that? Good :) The string should not be stored,
 * since the object to which it refers may not later exist; it can be
 * processed with convert_message. Poss_short is mostly used for referring
 * to an object when a person has just used it to do something.
 * <p>
 * The return of this function needs more processing before the player
 * sees it.  In general you will not need to worry about this.
 * @param flag If this flag is set, do not bring the player out of hiding.
 * @see set_short()
 * @see short()
 * @see a_short()
 * @see the_short()
 * @see one_short()
 * @see /global/events->convert_message()
 * @example
 * "one of Wombat's knives".
 * "one of his wands".
 * "her Wyrm Sword".
 * "Frenkel twists one of his rings."
 */
varargs string poss_short( int flag ) {
   if ( this_object() == this_player() && !flag )
      this_object()->remove_hide_invis( "hiding" );
   return "$poss_short:"+ file_name( this_object() ) +"$";
} /* poss_short() */

/**
 * Just like poss_short() but returning a definite article.
 * @see poss_short()
 */
varargs string the_poss_short( int flag ) {
   if ( this_object() == this_player() && !flag )
      this_object()->remove_hide_invis( "hiding" );
   return "$the_poss_short:"+ file_name( this_object() ) +"$";
} /* poss_short() */

/**
 * This method returns the "determinate" short.  This function returns a
 * string that the message system replaces, when messages are printed, by the
 * determinate of the object (or "the" if the determinate is "a", "an" or
 * undefined) and its short as given by pretty_short. The string
 * should not be stored, since the object to which it refers may not later
 * exist; it can be processed with convert_message.
 * <p>
 * The return of this function needs more processing before the player
 * sees it.  In general you will not need to worry about this.
 * @param flag If this flag is set, do not bring the player out of hiding.
 * @see set_short()
 * @see short()
 * @see a_short()
 * @see poss_short()
 * @see one_short()
 * @see /global/events->convert_message()
 * @example
 * "the poor beggar"
 * "the Weasel"
 * "Detritus"
 */
varargs string the_short( int flag ) {
/*
   if ( objectp( thing ) ) {
      log_file( "SHORT", "the_short from "+ implode( map_array( previous_object( -1 ) + ({ this_object() }), (: file_name( $1 ) :) ), ", " ) +"\n" );
      return (string)thing->the_short();
   }
*/
   if ( this_object() == this_player() && !flag )
      this_object()->remove_hide_invis( "hiding" );
   return "$the_short:"+ file_name( this_object() ) +"$";
} /* the_short() */