/***************************************************************************
* 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;