/
Crimson2/alias/
Crimson2/area.tmp/
Crimson2/area.tmp/AnomalySpaceDock/
Crimson2/area.tmp/AnomalyStation/
Crimson2/area.tmp/AntHill/
Crimson2/area.tmp/ArcticTerrarium/
Crimson2/area.tmp/BuilderCity/
Crimson2/area.tmp/Dungeon/
Crimson2/area.tmp/MiningDock/
Crimson2/area.tmp/PipeSystem/
Crimson2/area.tmp/RattArea/
Crimson2/area.tmp/RobotFactory/
Crimson2/area.tmp/SilverDale/
Crimson2/area.tmp/StarshipFearless/
Crimson2/area.tmp/StationConduits/
Crimson2/area.tmp/TerrariumAlpha/
Crimson2/area.tmp/TerrariumBeta/
Crimson2/area.tmp/TestArea/
Crimson2/area.tmp/Void/
Crimson2/area/
Crimson2/area/AnomalySpaceDock/
Crimson2/area/AnomalyStation/
Crimson2/area/MiningDock/
Crimson2/area/PipeSystem/
Crimson2/area/SilverDale/
Crimson2/area/StationConduits/
Crimson2/area/Void/
Crimson2/board/
Crimson2/clone/
Crimson2/lib/
Crimson2/mole/
Crimson2/mole/mole_src/HELP/
Crimson2/player/
Crimson2/util/
Crimson2/wldedit/
Crimson2/wldedit/res/
/* Crimson2 Mud Server 
 * All source written/copyright Ryan Haksi 1995 *
 * (yes *ALL* code was written by me from scratch! any similarities to other 
 *  muds is strictly coincidence)
 * 
 * This source code is proprietary, if you are using it without my express
 * permission you are violating the copyright act and can potentially be
 * sued.
 * That said, if you would like to use it, I'm not an ogre, gimme a call
 * and maybe we can work something out.
 * (NOTE: File formats are mostly diku compatible so migrating to crimson2
 *  from your current diku flavour should prove reasonably easy!)
 * (and by the way it MURDERS dikumud servers in every respect *GRIN*!)
 *
 * Current email address: cryogen@unix.infoserve.net
 * Phone number: (604) 591-5295
 * snail mail:
 * 14095 57A Ave
 * Surrey, BC
 * V3X 2W2
 * Canada
 */


/* notes on the linking system:
 Well every link has a send (SND) and recieve (RCV) side, for example say
 Joe is being telepathically snooped by Bob. Joe has a SND type link
 that points to Bobs Thing, Bob has a RCV type link to Joes Thing and both
 of them have a CONTROL link to their respective controlling sockets (ie
 Control links are the exception to the two sided rule... complicated enuff
 fer ya?)
*/



/* even is SND, odd is RCV */
/* so ltype%2 will get you absolute link type */

#define BL_UNDEF         0 /* we're confused */
#define BL_CONTROL       1 /* link to a socket */
#define BL_TELEPATHY_SND 2 
#define BL_TELEPATHY_RCV 3 
#define BL_HEAR_SND      4 
#define BL_HEAR_RCV      5 
#define BL_SEE_SND       6 
#define BL_SEE_RCV       7 
#define BL_C4_SND        8 
#define BL_C4_RCV        9 

struct BaseLinkType {
  union blDetailType {
    SOCK                 *lSock;
    THING                *lThing;
  } lDetail;

  WORD                  lType;
  BASELINK             *lNext;
};

/* for things that can be moved around, ie everything but rooms */
struct BaseType {
  THING                 bThing;

  STR                  *bKey;       /* player name for players, keylist for others */
  STR                  *bLDesc;     /* long string A Black Dagger is lying here/title */
  THING                *bInside;    /* one level up in the hierarchy, anything can be in anything this way */
  WORD                  bConWeight; /* weight of everthing contained inside us */
  WORD                  bWeight;    /* hmm everything must have a weight this way */
  BASELINK             *bLink;      /* any&everything can be linked to sockets, */
                                    /* among other things this should allow bugs&cameras in the rooms */
  SOCK                 *bControl;
};

extern BYTE     *linkTypeList[];

extern void      BaseLinkAlloc(THING *sndThing, THING *rcvThing, WORD lType);
extern void      BaseLinkCreate(THING *sndThing, THING *rcvThing, WORD lType);
extern BASELINK *BaseLinkFind(BASELINK *next, WORD lType, THING *thing);
extern void      BaseLinkFree(THING *thing, BASELINK *link);
extern void      BaseFree(THING *thing);
extern void      BaseControlAlloc(THING *thing, SOCK *sock);
extern SOCK     *BaseControlFind(THING *thing);
extern void      BaseControlFree(THING *thing, SOCK *sock);
#define Base(x) ((BASE*)(x))