/**************************************************************** * robot.h: Data structures for TinyMUD Robots * * HISTORY * 30-Oct-93 Michael Mauldin (mlm) at Carnegie-Mellon University * Fourteenth animal release, third Loebner contest * * 12-Jun-92 Michael Mauldin (mlm) at Carnegie-Mellon University * Thirteenth prodigal release. * Mods for Time Traveller MUCK, Second Loebner contest * * 01-May-91 Michael Mauldin (mlm) at Carnegie-Mellon University * Twelfth surgical release. Added more personality and * descriptions to Julia. Physical stats, wardrobe, appearance, * Moods, Personal likes and dislikes. Word association mode. * * 29-Nov-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Eleventh remedial release. * Mods for DragonMud, especially visible exits. * * 25-Nov-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Eleventh remedial release. Bug fixes, a few more responses. * * 17-Oct-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Tenth ceremonial release. Mods for planck DB switching. * * 04-Apr-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Handle new WHO format, added checking to see if old rooms * are still there, fix to can_reach, moved initial call to * add_player(me), NULL deref problem in explore.c. * * 7-Mar-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Sixth experimental release. Changed file formats, added lots * of info to room memory. Found a memory allocation bug. * * 10-Feb-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Fifth special release. * * 04-Feb-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Fourth general release * * 25-Jan-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Third interim release (allow numeric IP addresses) * * 05-Jan-90 Michael Mauldin (mlm) at Carnegie-Mellon University * Second General Release. * * 31-Dec-89 Michael Mauldin (mlm) at Carnegie-Mellon University * Created. ****************************************************************/ # define VERSION "fourteenth animal release of 12-Dec-93" # define CONTEST_AGE 32216880 # define CONTEST_MEMTIME 3600 /* 1 hour in seconds */ /* Macros */ # define streq(A,B) (!strcmp ((A), (B))) # define MATCH(D,P) smatch ((D),(P),result) /* Data structure for linked list of mail messages */ typedef struct msgstruct { char *text; long timestmp; struct msgstruct *next; } MSGS; /* Player data structure, tracks who we have seen and where */ typedef struct pstruct { char *name; /* Character name */ long number; /* TinyMUD ID */ int present, active; /* temporary, in this room / logged in */ long firstsaw; /* Time first noticed this player */ long lastsaw; /* Time last present */ long lastspoke; /* Time last spoken to */ long lastheard; /* Time last spoke to us */ long lastplace; /* Last room number */ long lastactive; /* Time last active (from IDLE) */ long lastgave; /* Time last gave him pennies */ long lastdona; /* Time of his last donation */ long dontotal; /* His total donations */ long lastkill; /* Time last assaulted us */ long lastoffend; /* Time last did or said something offensive */ long flags; /* Various player flags */ long lastheralded; /* Last time we gave them the herald msg */ long lastlook; /* Time last looked at player */ long user1; /* User defined variable: friendly */ long user2; /* User defined variable */ char *desc; /* Players last description */ char *carry; /* Players last contents */ char *dialog; /* Last 512 characters of speech */ char *email; /* Email description from the phone booth */ MSGS *msgs; /* Pointer to circularly linked list of msgs */ } PLAYER; # define PL_ASLEEP 0x1 /* player was asleep at lastsaw */ # define PL_JERK 0x2 /* we ignore players commands */ # define PL_REMEMBER 0x4 /* we trust this player especially */ # define PL_HAVEN 0x8 /* page to player failed */ # define PL_OLD 0x10 /* this player is to be weeded out */ # define PL_HERALDED 0x20 /* player has received current herald */ # define PL_HERMIT 0x40 /* player doesnt like talking to bots */ # define PL_WIZARD 0x80 /* play is a wizard/tinker/god */ # define PL_MALE 0x100 /* player has told us he is male */ # define PL_FEMALE 0x200 /* player has told us he is female */ # define PL_ANDRO 0x400 /* player has told us SH is androgenous */ # define PLAYER_SET(N,F) (player[N].flags |= (F)) # define PLAYER_CLR(N,F) (player[N].flags &= ~(F)) # define PLAYER_GET(N,F) (player[N].flags & (F)) # define DIALOGSIZE 2048 # define SMABUF 64 # define MSGSIZ 512 # define TOKSIZ 1024 # define BIGBUF 4096 /* Must be bigger than DIALOGSIZE */ /* Exit data structure, exits are stored in a linked list */ typedef struct estruct { char *dir; long room; struct estruct *next; } O_EXIT; /* Rooms, room ID (if known), the name and description, and list of exits */ typedef struct mstruct { long number, firstin, lastin, cntin, totalin; long awakesum, sleepsum, msgsum, friendly; char *name, *desc, *contents, *exlist; int flags; O_EXIT *exits; } O_ROOM; # define RM_REACH 0x01 /* True if room is reachable from home */ # define RM_SEARCHED 0x02 /* Temp flags for graph searching */ # define RM_EXPLORED 0x04 /* True if all room exits have been tried */ # define RM_PUBLIC 0x08 /* True if room is considered public */ # define RM_HAVEN 0x10 /* True if room is haven */ # define RM_NOISY 0x20 /* True if room is noisy */ # define ROOM_SET(N,F) (room[N].flags |= (F)) # define ROOM_CLR(N,F) (room[N].flags &= ~(F)) # define ROOM_GET(N,F) (room[N].flags & (F)) # define UNK_EXIT_P(E) ((E)->room < 0) # define NOISE 1 # define PEOPLE 2 # define SLEEPERS 3 # define FRIENDLY 4 typedef struct pathstruct { char *dir; int depth; long loc; } PATH; char *makestring(), *exitstring(), *find_path(), *time_dur(), *exact_dur(); char *getmud(), *explore_exit(), *hashf(), *lcstr(), *malloc(); char *exit_to(), *car(), *cdr(), *last(), *room_name(), *unexp_exit(); char *contentsstring(), *ralloc(), *makefixstring(), *strip_robot_name(); char *sindex(), *codeword(), *timeofday(), *othername(), *doodify(); int onintr(); long atol(), filelength(), ffilelength(); long find_player(), close_player(), add_room(), look_up_player(); long msg_count(), msg_total(); long find_room(), close_room(), add_room(), unexplored_room(), leads_to(); # define NORMAL 0 # define MOVE 1 # define WHO 2 # define PAGE 3 # define LOOK 4 # define SCORE 5 # define NUMBER 6 # define COMMAND 7 # define PLYLOOK 8 # define FIRST 0 # define RANDOM 1 # define MAXPEN 300 # define MINPEN 100 # define MINUTES 60 # define HOURS 3600 # define DAYS 86400 # define NEXTMOVE 0 # define LONGPATH 1 # define MEDIUMPATH 2 # define SHORTPATH 3 # define NEXTMOVEHOME 4 # define SHORTPATHHOME 5 # define M_UNKNOWN 0 # define M_ACTION 1 # define M_SPOKEN 2 # define M_WHISPER 3 # define M_PAGE 4 # define M_SHOUT 5 # define MTYPESTR "UASWP!" # define max(A,B) ((A) > (B) ? (A) : (B)) # define min(A,B) ((A) < (B) ? (A) : (B)) # define abs(A) ((A) > 0 ? (A) : -(A)) # define sgn(A) ((A) == 0 ? 0 : ((A) > 0 ? 1 : -1))