final_realms_fluffos_v1/
final_realms_fluffos_v1/bin/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/ChangeLog.old/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/Win32/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/simuls/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/clone/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/command/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/data/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/etc/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/master/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/log/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/compiler/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/efuns/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/operators/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/u/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/tmp/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/windows/
final_realms_fluffos_v1/lib/baseobs/guilds/
final_realms_fluffos_v1/lib/baseobs/misc/
final_realms_fluffos_v1/lib/baseobs/races/shadows/
final_realms_fluffos_v1/lib/cmds/god/
final_realms_fluffos_v1/lib/cmds/handlers/
final_realms_fluffos_v1/lib/cmds/handlers/cmds/
final_realms_fluffos_v1/lib/d/heaven/
final_realms_fluffos_v1/lib/d/heaven/heaven/ave/
final_realms_fluffos_v1/lib/d/mudlib/
final_realms_fluffos_v1/lib/d/newbie/
final_realms_fluffos_v1/lib/d/newbie/docs/
final_realms_fluffos_v1/lib/d/newbie/drow/armour/
final_realms_fluffos_v1/lib/d/newbie/drow/items/
final_realms_fluffos_v1/lib/d/newbie/drow/mobs/
final_realms_fluffos_v1/lib/d/newbie/drow/oldmobs/
final_realms_fluffos_v1/lib/d/newbie/drow/weapons/
final_realms_fluffos_v1/lib/d/newbie/duergar/weapons/
final_realms_fluffos_v1/lib/d/newbie/dwarf/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/cafe/
final_realms_fluffos_v1/lib/d/newbie/elf/chars/equip/
final_realms_fluffos_v1/lib/d/newbie/elf/items/armours/
final_realms_fluffos_v1/lib/d/newbie/elf/items/obj/
final_realms_fluffos_v1/lib/d/newbie/elf/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/quick_fix/
final_realms_fluffos_v1/lib/d/newbie/gnome/armour/
final_realms_fluffos_v1/lib/d/newbie/gnome/buildings/
final_realms_fluffos_v1/lib/d/newbie/gnome/items/
final_realms_fluffos_v1/lib/d/newbie/gnome/npcs/clones/
final_realms_fluffos_v1/lib/d/newbie/gnome/rooms/northrooms/
final_realms_fluffos_v1/lib/d/newbie/gnome/weapons/
final_realms_fluffos_v1/lib/d/newbie/goblin/armour/
final_realms_fluffos_v1/lib/d/newbie/goblin/items/
final_realms_fluffos_v1/lib/d/newbie/grads/log/
final_realms_fluffos_v1/lib/d/newbie/grads/npcs/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/cave1/
final_realms_fluffos_v1/lib/d/newbie/grads/temp/
final_realms_fluffos_v1/lib/d/newbie/guests/weapons/
final_realms_fluffos_v1/lib/d/newbie/half-elf/items/
final_realms_fluffos_v1/lib/d/newbie/half-elf/newroomss/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/castle/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/drows/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/savannah/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/secret/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/town/
final_realms_fluffos_v1/lib/d/newbie/halfling/
final_realms_fluffos_v1/lib/d/newbie/halfling/misc/
final_realms_fluffos_v1/lib/d/newbie/halfling/rooms/cave/
final_realms_fluffos_v1/lib/d/newbie/human/
final_realms_fluffos_v1/lib/d/newbie/human/armour/
final_realms_fluffos_v1/lib/d/newbie/human/monsters/
final_realms_fluffos_v1/lib/d/newbie/human/obj/
final_realms_fluffos_v1/lib/d/newbie/human/weapons/
final_realms_fluffos_v1/lib/d/newbie/lizard/armour/
final_realms_fluffos_v1/lib/d/newbie/lizard/items/
final_realms_fluffos_v1/lib/d/newbie/lizard/underwater/
final_realms_fluffos_v1/lib/d/newbie/lizard/weapons/
final_realms_fluffos_v1/lib/d/newbie/logs/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/rooms/
final_realms_fluffos_v1/lib/d/newbie/newelf/
final_realms_fluffos_v1/lib/d/newbie/newelf/chars/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/recopied/
final_realms_fluffos_v1/lib/d/newbie/newelf/obj/
final_realms_fluffos_v1/lib/d/newbie/newelf/quest_docs./
final_realms_fluffos_v1/lib/d/newbie/newken/
final_realms_fluffos_v1/lib/d/newbie/newken/chars/
final_realms_fluffos_v1/lib/d/newbie/newken/misc/
final_realms_fluffos_v1/lib/d/newbie/newken/npcs/
final_realms_fluffos_v1/lib/d/newbie/newken/obj/
final_realms_fluffos_v1/lib/d/newbie/newliz/
final_realms_fluffos_v1/lib/d/newbie/newliz/cave/
final_realms_fluffos_v1/lib/d/newbie/newliz/npcs/
final_realms_fluffos_v1/lib/d/newbie/orc/items/misc/
final_realms_fluffos_v1/lib/d/newbie/orc/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/orc/tower/
final_realms_fluffos_v1/lib/d/vehicle/
final_realms_fluffos_v1/lib/doc/
final_realms_fluffos_v1/lib/doc/driver/
final_realms_fluffos_v1/lib/doc/driver/concepts/
final_realms_fluffos_v1/lib/doc/driver/driver/
final_realms_fluffos_v1/lib/doc/driver/efuns/arrays/
final_realms_fluffos_v1/lib/doc/driver/efuns/bitstrings/
final_realms_fluffos_v1/lib/doc/driver/efuns/communication/
final_realms_fluffos_v1/lib/doc/driver/efuns/core/
final_realms_fluffos_v1/lib/doc/driver/efuns/debugging/
final_realms_fluffos_v1/lib/doc/driver/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/driver/efuns/interactive/
final_realms_fluffos_v1/lib/doc/driver/efuns/mappings/
final_realms_fluffos_v1/lib/doc/driver/efuns/objects/
final_realms_fluffos_v1/lib/doc/driver/efuns/security/
final_realms_fluffos_v1/lib/doc/driver/efuns/strings/
final_realms_fluffos_v1/lib/doc/driver/efuns/system/
final_realms_fluffos_v1/lib/doc/driver/efuns/types/
final_realms_fluffos_v1/lib/doc/driver/lpc/constructs/
final_realms_fluffos_v1/lib/doc/driver/lpc/types/
final_realms_fluffos_v1/lib/doc/driver/platforms/
final_realms_fluffos_v1/lib/doc/lpc/
final_realms_fluffos_v1/lib/doc/mail/
final_realms_fluffos_v1/lib/doc/man/
final_realms_fluffos_v1/lib/doc/man/html/
final_realms_fluffos_v1/lib/doc/man/html/applies/
final_realms_fluffos_v1/lib/doc/man/html/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/html/driver/
final_realms_fluffos_v1/lib/doc/man/html/efuns/
final_realms_fluffos_v1/lib/doc/man/html/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/html/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/html/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/html/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/html/efuns/general/
final_realms_fluffos_v1/lib/doc/man/html/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/
final_realms_fluffos_v1/lib/doc/man/local/applies/
final_realms_fluffos_v1/lib/doc/man/local/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/local/applies/master/
final_realms_fluffos_v1/lib/doc/man/local/concepts/
final_realms_fluffos_v1/lib/doc/man/local/defines/
final_realms_fluffos_v1/lib/doc/man/local/driver/
final_realms_fluffos_v1/lib/doc/man/local/efuns/
final_realms_fluffos_v1/lib/doc/man/local/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/local/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/local/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/local/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/local/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/local/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/local/efuns/general/
final_realms_fluffos_v1/lib/doc/man/local/efuns/interactive/
final_realms_fluffos_v1/lib/doc/man/local/efuns/internals/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/local/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/objects/
final_realms_fluffos_v1/lib/doc/man/local/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/efuns/sockets/
final_realms_fluffos_v1/lib/doc/man/local/efuns/strings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/system/
final_realms_fluffos_v1/lib/doc/man/local/historical/
final_realms_fluffos_v1/lib/doc/man/local/lfun/QC/
final_realms_fluffos_v1/lib/doc/man/local/lfun/events/
final_realms_fluffos_v1/lib/doc/man/local/lfun/monster/
final_realms_fluffos_v1/lib/doc/man/local/lfun/properties/
final_realms_fluffos_v1/lib/doc/man/local/lpc/
final_realms_fluffos_v1/lib/doc/man/local/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/local/lpc/types/
final_realms_fluffos_v1/lib/doc/man/local/standards/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/basic/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/intermediate/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/concepts/
final_realms_fluffos_v1/lib/doc/man/mudos/driver/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/general/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mixed/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/types/
final_realms_fluffos_v1/lib/doc/races/
final_realms_fluffos_v1/lib/doc/races/old_race/
final_realms_fluffos_v1/lib/global/virtual/
final_realms_fluffos_v1/lib/global/wiz_backup/
final_realms_fluffos_v1/lib/net/config/
final_realms_fluffos_v1/lib/net/daemon/chars/
final_realms_fluffos_v1/lib/net/inherit/
final_realms_fluffos_v1/lib/net/intermud3/
final_realms_fluffos_v1/lib/net/intermud3/cmds/
final_realms_fluffos_v1/lib/net/intermud3/save/
final_realms_fluffos_v1/lib/net/intermud3/services/
final_realms_fluffos_v1/lib/net/obj/
final_realms_fluffos_v1/lib/net/old/
final_realms_fluffos_v1/lib/net/old/intermud/
final_realms_fluffos_v1/lib/net/old/intermud/adm/
final_realms_fluffos_v1/lib/net/old/intermud/services/
final_realms_fluffos_v1/lib/net/old/intermud/udp/
final_realms_fluffos_v1/lib/net/virtual/
final_realms_fluffos_v1/lib/obj/b_day/
final_realms_fluffos_v1/lib/obj/chars/
final_realms_fluffos_v1/lib/obj/handlers/lists/
final_realms_fluffos_v1/lib/obj/handlers/useless/
final_realms_fluffos_v1/lib/obj/monsters/
final_realms_fluffos_v1/lib/obj/roomgen/
final_realms_fluffos_v1/lib/obj/soul/
final_realms_fluffos_v1/lib/obj/vegetation/
final_realms_fluffos_v1/lib/obj/weapons/oldsys/
final_realms_fluffos_v1/lib/open/
final_realms_fluffos_v1/lib/players/g/
final_realms_fluffos_v1/lib/releasefiles/d/heaven/
final_realms_fluffos_v1/lib/releasefiles/d/mudlib/
final_realms_fluffos_v1/lib/releasefiles/d/newbie/
final_realms_fluffos_v1/lib/releasefiles/doc/
final_realms_fluffos_v1/lib/releasefiles/players/g/
final_realms_fluffos_v1/lib/releasefiles/save/
final_realms_fluffos_v1/lib/releasefiles/save/environ/
final_realms_fluffos_v1/lib/releasefiles/save/roomgen/
final_realms_fluffos_v1/lib/releasefiles/secure/
final_realms_fluffos_v1/lib/releasefiles/w/
final_realms_fluffos_v1/lib/releasefiles/w/god/
final_realms_fluffos_v1/lib/room/
final_realms_fluffos_v1/lib/save/
final_realms_fluffos_v1/lib/save/environ/
final_realms_fluffos_v1/lib/save/roomgen/
final_realms_fluffos_v1/lib/scripts/
final_realms_fluffos_v1/lib/secure/crerem/
final_realms_fluffos_v1/lib/secure/dom/
final_realms_fluffos_v1/lib/secure/log/
final_realms_fluffos_v1/lib/secure/misc/
final_realms_fluffos_v1/lib/std/adnd/
final_realms_fluffos_v1/lib/std/commands/shadows/
final_realms_fluffos_v1/lib/std/creator/
final_realms_fluffos_v1/lib/std/curses/
final_realms_fluffos_v1/lib/std/curses/old_sys/
final_realms_fluffos_v1/lib/std/curses/shadows/
final_realms_fluffos_v1/lib/std/dom/
final_realms_fluffos_v1/lib/std/effects/
final_realms_fluffos_v1/lib/std/effects/healing/
final_realms_fluffos_v1/lib/std/effects/other/
final_realms_fluffos_v1/lib/std/effects/poisons/
final_realms_fluffos_v1/lib/std/environ/
final_realms_fluffos_v1/lib/std/guilds/
final_realms_fluffos_v1/lib/std/guilds/priests/samples/
final_realms_fluffos_v1/lib/std/guilds/wizards/
final_realms_fluffos_v1/lib/std/living/baldy/
final_realms_fluffos_v1/lib/std/living/divstuff/
final_realms_fluffos_v1/lib/std/paran/
final_realms_fluffos_v1/lib/std/poisons/
final_realms_fluffos_v1/lib/std/poisons/shadows/
final_realms_fluffos_v1/lib/std/poisons/weapons/
final_realms_fluffos_v1/lib/std/race_groups/
final_realms_fluffos_v1/lib/std/room/
final_realms_fluffos_v1/lib/std/room/old/
final_realms_fluffos_v1/lib/std/rooms/
final_realms_fluffos_v1/lib/std/shadows/
final_realms_fluffos_v1/lib/std/shadows/test_shad/
final_realms_fluffos_v1/lib/std/socket/
final_realms_fluffos_v1/lib/std/spells/
final_realms_fluffos_v1/lib/std/vaults/
final_realms_fluffos_v1/lib/tmp/
final_realms_fluffos_v1/lib/w/
final_realms_fluffos_v1/lib/w/god/
final_realms_fluffos_v1/old/
final_realms_fluffos_v1/win32/
/* Hamlet July 1995.  This is a heavily hacked collection of scrolls.  
   It's going to look like an NPC and 'tell stories' rather than
   have posts.
 
   Cadogan and Keldaz helped extensively with the text.
 
   BE WARNED:  There are red herrings in here.  Live with it.
*/
 
string MYNAME = "Taleswapper";
string MYLONG = "As you look at this vibrant old man he catches your eye.  "+
                "Suddenly you sense the wisdom of ages hidden behind those "+
                "eyes.  In awe you are drawn to him, hoping to learn but a "+
                "little of what he knows.\n";

#include "mail.h"
inherit "/obj/monster";
 
#include "board.h"
/* Taniwha 1995, a list of immort write only boards, easy to extend */
static string *readonly = ({"playerinfo","quests","announcements"});
 
string board_name;
 
mapping being_written;
int action_pri;
 
void setup() {
  board_name = "quests";
  being_written = ([ ]);
  action_pri = 0;
} /* setup() */

string the_date(int i) {
  return ctime(i)[4..9];
} /* the_date() */
 
varargs void set_teller_name(string name, string desc, int gender) {
  MYNAME = capitalize(name);
  set_name(name);
  set_short(name);
  if(desc)
    set_long(desc);
  else
    set_long(MYLONG);
  if(gender)
    set_gender(gender);
  else
    set_gender(1);
  return;
} 
 
varargs int subjects(string str, int dark, object player) {
  int i;
  mixed *stuff;
  string ret;
  mapping news_rc;
 
  if(!player)  player = this_player();
 
  if(!interactive(player))  return 1;
 
  if(query_timed_property((string)player->query_name())) {
    tell_object(player,MYNAME+" tells you: Let me rest a moment, child.  "+
                "I tire easily.\n");
    return 1;
  }
    
  stuff = (mixed *)BOARD_HAND->get_subjects(board_name);
  if (!sizeof(stuff)) {
    tell_object(player,MYNAME+" sobs.\n\n"+MYNAME+" tells you: Nobody has "+
                "taught me any tales yet!\n");
    return 1;
   }
  news_rc = (mapping)player->query_property(NEWS_RC);
  if (!news_rc)
    news_rc = ([ ]);
  ret = MYNAME+" tells you: I will happily tell you any tale I know: \n";
  for (i=0;i<sizeof(stuff);i++)
    if (news_rc[board_name] < stuff[i][B_TIME])
      ret += sprintf("N %2d: %-=*s\n", i+1, (int)player->query_cols()-6,
             stuff[i][B_SUBJECT]+" (told to me by: "+
             capitalize(stuff[i][B_NAME])+" on "+
                        the_date(stuff[i][B_TIME])+")");
    else
      ret += sprintf("  %2d: %-=*s\n", i+1, (int)player->query_cols()-6,
             stuff[i][B_SUBJECT]+" (told to me by: "+
             capitalize(stuff[i][B_NAME])+" on "+
                        the_date(stuff[i][B_TIME])+")");
 
  add_timed_property(player->query_name(),1,2);
  player->set_finish_func(0);
  player->more_string(ret, "tales");
  return 1;
} /* subjects() */
 
void init() {
  add_action("read", "hear", action_pri);
  add_action("read", "listen", action_pri);
  add_action("subjects", "list", action_pri);
  add_action("subjects", "subjects", action_pri);
  ::init();
 } /* init() */
 
void string_more(string arg, string prompt, object player) {
  object obj;
  player->set_finish_func(0);
  player->more_string(arg, prompt);
} /* string_more() */

varargs int read(string str, object player) {
  int num, i;
  mixed stuff;
  mapping news_rc;
  int herring;
  string subjunk;
 
  if(!player)  player = this_player();
 
  if(!interactive(player))  return 1;
 
  if(query_timed_property((string)player->query_name())) {
    tell_object(player,MYNAME+" tells you: Let me rest a moment, child.  "+
                "I tire easily.\n");
    return 1;
  }
   
  stuff = (mixed *)BOARD_HAND->get_subjects(board_name);
  news_rc = (mapping)player->query_property(NEWS_RC);
  if (!news_rc)
    news_rc = ([ ]);
  if ((!str) || (str == "tale") || (str == "a tale") || (str == "next tale") ||
      (str == "to a tale") || (str == "to next tale")) {
    i = sizeof(stuff)-1;
    while (i >= 0 && stuff[i][B_TIME] > news_rc[board_name] )
      i--;
    if (i == sizeof(stuff)-1) {
      tell_object(player,MYNAME+" tells you: You have heard all the "+
                  "tales I know!\n");
      return 1;
    }
 
  num = i+2;
  } else if (sscanf(str, "tale %d", num) != 1)
      if(sscanf(str,"to tale %d", num) != 1) {
        tell_object(player,MYNAME+" tells you: Do you want to 'hear tale "+
                    "<number>'?\n");
        return 1;
      }
  if (num < 1 || num > sizeof(stuff)) {
    tell_object(player,MYNAME+" tells you: I do not know a tale of that "+
                "number.\n");
    return 1;
  }
  num --;
  if (news_rc[board_name] < stuff[num][B_TIME]) {
    news_rc[board_name] = stuff[num][B_TIME];
    player->add_property(NEWS_RC, news_rc);
  }
 
  add_timed_property(player->query_name(),1,2);
  
  herring = (int)player->query_cols() - strlen(MYNAME) - 23;
  subjunk = stuff[num][B_SUBJECT][0..herring];
  if(herring < strlen(stuff[num][B_SUBJECT]))
    subjunk += "-\n"+sprintf("%*s%s",(strlen(MYNAME)+12)," ",
                stuff[num][B_SUBJECT][(herring+1)..100]);
                      
  tell_object(player,"\n");
  string_more(sprintf("\n"+MYNAME+" tells you: Ah, so you want to hear "+
              "tale %d.  "+
              "It was told to me by\n%*s%s on %s.  I like to\n%*scall it "+
              "'%s'.\n\n",num+1,(strlen(MYNAME)+12)," ",
              capitalize(stuff[num][B_NAME]), ctime(stuff[num][B_TIME]),
              (strlen(MYNAME)+12)," ",subjunk)+
              BOARD_HAND->get_message(board_name, num),
                 "[Tale "+(num+1)+"]",player);
  return 1;
} /* read() */
 
void event_person_say(object ob, string start, string mess, string lang) {
  string junk, junk2;
  string *said;
  int numb = 0;
  int i;
  
  if(sscanf(mess,"tell %s",junk) != 1)
    if(sscanf(mess,"Tell %s",junk) != 1)
      if(sscanf(mess,"%s tell%s",junk,junk2) != 2)
        if(sscanf(mess,"%s hear%s",junk,junk2) != 2)
          if(sscanf(mess,"%s listen%s",junk,junk2) != 2)
            if(sscanf(mess,"%s know%s",junk,junk2) != 2)
              return;
          
  if(sscanf(mess,"%s tale",junk) != 1)
    if(sscanf(mess,"%s stor%s",junk, junk2) != 2)
      return;
  
  /* Deal with request for subject list */
  if(sscanf(mess,"%s know%s",junk,junk2) == 2) {
    call_out("subjects",0,"red herring",0,ob);
    return;
  }
  
  /* Obviously they wanted a story. */
  mess += " ";    
  said = explode(mess," ");

  for(i=0;(i<sizeof(said) && !numb);i++)
    sscanf(said[i],"%d",numb);
    
  if(numb)
    call_out("read",0,sprintf("tale %d",numb),ob);
  else
    call_out("read",0,"a tale",ob);
}

void too_far_away(object ob) {
  tell_object(ob,MYNAME+" tells you: come closer, my child.\n");
  return;
}
 
void event_person_tell(object ob, string start, string mess, string lang) {
  if(environment(ob) != environment(this_object())) {
    call_out("too_far_away",0,ob);
    return;
  }
  
  event_person_say(ob,start,mess,lang);
  return;
}
 
void set_board_name(string str) {
  board_name = str;
   BOARD_HAND->create_board(board_name, 0);
 }
 
void set_datafile(string str) {
  set_board_name(str);
  /*board_name = str;*/
}
 
int query_new_messages() {
  mixed *notes;
  mapping news_rc;
 
  news_rc = (mapping)this_player()->query_property(NEWS_RC);
  if (!news_rc)
    news_rc = ([ ]);
  notes = (mixed *)BOARD_HAND->get_subjects(board_name);
  if (!sizeof(notes)) return 0;
  return (notes[sizeof(notes)-1][B_TIME] > news_rc[board_name]);
} /* query_new_messages() */
 
void adjust_hp(int amt, object who) {
  if(who != this_object()) {
    tell_object(who,"Something about "+MYNAME+" convinces "+
                "you to stop fighting "+query_objective()+".\n");
    who->stop_fight(this_object());
    stop_fight(who);
  }
  return;
}

void do_death(object who) {
  return;
}

void thepoem(object guest);
string lastpart(int num);
 
void event_enter(object guest, string mess, object from) {
  if(!interactive(guest))
    return 0;
 
  call_out("thepoem",0,guest);
 
  return;
}
 
void thepoem(object guest) {
  int num = sizeof((mixed *)BOARD_HAND->get_subjects(board_name));
 
  tell_object(guest,"\n"+MYNAME+" whispers:\n"+
              "  Oh, listen my child and hear me well,\n"+
              "  for I have many brave stories to tell.\n\n"+
              "  The tales I tell bring fortune and fame;\n"+
              "  Listen well and receive the same.\n\n"+
              "  So sit back -- relax, order a drink,\n"+
              "  And give up your cares whilst I speak.\n\n"+
              lastpart(num));
  return;
}
 
string lastpart(int num) {
  string wordnum = query_num(num);
 
  if(num == 0)
    return "  Alas, alack!  No tales know I!\n"+
           "  Turn thy head my child, or see me cry.\n";
 
  if( (num>9) && (num<20) )
    switch(num) {
      case 10:  return "  The tales I know number ten,\n"+
                       "  Seek ye journeys and treasures to win?\n";
 
      case 11:  return "  The tales I know, eleven in all;\n"+
                       "  Adventure to those who'd answer the call.\n";
 
      case 12:  return "  Twelve tales of ancient lore I know,\n"+
                       "  The glorious myths of long ago.\n";
 
      case 13:  return "  Thirteen tales to tell have I,\n"+
                       "  When balefire fell with fury from the sky...\n";
 
      case 14:  return "  Fourteen tales to share with you,\n"+
                       "  All destined to bring a day you will rue.\n";
 
      case 15:  return "  Fifteen tales come I to know,\n"+
                       "  Of nefarious deeds from evils below.\n";
 
      case 16:  return "  The tales I know, sixteen all said,\n"+
                       "  All spine chilling yarns to fill you with dread.\n";
 
      case 17:  return "  The tales I know, seventeen when done,\n"+
                       "  Adventure awaits you once the journey's begun.\n";
 
      case 18:  return "  Eighteen tales entrusted to me.\n"+
                       "  With but a word, I'll share them with thee.\n";
 
      case 19:  return "  The tales I know number nineteen;\n"+
                       "  Of mysteries so wonderous, none yet seen.\n";
    }
  else
    switch((num%10)) {
      case 0:  return sprintf("  %s tales I have to share,\n"+
                      "  Adventure awaits thee if ye would dare.\n",
                      capitalize(wordnum));
 
      case 1:  return sprintf("  The tales I know number %s,\n"+
                      "  Of earth and wind and sea and sun.\n",
                      wordnum);
 
      case 2:  return sprintf("  The tales I know number %s,\n"+
                      "  Consider well what I now tell you.\n",
                      wordnum);
 
      case 3:  return sprintf("  The tales I know number %s,\n"+
                      "  Oh my child, will you harken to me?\n",
                      wordnum);
 
      case 4:  return sprintf("  The tales I know number %s,\n"+
                      "  Oh my child, will you listen once more?\n",
                      wordnum);
 
      case 5:  return sprintf("  The tales I know number %s,\n"+
                      "  Oh listen well to stay alive.\n",
                      wordnum);
 
      case 6:  return sprintf("  The tales I know, %s, all told,\n"+
                      "  Tales of horrors and hoarded gold.\n",
                      wordnum);
 
      case 7:  return sprintf("  The tales I know, %s in all;\n"+
                      "  Adventure to those who'd answer the call.\n",
                      wordnum);
 
      case 8:  return sprintf("  The tales I know number %s,\n"+
                      "  Listen to me and seal your fate.\n",
                      wordnum);
 
      case 9:  return sprintf("  The tales I know number %s,\n"+
                      "  Follow my lead and see what you find.\n",
                      wordnum);
    }
}