File: loadtes3.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 (82 lines) | stat: -rw-r--r-- 2,315 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "loadtes3.hpp"

#include "components/esm/esmcommon.hpp"
#include "esmreader.hpp"
#include "esmwriter.hpp"

namespace ESM
{

    void Header::blank()
    {
        mData.version.ui = VER_130;
        mData.type = 0;
        mData.author.clear();
        mData.desc.clear();
        mData.records = 0;
        mFormatVersion = CurrentContentFormatVersion;
        mMaster.clear();
    }

    void Header::load(ESMReader& esm)
    {
        mFormatVersion = DefaultFormatVersion;
        esm.getHNOT("FORM", mFormatVersion);

        if (esm.isNextSub("HEDR"))
        {
            esm.getSubHeader();
            esm.getT(mData.version.ui);
            esm.getT(mData.type);
            mData.author = esm.getMaybeFixedStringSize(32);
            mData.desc = esm.getMaybeFixedStringSize(256);
            esm.getT(mData.records);
        }

        while (esm.isNextSub("MAST"))
        {
            MasterData m;
            m.name = esm.getHString();
            esm.getHNT(m.size, "DATA");
            mMaster.push_back(m);
        }

        esm.getHNOT("GMDT", mGameData.mCurrentHealth, mGameData.mMaximumHealth, mGameData.mHour, mGameData.unknown1,
            mGameData.mCurrentCell.mData, mGameData.unknown2, mGameData.mPlayerName.mData);
        if (esm.isNextSub("SCRD"))
        {
            esm.getSubHeader();
            mSCRD.resize(esm.getSubSize());
            if (!mSCRD.empty())
                esm.getExact(mSCRD.data(), mSCRD.size());
        }
        if (esm.isNextSub("SCRS"))
        {
            esm.getSubHeader();
            mSCRS.resize(esm.getSubSize());
            if (!mSCRS.empty())
                esm.getExact(mSCRS.data(), mSCRS.size());
        }
    }

    void Header::save(ESMWriter& esm)
    {
        if (mFormatVersion > DefaultFormatVersion)
            esm.writeHNT("FORM", mFormatVersion);

        esm.startSubRecord("HEDR");
        esm.writeT(mData.version);
        esm.writeT(mData.type);
        esm.writeMaybeFixedSizeString(mData.author, 32);
        esm.writeMaybeFixedSizeString(mData.desc, 256);
        esm.writeT(mData.records);
        esm.endRecord("HEDR");

        for (const Header::MasterData& data : mMaster)
        {
            esm.writeHNCString("MAST", data.name);
            esm.writeHNT("DATA", data.size);
        }
    }

}