pdirt/data/
pdirt/data/HELP/
pdirt/data/HELP/0/
pdirt/data/HELP/F/
pdirt/data/HELP/G/
pdirt/data/HELP/H/
pdirt/data/HELP/J/
pdirt/data/HELP/K/
pdirt/data/HELP/O/
pdirt/data/HELP/Q/
pdirt/data/HELP/R/
pdirt/data/HELP/U/
pdirt/data/HELP/V/
pdirt/data/HELP/Y/
pdirt/data/HELP/Z/
pdirt/data/MESSAGES/
pdirt/data/POWERINFO/
pdirt/data/WIZ_ZONES/
pdirt/drv/
pdirt/drv/bin/
pdirt/drv/compiler/converter/
pdirt/drv/compiler/libs/
pdirt/drv/compiler/scripts/
pdirt/drv/include/AberChat/
pdirt/drv/include/InterMud/
pdirt/drv/include/machine/
pdirt/drv/src/InterMud/
pdirt/drv/src/Players/
pdirt/drv/utils/UAFPort/
pdirt/drv/utils/dnsresolv/
pdirt/drv/utils/gdbm/
/*************************************************************************
 ** Headerfile : special.h
 ** Description: Give a certain mobile/object/room a special function
 **              Definitions, macros and prototypes used by special.c
 ** Author     : Peter Eussen (Marty)
 ** Version    : 0.2
 ** Date       : 30 June 1996
 ** Notes      : See special.c for documentation. 
 *************************************************************************/
#ifndef _SPECIAL_H_
#define _SPECIAL_H_

/*************************************************************************
 ** First some conditions on when this function can be called
 *************************************************************************/
#define E_ONTIMER     1            /* Special event on every alarm */
#define E_ONEXAMINE   2            /* On examine call */
#define E_ONKILL      3            /* On kill call */
#define E_ONREST      4            /* On sleep/sit/trance */
#define E_ONMOVE      5            /* On players movement */
#define E_ONENTRY     6            /* On players entry */
#define E_ONTHROW     7            /* Throwing an object */
#define E_ONGIVE      8            /* Giving an object */
#define E_ONGET       9            /* Acquiring object */
#define E_ONCOMM      10           /* When someone talks */
#define E_ONOPEN      11	   /* When the object is opened */
#define E_ONCLOSE     12           /* WHen an object is closed */
#define E_ONLOCK      13           /* When an object is locked */
#define E_ONUNLOCK    14           /* When an object is unlocked */
#define E_ONDROP      15           /* When object is dropped */
#define E_ONLIGHT     16           /* When an object is lighted */
#define E_ONUSE       17           /* Wear/Wield etc */
#define E_ONPUT       18           /* On placement of an artifact */
#define E_ONCONSUME   19           /* Eat Drink */
#define E_ONJUMP      20           /* On a jump */
#define E_ONLOOK      21           /* General look, same as Examine? */
#define E_ONPUSH      22           /* Push/Pull/Move etc */
#define E_WHILEFIGHT  23           /* While fighting */
#define E_ONKILLED    24           /* Need one for a killed mobile as well :( */
#define E_ONDIG       25           /* When a player digs */
#define E_ONINIT      29           /* Initialise data */
#define E_ONTIE       30	   /* Tie */
#define E_ONUNTIE     31	   /* Untie */
#define E_AFTERENTRY  32           /* After Entry */
#define E_SPECIALEXIT 33	   /* For invisible exits */
#define E_ONWIELD     34           /* Wield Commando */
#define E_ONSAY       35           /* Say commando */
#define E_ONACTION    36           /* On an action (kiss , hug)*/
# define ACT_RET_GOOD 0
# define ACT_RET_BAD  (-1)
#define E_AFTERPUT    37
#define E_STORE       38
#define E_ONSPELL     39	   /* New spell casting event */
#define E_ONMISC      100          /* Misc. events */

#define E_USER        200	   /* User specified code */
#define E_EXIT	      201	   /* User specified code */

#define E_PLAYCOM     66	   /* A player special event ? */

#define D_NORMAL      0            /* Normal drop */
#define D_INPIT       1            /* In pit drop */
#define D_DONATE      2		   /* In donations room drop */

#define BEFORE_GET    0            /* Events before get */
#define DURING_GET    1            /* During get */
#define AFTER_GET     2            /* After object is picked up */


typedef struct _intmapping
{  int    id;
   void   (*func)(int);
} intmapping;

typedef struct _charmapping
{  char *id;
   void (*func)(int);
} charmapping;

#define MAPPING(n)      	static intmapping n[]
#define MAPSIZE(n)		(sizeof(n) / sizeof(intmapping))
#define CHARMAPPING(n)		static charmapping n[]
#define CHMAPSIZE(n)		(sizeof(n) / sizeof(charmapping))
#define EVENT_HANDLER(x)	void (x)(int event)
/**************************************************************************
 ** Some macros used internaly..
 **************************************************************************/
#define clear_obj_fun(O)         (objects[O].spec_case = NULL)
#define clear_mob_fun(M)         (ublock[M].spec_case = NULL)
#define clear_rom_fun(R)         (room_data[R].spec_case = NULL)
#define set_obj_fun(O,F)         (objects[O].spec_case = (F))
#define set_mob_fun(M,F)         (ublock[M].spec_case = (F))
#define set_rom_fun(R,F)         (room_data[R].spec_case = (F))

#define rom_fun(R)               (room_data[convroom(R)].spec_case)
#define obj_fun(O)		 (objects[O].spec_case)
#define mob_fun(M)		 (ublock[M].spec_case)

int  setfunctions(void);           /* Set functions on reboot/reset */
void on_timer_events(void);        /* Do on timer events rooms */
void check_obj_in_room(int player,int event);/* Check obj in room for actions */
void check_pl_in_room(int player,int event); /* Same now for mobiles */
void check_obj_on_plx(int player,int event);
void clearfunctions(void);         /* Remove events */
void init_all(void);               /* Initialise functions with E_ONINIT); */
void setplayerfunc(int plx);       /* Some special code for players */
void init_zone(int zone);	   /* Initialise functions with E_ONINIT; */
int get_rand_start(void);
Boolean is_start_loc(int loc);
void specials_on_timer(void);

Boolean in_table(int value, const int *table);
#endif