/* ....[@@@..[@@@..............[@.................. MUD++ is a written from ....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and ....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++. ....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing ....[@......[@..[@@@@@..[@@@@@.................. development project. All ................................................ contributions are welcome. ....Copyright(C).1995.Melvin.Smith.............. Enjoy. ------------------------------------------------------------------------------ Melvin Smith (aka Fusion) msmith@falcon.mercer.peachnet.edu MUD++ development mailing list mudpp-list@spice.com ------------------------------------------------------------------------------ spell.h */ #ifndef _SPELL_H #define _SPELL_H #include "thing.h" // This may not even be used when I finally figure out how I want // to implement spell casting. #define TAR_ANY 1 #define TAR_SELF 2 #define TAR_CHAR_ANY 3 #define TAR_CHAR_OTHER 4 #define TAR_OBJECT_ANY 5 #define TAR_OBJECT_OTHER 6 #define TAR_ROOM 7 #define SPELL( fun ) void fun( Thing *, Thing * ) // Would be nice to inherit skill but gcc hasn't implemented initializer // for objects with base classes as of 2.7.0 // Fairly simple class anyway. class Spell { public: const char * name; void (Spell::*fun)( Thing *caster, Thing *target ); int target; void cast( Thing *, Thing * ) const; const char * getName() const { return name; } SPELL( spell_none ); SPELL( spell_giant_form ); SPELL( spell_lightning_bolt ); SPELL( spell_sanctuary ); }; inline void Spell::cast( Thing * caster, Thing * target ) const { // Pass the non-member function a pointer to the spell // that is calling it fun( caster, target ); } // I code a spell as a class with a general function so objects, chars // and rooms can cast a spell using the same function. extern const Spell * spellNone; const Spell * lookupSpell( const char *, char * ); const Spell * lookupSpell( const char * ); inline const Spell * lookupSpell( char * x ) { return lookupSpell( (const char *) x );} #endif