/
vortex/area/
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/
#define POWER_TYPE 0
#define POWER_LEVEL 1
//#define ACK
#define DAM_ORIGINAL

/* Class Values */
typedef enum
{
 CLASS_NONE, CLASS_APOCRYPHIC, CLASS_ALIEN, CLASS_CYBORG, CLASS_MONK, CLASS_SHADOW,
 CLASS_WOLF, CLASS_JEDI, CLASS_VAMPIRE, CLASS_DRAGON, CLASS_DROW
} class_type;

#define IS_MXP(ch) (IS_SET((ch)->act,PLR_MXP))
#define IS_CLASS(ch, value) ((ch)->class == value)
#define GET_POWERS(ch, field) ((ch)->pcdata->powers[field])
#define INC_POWERS(ch, val) ((ch)->pcdata->powers[val]++)
#define DEC_POWERS(ch, val) ((ch)->pcdata->powers[val]--)
#define SET_BIT_POWERS(ch, value, bit) (SET_BIT((ch)->pcdata->powers[value], bit))
#define REM_BIT_POWERS(ch, value, bit) (REMOVE_BIT((ch)->pcdata->powers[value], bit))
#define FIGHT_TIMER( ch, time)                \
{                                             \
 ch->fight_timer += time;                     \
 if( ch->fight_timer > 30)                    \
  ch->fight_timer = 30;                       \
}

/* ability skills */
#define ASKILL(ch, field) ((ch)->pcdata->askills[field])
#define AS_TOTAL	0
#define AS_FINAL	2
#define AS_ATTACK	3
#define AS_DEFENSE	4
#define AS_TRUESIGHT	5
#define AS_SWORDSMAN	6
#define AS_STANCES	7
#define AS_SPELLS	8
#define AS_READAURA	9
#define AS_BITS		20
#define ASKILL_MAX_LEV 100

#define ABIT_TRUESIGHT	BIT_1
#define ABIT_READAURA   BIT_2

/*Drow port -Kline*/

typedef enum
{
 DROW_NONE, DROW_BITS, DROW_POINTS, DROW_MAGIC
} drow_basic_stuff;

#define DROW_WAR		BIT_1
#define DROW_MAG		BIT_2
#define DROW_CLE		BIT_3
#define DPOWER_DROWFIRE		BIT_4
#define DPOWER_DARKNESS		BIT_5
#define DPOWER_DROWSIGHT	BIT_6
#define DPOWER_ARMS		BIT_7
#define DPOWER_WEB		BIT_8
#define DPOWER_SPIDERFORM	BIT_10
#define DPOWER_DROWHATE		BIT_11
#define DPOWER_DROWSHIELD	BIT_12
#define DPOWER_LEVITATION	BIT_13
#define DPOWER_GAROTTE		BIT_14
#define DPOWER_DGAROTTE		BIT_15
#define DPOWER_DROWPOISON	BIT_16
#define DPOWER_EARTHSHATTER	BIT_17
#define DPOWER_SPEED		BIT_18
#define DPOWER_TOUGHSKIN	BIT_19
#define DPOWER_SCRY		BIT_20
#define DROW_HATE		BIT_21
#define DROW_SPIDERFORM		BIT_22
#define DROW_SHIELD		BIT_23
#define DROW_TOUGHSKIN		BIT_24

/*Blah blah Jedi via Kline
 *They look simple...But aren't!
 */
typedef enum
{
 JEDI_NONE, JEDI_STANCE, JEDI_ATTACK, JEDI_DEFENSE, JEDI_RANK, JEDI_LIGHT,
 JEDI_DARK, JEDI_NEUTRAL, JEDI_FORCE_POOL, JEDI_STANCE_COUNT, JEDI_ATTACK_COUNT,
 JEDI_DEFENSE_COUNT, JEDI_FORCE_HEAL, JEDI_FORCE_ABSORB, JEDI_FORCE_SHIELD,
 JEDI_FORCE_MIND_TRICK, JEDI_FORCE_SIGHT, JEDI_FORCE_SPEED, JEDI_FORCE_JUMP,
 JEDI_FORCE_PUSH, JEDI_FORCE_PULL, JEDI_FORCE_GRIP, JEDI_FORCE_RAGE,
 JEDI_FORCE_DRAIN, JEDI_FORCE_LIGHTNING, JEDI_CHAIN_LENGTH, JEDI_STANCE_STYLE,
 JEDI_BITS, JEDI_COMBO_OLD, JEDI_COMBO_NEW, JEDI_FORCE_POOL_MAX
} jedi_basic_stuff;

typedef enum
{
 JEDI_RANK_NONE, JEDI_RANK_APPRENTICE, JEDI_RANK_INITIATE, JEDI_RANK_GUARDIAN,
 JEDI_RANK_KNIGHT, JEDI_RANK_MASTER, JEDI_RANK_LORD
} jedi_rank_stuff;

typedef enum
{
 JEDI_STYLE_NONE, JEDI_STYLE_LIGHT, JEDI_STYLE_MEDIUM, JEDI_STYLE_HEAVY
} jedi_style_stuff;

typedef enum
{
 JEDI_COMBO_NONE, JEDI_COMBO_JOVER, JEDI_COMBO_JFLIP, JEDI_COMBO_JUPPER, JEDI_COMBO_JBACK,
 JEDI_COMBO_JSLICE, JEDI_COMBO_JSWIPE, JEDI_COMBO_JSLASH, JEDI_COMBO_JROLL
} jedi_combo_stuff;

typedef enum
{
 JEDI_COMBO_AFF_NONE, JEDI_COMBO_AFF_HASTE, JEDI_COMBO_AFF_SLOW, JEDI_COMBO_AFF_SHEAL,
 JEDI_COMBO_AFF_MHEAL, JEDI_COMBO_AFF_LHEAL, JEDI_COMBO_AFF_SDAM, JEDI_COMBO_AFF_MDAM,
 JEDI_COMBO_AFF_LDAM, JEDI_COMBO_AFF_TOUGHNESS, JEDI_COMBO_AFF_ANTI_SANCT,
 JEDI_COMBO_AFF_STUN, JEDI_COMBO_AFF_STOP_FIGHT, JEDI_COMBO_AFF_UNSTANCE,
 JEDI_COMBO_AFF_DISARM, JEDI_COMBO_AFF_UBER_JEDI, JEDI_COMBO_AFF_LEECH_HEALTH,
 JEDI_COMBO_AFF_LEECH_MANA, JEDI_COMBO_AFF_LEECH_MOVE, JEDI_COMBO_AFF_LEECH_ALL,
 JEDI_COMBO_AFF_EQUILIZER
} jedi_combo_affects_stuff;

#define JEDI_LIGHT_WS_MOD	1.5
#define JEDI_LIGHT_DAM_MOD	0.75
#define JEDI_HEAVY_WS_MOD	1.5
#define JEDI_HEAVY_DAM_MOD	1.25
#define JEDI_WS_MOD_SPEED	2
#define JEDI_WS_MOD_UBER	1.5
#define JEDI_DAM_MOD_UBER	1.15
#define JEDI_SKILL_CAP		10
#define JEDI_ADVANCE_COUNT	100
#define JEDI_WAIT		12
#define JEDI_MIN_DAM		500
#define JEDI_MAX_DAM		1100
#define JEDI_MIN_RAND		50
#define JEDI_MAX_RAND		150
#define JEDI_PEAK_MOD		2.5

#define JEDI_ABSORB	BIT_1
#define JEDI_SHIELD	BIT_2
#define JEDI_MIND_TRICK	BIT_3
#define JEDI_SIGHT	BIT_4
#define JEDI_SPEED	BIT_5
#define JEDI_RAGE	BIT_6
#define JEDI_UBER	BIT_7
#define JEDI_TOUGH	BIT_8
#define JEDI_UNRAGE	BIT_9

/* Here there be dragons */
typedef enum
{ DRAGON_NONE, DRAGON_MIGHT, DRAGON_TOUGH, DRAGON_SPEED, DRAGON_MAGIC,
  DRAGON_BTIME, DRAGON_STIME, DRAGON_FLAGS, DRAGON_AGE, DRAGON_POINTS,
  DRAGON_FORM, DRAGON_DAYS
} dragon_stuff;

#define POINT_STEP 200

#define DRAGON_WINGS     BIT_1
#define DRAGON_FIRE      BIT_2
#define DRAGON_ICE       BIT_3
#define DRAGON_ACID      BIT_4
#define DRAGON_LIGHTNING BIT_5
#define DRAGON_POISON    BIT_6
#define DRAGON_GRAB      BIT_7
#define DRAGON_FLY       BIT_8

#define DRAGON_FORM_DRAGON    1
#define DRAGON_FORM_HUMAN     2

#define DRAGON_TYPE_FIRE      1
#define DRAGON_TYPE_LIGHTNING 2
#define DRAGON_TYPE_ACID      3
#define DRAGON_TYPE_POISON    4
#define DRAGON_TYPE_ICE       5

/* vamps */
typedef enum
{
 VAMP_NONE, VAMP_BITS, DISC_OBTEN, DISC_PRESENCE, DISC_QUIETUS, DISC_THAUM,
 DISC_AUSPEX, DISC_DOMINATE, DISC_OBFUSCATE, DISC_PROTEAN, DISC_SERPENTIS,
 DISC_VICIS, DISC_DAIMOINON, DISC_ANIMALISM, DISC_CELERITY, DISC_POTENCE,
 DISC_FORTITUDE, VAMP_BLOOD, VAMP_FORM, VAMP_GEN, VAMP_AGE, VAMP_POINTS, VAMP_BEAST,
 VAMP_KILLS
} vamp_basic;
/* vamp bits */
#define BIT_CONCEAL     BIT_1
#define BIT_DISGUISE	BIT_2
#define BIT_SCALES	BIT_3
#define BIT_BEAST	BIT_4
#define BIT_GOLCANDA	BIT_5
#define BIT_DARK_GOLC	BIT_6
#define BIT_FLAMEHANDS	BIT_7
#define BIT_SHADE	BIT_8
#define BIT_HORNS	BIT_9
#define BIT_WINGS	BIT_10
#define BIT_EXO		BIT_11
#define BIT_TAIL	BIT_12
#define BIT_HEAD	BIT_13
#define BIT_BAAL	BIT_14
#define BIT_FLASHING	BIT_15
#define BIT_POTENCE	BIT_16
#define BIT_TIDE	BIT_17

#define BIT_COIL	BIT_19
#define BIT_INCONNU	BIT_20
#define BIT_ACID	BIT_21
/* vamp forms */
typedef enum
{
 FORM_NORMAL, FORM_SERPENT, FORM_ZULO, FORM_DRAGON, FORM_BAT, FORM_WOLF,
 FORM_OBJECT, FORM_MIST, FORM_EARTH, FORM_PLASMA
} vamp_forms;
/* vamp age */
typedef enum
{
 AGE_NONE, AGE_CAITIFF, AGE_ANCILLA, AGE_ELDER, AGE_METHUSELAH
} vamp_ages;

/* wolves */
#define DISC_BEAR	1
#define DISC_LYNX	2
#define DISC_BOAR	3
#define DISC_OWL	4
#define DISC_SPIDER	5
#define DISC_WOLF	16
#define DISC_HAWK	7
#define DISC_MANTIS	8
#define DISC_RAPTOR	9
#define DISC_LUNA	10
#define DISC_PAIN	11
#define DISC_CONG	12
#define WOLF_BITS	13
#define WOLF_FORM	14
#define WOLF_POINTS	15
#define FORM_HOMID	1
#define FORM_GLABRO	2
#define FORM_CRINOS	3
#define FORM_HISPO	4
#define FORM_LUPUS	5
/* wolf bits */
#define BIT_SCLAW	BIT_1
#define BIT_FCLAW	BIT_2
#define BIT_REND	BIT_3
#define BIT_TOUGH	BIT_4
#define BIT_JAW		BIT_5
#define BIT_SENSES	BIT_6
#define BIT_QUILLS	BIT_7
#define BIT_SLAM	BIT_8
#define BIT_HOMID	BIT_9
#define BIT_GLABRO	BIT_10
#define BIT_CRINOS	BIT_11
#define BIT_HISPO	BIT_12
#define BIT_LUPUS	BIT_13
#define BIT_CLAWS	BIT_14
#define BIT_FANGS	BIT_15
#define BIT_SHIELD	BIT_16
#define BIT_RAGED	BIT_17
#define BIT_VANISH	BIT_18
#define BIT_GONE	BIT_19
/* aliens */
#define ALIEN_SPEED  1
#define ALIEN_STR    2
#define ALIEN_SIZE   3
#define ALIEN_ARMOR  4
#define ALIEN_SENSE  5
#define ALIEN_BITS   6
#define ALIEN_PAIN   7
#define ALIEN_PRIMAL 8
#define ALIEN_DNA    9
#define ALIEN_CLAWS  10
#define ALIEN_TAIL   11
#define ALIEN_CLASS  12
#define ALIEN_TIMER  13
/* alien bits */ 
#define ALIEN_CLOAK  1
/* alien subclasses */
#define ALIEN_DRONE 0
#define ALIEN_RUN   1
#define ALIEN_WAR   2
#define ALIEN_PRAE  3
#define ALIEN_SCORP 4
#define ALIEN_GOR   5

/* shadow */
#define SHADOW_BACKSTAB	1
#define SHADOW_TRAP	2
#define SHADOW_RUNE	3
#define SHADOW_TRACK	4
#define SHADOW_COUNTER	5
#define SHADOW_BITS	6
#define SHADOW_LEV_BS	7
#define SHADOW_LEV_TRAP	8
#define SHADOW_LEV_RUNE	9
#define SHADOW_LEV_TRK	10
#define SHADOW_COST	250
#define SHADOW_LEV_GAIN	30

#define SHADOW_INVIS	1
#define SHADOW_FOLLOW	2
#define SHADOW_FOLLGO	4

/* monks */
typedef enum
{ MONK_NONE, MONK_BITS, MONK_TECH, MONK_CURR_CHI, MONK_MAX_CHI, MONK_CURR_FOC, MONK_MAX_FOC,
  MONK_COMBO, MONK_CHAIN, MONK_CUSTOM, MONK_BLOCK, MONK_CLASS
} monk_values;

typedef enum
{
 PATH_NONE, PATH_INFERNO, PATH_PEARL, PATH_TSUNAMI, PATH_GAIA, PATH_TEMPEST
} path_values;

/********************************************************
 *                     Bits for monks                   *
 ********************************************************/
#define MONK_CUST 1
#define MONK_STONEBODY 2
#define MONK_STONEHAND 4
#define MONK_MICHAEL   8
#define MONK_BEAR      16
#define MONK_BAHAMUT   32
#define MONK_FIDO      64
#define MONK_MIST      128
#define MONK_EFREET    256
#define MONK_WOLF      512

/********************************************************
*                     Monk techniques                   *
*********************************************************/
#define TECH_ELBOW       1
#define TECH_BACKFIST    2 
#define TECH_SWEEP       4 
#define TECH_REVERSE     8 
#define TECH_KNEETHRUST  16 
#define TECH_THRUSTKICK  32
#define TECH_ROUNDHOUSE  64
#define TECH_HEARTPUNCH  128
#define TECH_PALMSTRIKE  256
#define TECH_DENJIN      512
#define TECH_CUSTOM      1024
#define TECH_VOICE       2048
#define TECH_BLOCK       4096
#define TECH_CELEST      8192
#define TECH_STANCE      16384
#define TECH_UNARMED     32768
#define TECH_HEALTOUCH   65536
#define TECH_DEATHTOUCH  131072
#define TECH_HEATMETAL   262144
#define TECH_CLAIR       524288
#define TECH_CHI         1048576

#define MONK_MIN_DAM 350
#define MONK_MAX_DAM 700
#define MAX_CUSTOM 100
#define MAX_MONK_BLOCK 100
#define MAX_CHI 6 
#define MAX_FOCUS 150
#define MONK_SET(ch, value) (IS_SET(GET_POWERS((ch), MONK_BITS), value))
#define HAS_TECH(ch, value) (IS_SET(GET_POWERS((ch), MONK_TECH), value))
#define MONK_WAIT 6 /* basic waitstate */
#define CHI_COST 500000 /* cost in focus to get a point of chi */

typedef enum
{
 COMBO_NONE, COMBO1_STAGE1, COMBO1_STAGE2, COMBO2_STAGE1, COMBO2_STAGE2,
 COMBO3_STAGE1, COMBO3_STAGE2, COMBO4_6_STAGE1, COMBO4_6_STAGE2, COMBO5_STAGE1, 
 COMBO5_STAGE2, COMBO5_STAGE3, COMBO6_STAGE3, COMBO6_STAGE4, COMBO7_STAGE1, 
 COMBO7_STAGE2, COMBO8_STAGE1, COMBO8_STAGE2, COMBO8_STAGE3, COMBO9_STAGE2,
 COMBO9_STAGE3, COMBO9_STAGE4
} combo_values;

typedef enum
{
 CHAIN_NONE, CHAIN1_STAGE1, CHAIN1_STAGE2, CHAIN2_STAGE1, CHAIN2_STAGE2,
 CHAIN3_STAGE1, CHAIN3_STAGE2, CHAIN4_STAGE1, CHAIN4_STAGE2, CHAIN5_STAGE1,
 CHAIN5_STAGE2
} chain_value;

typedef enum
{
 COMBO_MOVE, COMBO_MANA, COMBO_STUN, COMBO_DAM1, COMBO_DAM2, COMBO_DAM3,
 COMBO_HEAL1, COMBO_HEAL2, COMBO_HEAL3, COMBO_CHAIN1, COMBO_CHAIN2, COMBO_CHAIN3,
 COMBO_CHAIN4, COMBO_CHAIN5
} combo_types;

#define SPC_NEWBIEPASS  1
#define	WOLF_POLYAFF	6

#define HEAD_NORMAL		      0
#define HEAD_WOLF		      1
#define HEAD_EAGLE		      2
#define HEAD_LION		      4
#define HEAD_SNAKE		      8

#define TAIL_NONE		      0
#define TAIL_POISONOUS		      1
#define TAIL_SCORPION		      2

#define INVIS_TIME		20
#define CHAT_TIME		21


/* paintaball defines */
#define PAINT_ON              0
#define PAINT_DEATHS          1
#define PAINT_KILLS           2

/* Powerblock defines */
#define SCHOOL_NONE      0
#define SCHOOL_FIRE      1
#define SCHOOL_WATER     2
#define SCHOOL_EARTH     3
#define SCHOOL_WIND      4
#define SCHOOL_HOLY      5
#define SCHOOL_EVIL      6
#define SCHOOL_TIME      7
#define SCHOOL_SPACE     8
#define SCHOOL_PLANT     9
#define SCHOOL_ANIMAL    10
#define SCHOOL_ARCANE    11
#define SCHOOL_LUCK      12 
#define SCHOOL_ORDER     13
#define SCHOOL_CHAOS     14
#define SCHOOL_LIFE      15
#define SCHOOL_DEATH     16
#define MAX_BLOCK 16

/* GEm stuff*/
#define GEM_UNCUT    1
#define GEM_SIMPLE   2
#define GEM_COMPLEX  4
#define GEM_MASTER   8
#define GEM_UNPOLISHED 16
#define GEM_POLISHED   32
#define GEM_CRACKED    64
#define GEM_FLAWED     128
#define GEM_HAZY       256
#define GEM_CLEAR      512
#define GEM_FLAWLESS   1024
#define GEM_DIAMOND    1
#define GEM_RUBY       2
#define GEM_EMERALD    3
#define GEM_SAPPHIRE   4
#define GEM_ONYX       5
#define GEM_TOURMALINE 6
#define GEM_JADE       7
#define GEM_QUARTZ     8
#define GEM_OPAL       9
#define MAX_GEM        10

/* new affect bits */
#define AFF2_AURA      1
#define AFF2_REGEN     2
#define AFF2_CONTAGION 4 
#define AFF2_SLOW      8
#define AFF2_MANASHIELD 16

/* area bits */
#define AFF_AREA_FLOOD 1

/* room bits */
#define AFF_ROOM_DEFILE    1
#define AFF_ROOM_MINED     2
#define AFF_ROOM_WHIRLWIND 4
#define AFF_ROOM_FIRETRAP  8
#define AFF_ROOM_ICED      16
#define AFF_ROOM_TEARGAS   32
#define AFF_ROOM_DART	   64
#define AFF_ROOM_POISON	   128
#define AFF_ROOM_EXPLOSION 256
#define AFF_ROOM_SLEEP	   512
#define AFF_ROOM_NEGATIVITY 1024
#define AFF_ROOM_DRAIN	   2048

/* ore type */
#define ORE_COPPER      1
#define ORE_IRON        2
#define ORE_TIN         3

/* metal types */
#define METAL_COPPER    1
#define METAL_BRONZE    2
#define METAL_IRON      3
#define METAL_STEEL     4

/* group types defs */
#define GROUP_1 1  /*fire/chaos*/
#define GROUP_2 2  /*earth/plant*/
#define GROUP_3 3  /*holy/order*/
#define GROUP_4 4  /*time/luck*/
#define GROUP_5 5  /*arcane/space*/
#define GROUP_6 6  /*life/water*/
#define GROUP_7 7  /*death/wind*/
#define GROUP_8 8  /*animal/evil*/

#define HAS_SOUND(ch) (IS_SET((ch)->act, PLR_MSP))

typedef enum
{
SND_NONE, SND_CHAR, SND_ROOM, SND_AREA, SND_WORLD
} sound_type;