/
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, I'm 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
 */

#define CHAR_MAX_RESIST 9
#define CHAR_MAX_FOLLOW 10

/* Sorry about naming this file "char.c" rather than character.c but
  I go back and forth between Unix and Dos and character is 9 letters */

struct CharacterType { /* common data between players and Mobs */
   BASE         cBase;

   WORD         cAura;
   BYTE         cLevel;
   WORD         cHitBonus;
   WORD         cDamBonus;
   WORD         cArmor;
   WORD         cSpeed;
   LWORD        cHitP;
   LWORD        cMoveP;
   LWORD        cPowerP;

   LWORD        cHitPMax;

   LWORD        cMoney;
   LWORD        cExp;
   BYTE         cPos;
   BYTE         cSex;

   FLAG         cAffectFlag; /* affect flags invis etc */
   AFFECT      *cAffect;     /* affect chain */
   THING       *cFollow; /* the next person following */
   THING       *cLead;   /* the overall leader */
   FLAG         cEquip;
   THING       *cWeapon; /* equipped weapon */

   STR         *cRespond; /* who we're responding to - set with first key of last tell */

   THING       *cFight; /* who are we fighting */
   EXIT        *cFightExit; /* which way to the target */
   BYTE         cFightRange; /* which way to the target */
   WORD         cResist[CHAR_MAX_RESIST];   /* damage resistances */
};

typedef struct PosType {
  BYTE *pName;
  BYTE *pDesc;
} POS;

#define SEX_MALE     0
#define SEX_FEMALE   1
#define SEX_SEXLESS  2

#define POS_DEAD     0
#define POS_MORTAL   1
#define POS_INCAP    2
#define POS_STUNNED  3
#define POS_SLEEPING 4
#define POS_RESTING  5
#define POS_SITTING  6
#define POS_FIGHTING 7
#define POS_STANDING 8

extern BYTE  *sexList[];
extern POS    posList[];

extern BYTE  CharAddFollow(THING *thing, THING *group);
extern void  CharRemoveFollow(THING *thing);
extern void  CharKillFollow(THING *thing);
extern void  CharGainExpFollow(THING *thing, LWORD exp);
extern WORD  CharGetResist(THING *thing, FLAG rFlag);
extern LWORD CharGetHitPMax(THING *thing);
extern LWORD CharGetMovePMax(THING *thing);
extern LWORD CharGetPowerPMax(THING *thing);

/* Generally these skills are here because mobs get calculated defaults,
   there shouldnt be a routine here for every skill in the game */
extern LWORD CharGetHide(THING *thing);
extern LWORD CharGetSneak(THING *thing);
extern LWORD CharGetPerception(THING *thing);
extern LWORD CharGetGuard(THING *thing);
extern LWORD CharGetPeek(THING *thing);
extern LWORD CharGetSteal(THING *thing);
extern LWORD CharGetPickpocket(THING *thing);
extern LWORD CharGetAmbush(THING *thing); /* Get adjusted ambush skill */

/* Use this when a specific Get<SkillName> doesnt exist
 * I guess I should do a big switch lookup to the specific skill routine
 * to simplify this, would be slower though... hmmm */
extern LWORD CharGetSkill(THING *thing, LWORD i); 
extern LWORD CharGetHitBonus(THING *thing, THING *weapon);
extern LWORD CharGetDamBonus(THING *thing, THING *weapon);
extern LWORD CharWillPowerCheck(THING *thing, LWORD bonus);
extern LWORD CharDodgeCheck(THING *thing, LWORD bonus);
extern LWORD CharMoveCostAdjust(THING *thing, LWORD cost);
#define GAIN_HITP   0 
#define GAIN_MOVEP  1
#define GAIN_POWERP 2
#define GAIN_HUNGER 3
#define GAIN_THIRST 4
extern LWORD  CharGainAdjust(THING *thing, BYTE gainType, LWORD gain);
extern void   CharShowHealth(THING *show, THING *thing);
extern void   CharShowEquip(THING *show, THING *thing);
extern LWORD  CharCanCarry(THING *thing, THING *object);
extern LWORD  CharGetCarryMax(THING *thing);
extern LWORD  CharTick(THING *thing);
extern LWORD  CharFastTick(THING *thing);
extern THING *CharThingFind(THING *thing, BYTE *key, LWORD virtual, THING *search, FLAG findFlag, LWORD *offset);

#define Character(x) ((CHARACTER*)(x))