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

/* Number of spells defined + 1 */
 
#define MAX_SPELL		301
#define MAX_EFFECT		301

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

#define SPELL_UNDEFINED		-1  

#define EFFECT_UNDEFINED	-1  

/* Structure to hold spell instructions - 3 ints and one string */

typedef struct seq_step SEQ_STEP;

struct seq_step {
	int		 delay;
	int		 instr;
	int		 iparms[5];
	char		*sparms[4];
	ECOND_DATA	*cond;
	SEQ_STEP	*next;  
};

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

typedef struct	spell_info	SPELL_INFO;

struct	spell_info {
	char		*name;
                char		*desc;	
                char                        *info;     
	short		target;
	short		mana;
	short		diff;
                short                     range;
                short		sn;
                short		sn2;
                short		discipline;
	short		music_style;
       	int		music_power;
	bool		parse_info;
	int		effect;
	char		*component;
	SEQ_STEP	*seq;
	ECOND_DATA	*cond;
	bool		 loaded;
};

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

typedef struct	effect_info	EFFECT_INFO;

struct	effect_info {
	char		*name;	
    	SPELL_FUN	*spell_fun;
	int		 slot;
	int		 target;
	char		*noun_damage;
	char 		*affect;
};

/* Spell instruction codes... */

#define STEP_NONE	 0

#define STEP_PREPARE_SPELL	1
#define STEP_CHANT		2
#define STEP_CAST_SPELL	3
#define STEP_EFFECT		4
#define STEP_ECHO		5
#define STEP_MESSAGE		6
#define STEP_ABORT		7
#define STEP_SKIP		8
#define STEP_DAMAGE		9
#define STEP_HEAL		10
#define STEP_POWER_WORD	11
#define STEP_SANITY		12
#define STEP_AREA_DAMAGE	13
#define STEP_AREA_HEAL	14
#define STEP_YELL		15

// P is the limit

#define STEP_FCS_NONE		 0
#define STEP_FCS_ACTOR	(A)
#define STEP_FCS_VICTIM	(B)
#define STEP_FCS_FRIEND	(C)
#define STEP_FCS_FOE		(D)
#define STEP_FCS_ALL		(E)
#define STEP_FCS_NOT_FRIEND	(F)
#define STEP_FCS_NOT_FOE	(G)

// P is the limit

#define STEP_DMG_MIN		(A)
#define STEP_DMG_LOW	(B)
#define STEP_DMG_MED_LOW	(C)
#define STEP_DMG_MED		(D)
#define STEP_DMG_MED_HIGH	(E)
#define STEP_DMG_HIGH	(F)
#define STEP_DMG_FATAL	(G)
#define STEP_DMG_OVERKILL	(H)

#define STEP_DMG_HIT		(I)
#define STEP_DMG_SAVE_HALF	(J)
#define STEP_DMG_SAVE_NONE	(K)

// P is the limit

#define STEP_HEAL_HITS		(A)
#define STEP_HEAL_MANA		(B)
#define STEP_HEAL_MOVE		(C)

/* Main external arrays... */

extern SPELL_INFO spell_array[MAX_SPELL];

extern EFFECT_INFO effect_array[MAX_EFFECT];

/* Declare common gafns... */

/* Find the spn of a given spell... */

extern int get_spell_spn(char *name);

/* Find the efn of a given effect... */

extern int get_effect_efn(char *name);

/* Find the gspn for a spell and complain if it can't be found... */

extern int get_spell_gspn(char *name);

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

extern int get_effect_gefn(char *name);

/* See if a spell number is valid... */

extern bool valid_spell(int spn);

/* See if an effect number is valid... */

extern bool valid_effect(int efn);

/* Set up spell sns... */

extern void setup_spells();

/* Look up a effect by slot... */

extern int get_effect_for_slot(int slot);

/* Look up the affect number for an effect... */

extern int get_affect_afn_for_effect(int efn);

/* Spell loader... */

void load_spells();