mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 21:56:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef OPENMW_ESM_MGEF_H
 | |
| #define OPENMW_ESM_MGEF_H
 | |
| 
 | |
| #include <string>
 | |
| 
 | |
| namespace ESM
 | |
| {
 | |
| 
 | |
| class ESMReader;
 | |
| class ESMWriter;
 | |
| 
 | |
| struct MagicEffect
 | |
| {
 | |
|     enum Flags
 | |
|     {
 | |
|         TargetSkill = 0x1, // Affects a specific skill, which is specified elsewhere in the effect structure.
 | |
|         TargetAttribute = 0x2, // Affects a specific attribute, which is specified elsewhere in the effect structure.
 | |
|         NoDuration = 0x4, // Has no duration. Only runs effect once on cast.
 | |
|         NoMagnitude = 0x8, // Has no magnitude.
 | |
|         Harmful = 0x10, // Counts as a negative effect. Interpreted as useful for attack, and is treated as a bad effect in alchemy.
 | |
|         ContinuousVfx = 0x20, // The effect's hit particle VFX repeats for the full duration of the spell, rather than occuring once on hit.
 | |
|         CastSelf = 0x40, // Allows range - cast on self.
 | |
|         CastTouch = 0x80, // Allows range - cast on touch.
 | |
|         CastTarget = 0x100, // Allows range - cast on target.
 | |
|         UncappedDamage = 0x1000, // Negates multiple cap behaviours. Allows an effect to reduce an attribute below zero; removes the normal minimum effect duration of 1 second.
 | |
|         NonRecastable = 0x4000,	// Does not land if parent spell is already affecting target. Shows "you cannot re-cast" message for self target.
 | |
|         Unreflectable = 0x10000, // Cannot be reflected, the effect always lands normally.
 | |
|         CasterLinked = 0x20000,	// Must quench if caster is dead, or not an NPC/creature. Not allowed in containter/door trap spells.
 | |
|         SpellMaking = 0x0200,
 | |
|         Enchanting = 0x0400,
 | |
|         Negative = 0x0800 // A harmful effect. Will determine whether
 | |
|                           // eg. NPCs regard this spell as an attack. (same as 0x10?)
 | |
|     };
 | |
| 
 | |
|     struct MEDTstruct
 | |
|     {
 | |
|         int mSchool; // SpellSchool, see defs.hpp
 | |
|         float mBaseCost;
 | |
|         int mFlags;
 | |
|         // Properties of the fired magic 'ball' I think
 | |
|         int mRed, mBlue, mGreen;
 | |
|         float mSpeed, mSize, mSizeCap;
 | |
|     }; // 36 bytes
 | |
| 
 | |
|     static std::string effectIdToString(short effectID);
 | |
| 
 | |
| 
 | |
|     MEDTstruct mData;
 | |
| 
 | |
|     std::string mIcon, mParticle; // Textures
 | |
|     std::string mCasting, mHit, mArea; // Statics
 | |
|     std::string mBolt; // Weapon
 | |
|     std::string mCastSound, mBoltSound, mHitSound, mAreaSound; // Sounds
 | |
|     std::string mDescription;
 | |
| 
 | |
|     // Index of this magical effect. Corresponds to one of the
 | |
|     // hard-coded effects in the original engine:
 | |
|     // 0-136 in Morrowind
 | |
|     // 137 in Tribunal
 | |
|     // 138-140 in Bloodmoon (also changes 64?)
 | |
|     // 141-142 are summon effects introduced in bloodmoon, but not used
 | |
|     // there. They can be redefined in mods by setting the name in GMST
 | |
|     // sEffectSummonCreature04/05 creature id in
 | |
|     // sMagicCreature04ID/05ID.
 | |
|     int mIndex;
 | |
| 
 | |
|     void load(ESMReader &esm);
 | |
|     void save(ESMWriter &esm);
 | |
| };
 | |
| }
 | |
| #endif
 |