File: importsplm.cpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (45 lines) | stat: -rw-r--r-- 1,452 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "importsplm.h"

#include <components/esm3/esmreader.hpp>

namespace ESSImport
{

    void SPLM::load(ESM::ESMReader& esm)
    {
        while (esm.isNextSub("NAME"))
        {
            ActiveSpell spell;
            esm.getHT(spell.mIndex);
            esm.getHNT("SPDT", spell.mSPDT.mType, spell.mSPDT.mId.mData, spell.mSPDT.mUnknown,
                spell.mSPDT.mCasterId.mData, spell.mSPDT.mSourceId.mData, spell.mSPDT.mUnknown2);
            spell.mTarget = esm.getHNOString("TNAM");

            while (esm.isNextSub("NPDT"))
            {
                ActiveEffect effect;
                esm.getHT(effect.mNPDT.mAffectedActorId.mData, effect.mNPDT.mUnknown, effect.mNPDT.mMagnitude,
                    effect.mNPDT.mSecondsActive, effect.mNPDT.mUnknown2);

                // Effect-specific subrecords can follow:
                // - INAM for disintegration and bound effects
                // - CNAM for summoning and command effects
                // - VNAM for vampirism
                // NOTE: There can be multiple INAMs per effect.
                // TODO: Needs more research.

                esm.skipHSubUntil("NAM0"); // sentinel
                esm.getSubName();
                esm.skipHSub();

                spell.mActiveEffects.push_back(effect);
            }

            unsigned char xnam; // sentinel
            esm.getHNT(xnam, "XNAM");

            mActiveSpells.push_back(spell);
        }
    }

}