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