cthulu3/
cthulu3/backup/
cthulu3/distribution/
cthulu3/gods/
cthulu3/html/help/basic/
cthulu3/html/help/skills/
cthulu3/log/
cthulu3/player/
/*
 * CthulhuMud
 */

/* Number of effects defined + 1 */
 
#define MAX_AFFECT		96

/* Place holder for undefined affects... */

#define AFFECT_UNDEFINED	-1  

/* Affect info structure and data type... */

typedef struct	affect_info		AFFECT_INFO;

struct affect_info {
	char *name;
	char *start_msg;
	char *end_msg;
	long long bitvector;
};

/* Main external array... */

extern const AFFECT_INFO affect_array[MAX_AFFECT];

/* Declare common gafns... */

#ifdef IN_DB_C
#define GAFN(x) int gafn_ ##x;
#else
#define GAFN(x) extern int gafn_ ## x;
#endif

GAFN(stats)
GAFN(armor)
GAFN(bless)
GAFN(blindness)
GAFN(charm)
GAFN(chill_touch)
GAFN(curse)
GAFN(detect_evil)
GAFN(detect_invis)
GAFN(detect_magic)
GAFN(invisability)
GAFN(poison)
GAFN(protection_evil)
GAFN(sanctuary)
GAFN(sleep)
GAFN(giant_strength)
GAFN(detect_hidden)
GAFN(fly)
GAFN(mist)
GAFN(elder_shield)
GAFN(farsight)
GAFN(hard_skin)
GAFN(shield)
GAFN(mana_shield)
GAFN(weakness)
GAFN(faerie_fire)
GAFN(pass_door)
GAFN(infravision)
GAFN(sex_change)
GAFN(mind_meld)
GAFN(haste)
GAFN(plague)
GAFN(frenzy)
GAFN(calm)
GAFN(mask_self)
GAFN(mask_hide)
GAFN(mask_force)
GAFN(absorb_magic)
GAFN(fear)
GAFN(protection_good)
GAFN(detect_good)
GAFN(regeneration)
GAFN(vocalize)
GAFN(mute)
GAFN(berserk)
GAFN(sneak)
GAFN(water_breathing)
GAFN(dirt_kicking)
GAFN(enchant_weapon)
GAFN(enchant_armor)
GAFN(fatigue)
GAFN(starvation)
GAFN(dehydration)
GAFN(obesity)
GAFN(head_wound)
GAFN(body_wound)
GAFN(arm_wound)
GAFN(leg_wound)
GAFN(intoxication)
GAFN(hangover)
GAFN(size)
GAFN(darkness)
GAFN(aura)
GAFN(hallucinating)
GAFN(relaxed)
GAFN(fire_shield)
GAFN(frost_shield)
GAFN(lightning_shield)
GAFN(protection_fire)
GAFN(protection_frost)
GAFN(protection_lightning)
GAFN(protection_energy)
GAFN(slow)
GAFN(globe)
GAFN(morf)
GAFN(incarnated)
GAFN(asceticism)
GAFN(antipsychotica)
GAFN(room_holy)
GAFN(room_evil)
GAFN(room_silence)
GAFN(room_darkness)
GAFN(room_wild_magic)
GAFN(room_low_magic)
GAFN(room_high_magic)
GAFN(room_no_breathe)
GAFN(room_drain)
GAFN(room_mare)
GAFN(room_enclosed)
GAFN(room_no_morgue)
GAFN(room_fatigue)
GAFN(room_destructive)
GAFN(obj_blade_affect)

/* Find the afn of a given affect... */

extern int get_affect_afn(char *name);

/* Find the gafn for an affect and complain if it can't be found... */

extern int get_affect_gafn(char *name);

/* See if an afn is valid... */

extern bool valid_affect(int afn);

/* Free chain for affect blocks... */

extern AFFECT_DATA *affect_free;

/* Apply an affect to a character... */

extern void affect_char(CHAR_DATA *ch, int afn, bool join, int level, int duration, int location, int modifier, int skill, long long bitvector);

/* Give an affect to a char... */
 
extern void affect_to_char( CHAR_DATA *ch, AFFECT_DATA *paf );

/* Give an affect to an object */

extern void affect_to_obj(OBJ_DATA *obj, AFFECT_DATA *paf);

/* Give an affect to a room... */

extern void affect_to_room(ROOM_INDEX_DATA *room, AFFECT_DATA *paf); 

/* Remove an affect from a room... */

extern void affect_remove_room( ROOM_INDEX_DATA *room, AFFECT_DATA *paf); 

/* Remove an affect from a char... */

extern void affect_remove( CHAR_DATA *ch, AFFECT_DATA *paf );

/* Remove an affect from an object... */

extern void affect_remove_obj( OBJ_DATA *obj, AFFECT_DATA *paf);

/* Remove all affects of a given sn from a char... */

extern void affect_strip( CHAR_DATA *ch, int sn );

/* Remove all affects of a given afn from a char... */

extern void affect_strip_afn( CHAR_DATA *ch, int afn );

/* Return true if a char is affected by an affect... */

extern bool is_affected(CHAR_DATA *ch, int sn);
extern bool obj_affected(OBJ_DATA *obj, int sn);

/* Add or enhance an affect upon a character... */

extern void affect_join( CHAR_DATA *ch, AFFECT_DATA *paf );

/* Apply or remove an affect to a character... */ 

extern void affect_modify( CHAR_DATA *ch, AFFECT_DATA *paf, bool fAdd );

/* Work out a name for an affect location... */

extern char *affect_loc_name(int loc);

/* Work out a name for a bit effect... */

extern char *affect_bit_name(long long bitset);

int check_weapon_affect_at (OBJ_DATA *obj);
int get_weapon_affect_level(OBJ_DATA *obj);