/
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 *
 * 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, Im not an ogre, gimme a call
 * and maybe we can work something out.
 *
 * Current email address: cryogen@unix.infoserve.net
 * Phone number: (604) 591-9746
 */

struct MobTemplateType {
  LWORD                mVirtual;

  STR                 *mKey;
  STR                 *mSDesc;
  STR                 *mLDesc;
  STR                 *mDesc;

  BYTE                 mCompile; /* if set auto compile on load attempt */
  FLAG                 mAct;
  FLAG                 mAffect;
  WORD                 mAura;
  WORD                 mLevel;
  WORD                 mHitBonus;
  WORD                 mArmor;
  WORD                 mHPDiceNum;
  WORD                 mHPDiceSize;
  WORD                 mHPBonus;
  WORD                 mDamDiceNum; /* unarmed damage */
  WORD                 mDamDiceSize;
  WORD                 mDamBonus;
  LWORD                mMoney;
  LWORD                mExp;
  BYTE                 mPos; /* Position default */
  BYTE                 mType;/* Type information ie monster race */
  BYTE                 mSex;

  WORD                 mWeight;

  EXTRA               *mExtra;
  PROPERTY            *mProperty;

  LWORD                mOnline;
};

struct MobType {
  CHARACTER            mCharacter;

  MOBTEMPLATE         *mTemplate; /* Template used */
  THING               *mTrack;    /* what are we chasing (if anything) */
};

extern LWORD        mobileNum;

extern INDEX        mobileIndex;
extern MOBTEMPLATE *spiritTemplate;

/* Special mobs */
#define MVIRTUAL_SPIRIT  -2

#define MOBILE_ALLOC_SIZE 8192

#define MACT_TRACKER     1<<0   /* Will chase people who flee */
#define MACT_SENTINEL    1<<1   /* wont move */
#define MACT_SCAVENGER   1<<2   /* will pick stuff up */
#define MACT_PICKPOCKET  1<<3   /* steals items */
#define MACT_NICE_THIEF  1<<4   /* wont attack a char that steals from it */
#define MACT_AGGRESSIVE  1<<5   /* Will initiate fights with players */
#define MACT_STAY_AREA   1<<6   /* Wont leave its area */
#define MACT_WIMPY       1<<7   /* Will flee if fights go badly */
#define MACT_HYPERAGGR   1<<8   /* will attack other mobs too */
#define MACT_RPUNCTURE   1<<9   /* Dont change these without changing CharResist */
#define MACT_RSLASH      1<<10  /* Dont change these without changing CharResist */
#define MACT_RCONCUSSIVE 1<<11  /* Dont change these without changing CharResist */
#define MACT_RHEAT       1<<12  /* Dont change these without changing CharResist */
#define MACT_REMR        1<<13  /* Dont change these without changing CharResist */
#define MACT_RLASER      1<<14  /* Dont change these without changing CharResist */
#define MACT_RPSYCHIC    1<<15  /* Dont change these without changing CharResist */
#define MACT_RACID       1<<16  /* Dont change these without changing CharResist */
#define MACT_RPOISON     1<<17  /* Dont change these without changing CharResist */
#define MACT_RESCUE      1<<18  /* Autorescue group members */

typedef struct mType {
  BYTE *mTName;
  FLAG  mTFlag;
} MTYPE;

#define MT_ROBOT     1<<0
#define MT_ORGANIC   1<<1
#define MT_PLANT     1<<2
#define MT_ANIMAL    1<<3
#define MT_SENTIENT  1<<4 
#define MT_HASMONEY  1<<5

extern MTYPE  mTypeList[];
extern BYTE  *mActList[];

extern void         MobileInit(void);
extern void         MobileRead(WORD area);
extern MOBTEMPLATE *MobileOf(LWORD virtual);
extern void         MobileWrite(WORD area);
extern              INDEXPROC(MobileCompareProc);
extern              INDEXFINDPROC(MobileFindProc);
extern THING       *MobileAlloc(void);
extern THING       *MobileCreate(MOBTEMPLATE *template, THING *within);
extern void         MobileFree(THING *thing);
extern LWORD        MobilePresent(MOBTEMPLATE *template, THING *within);
extern void         MobileTick();
extern void         MobileIdlePrimitive(THING *mobile);
extern void         MobileIdle(THING *mobile);

#define Mob(x) ((MOB*)(x))
#define MobTemplate(x) ((MOBTEMPLATE*)(x))