|
|
|
#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;
|
|
|
|
|
Finished ALCH, APPA, BOOK, CLOT, CREC, ENCH, GLOB, INGR, LIGH, MISC, RACE, SKIL, SNDG, SSCR and STAT. Phew!
15 years ago
|
|
|
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
|