mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 22:56:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef _ESM_DEFS_H
 | |
| #define _ESM_DEFS_H
 | |
| 
 | |
| #include "esm_reader.hpp"
 | |
| 
 | |
| namespace ESM {
 | |
| 
 | |
| // Pixel color value. Standard four-byte rr,gg,bb,aa format.
 | |
| typedef int32_t Color;
 | |
| 
 | |
| enum VarType
 | |
|   {
 | |
|     VT_Unknown,
 | |
|     VT_None,
 | |
|     VT_Short,
 | |
|     VT_Int,
 | |
|     VT_Long,
 | |
|     VT_Float,
 | |
|     VT_String,
 | |
|     VT_Ignored
 | |
|   };
 | |
| 
 | |
| enum Specialization
 | |
|   {
 | |
|     SPC_Combat  = 0,
 | |
|     SPC_Magic   = 1,
 | |
|     SPC_Stealth = 2
 | |
|   };
 | |
| 
 | |
| enum RangeType
 | |
|   {
 | |
|     RT_Self = 0,
 | |
|     RT_Touch = 1,
 | |
|     RT_Target = 2
 | |
|   };
 | |
| 
 | |
| /** A list of references to spells and spell effects. This is shared
 | |
|     between the records BSGN, NPC and RACE.
 | |
| */
 | |
| struct SpellList
 | |
| {
 | |
|   std::vector<std::string> list;
 | |
| 
 | |
|   void load(ESMReader &esm)
 | |
|   {
 | |
|     while(esm.isNextSub("NPCS"))
 | |
|       list.push_back(esm.getHString());
 | |
|   }
 | |
| };
 | |
| 
 | |
| /** Defines a spell effect. Shared between SPEL (Spells), ALCH
 | |
|     (Potions) and ENCH (Item enchantments) records
 | |
| */
 | |
| #pragma pack(push)
 | |
| #pragma pack(1)
 | |
| 
 | |
| // Position and rotation
 | |
| struct Position
 | |
| {
 | |
|   float pos[3];
 | |
|   float rot[3];
 | |
| };
 | |
| 
 | |
| struct ENAMstruct
 | |
| {
 | |
|   // Magical effect, hard-coded ID
 | |
|   short effectID;
 | |
| 
 | |
|   // Which skills/attributes are affected (for restore/drain spells
 | |
|   // etc.)
 | |
|   signed char skill, attribute; // -1 if N/A
 | |
| 
 | |
|   // Other spell parameters
 | |
|   int range; // 0 - self, 1 - touch, 2 - target (RangeType enum)
 | |
|   int area, duration, magnMin, magnMax;
 | |
| 
 | |
|   // Struct size should be 24 bytes
 | |
| };
 | |
| #pragma pack(pop)
 | |
| 
 | |
| struct EffectList
 | |
| {
 | |
|   std::vector<ENAMstruct> list;
 | |
| 
 | |
|   void load(ESMReader &esm)
 | |
|   {
 | |
|     ENAMstruct s;
 | |
|     while(esm.isNextSub("ENAM"))
 | |
|       {
 | |
|         esm.getHT(s, 24);
 | |
|         list.push_back(s);
 | |
|       }
 | |
|   }
 | |
| };
 | |
| 
 | |
| }
 | |
| #endif
 |