mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-21 09:39:41 +00:00
added optional format sub-record to tes3 record
This commit is contained in:
parent
16570ce87b
commit
75bd30844d
7 changed files with 36 additions and 1 deletions
|
@ -426,6 +426,7 @@ int clone(Arguments& info)
|
||||||
esm.setAuthor(info.data.author);
|
esm.setAuthor(info.data.author);
|
||||||
esm.setDescription(info.data.description);
|
esm.setDescription(info.data.description);
|
||||||
esm.setVersion(info.data.version);
|
esm.setVersion(info.data.version);
|
||||||
|
esm.setRecordCount (recordCount);
|
||||||
|
|
||||||
for (std::vector<ESM::Header::MasterData>::iterator it = info.data.masters.begin(); it != info.data.masters.end(); ++it)
|
for (std::vector<ESM::Header::MasterData>::iterator it = info.data.masters.begin(); it != info.data.masters.end(); ++it)
|
||||||
esm.addMaster(it->name, it->size);
|
esm.addMaster(it->name, it->size);
|
||||||
|
|
|
@ -15,11 +15,16 @@ ESM_Context ESMReader::getContext()
|
||||||
return mCtx;
|
return mCtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
ESMReader::ESMReader(void):
|
ESMReader::ESMReader():
|
||||||
mBuffer(50*1024)
|
mBuffer(50*1024)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ESMReader::getFormat() const
|
||||||
|
{
|
||||||
|
return mHeader.mFormat;
|
||||||
|
}
|
||||||
|
|
||||||
void ESMReader::restoreContext(const ESM_Context &rc)
|
void ESMReader::restoreContext(const ESM_Context &rc)
|
||||||
{
|
{
|
||||||
// Reopen the file if necessary
|
// Reopen the file if necessary
|
||||||
|
|
|
@ -35,6 +35,7 @@ public:
|
||||||
const std::string getAuthor() const { return mHeader.mData.author.toString(); }
|
const std::string getAuthor() const { return mHeader.mData.author.toString(); }
|
||||||
const std::string getDesc() const { return mHeader.mData.desc.toString(); }
|
const std::string getDesc() const { return mHeader.mData.desc.toString(); }
|
||||||
const std::vector<Header::MasterData> &getMasters() const { return mHeader.mMaster; }
|
const std::vector<Header::MasterData> &getMasters() const { return mHeader.mMaster; }
|
||||||
|
int getFormat() const;
|
||||||
const NAME &retSubName() const { return mCtx.subName; }
|
const NAME &retSubName() const { return mCtx.subName; }
|
||||||
uint32_t getSubSize() const { return mCtx.leftSub; }
|
uint32_t getSubSize() const { return mCtx.leftSub; }
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,16 @@ void ESMWriter::setDescription(const std::string& desc)
|
||||||
mHeader.mData.desc.assign (desc);
|
mHeader.mData.desc.assign (desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ESMWriter::setRecordCount (int count)
|
||||||
|
{
|
||||||
|
mHeader.mData.records = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ESMWriter::setFormat (int format)
|
||||||
|
{
|
||||||
|
mHeader.mFormat = format;
|
||||||
|
}
|
||||||
|
|
||||||
void ESMWriter::addMaster(const std::string& name, uint64_t size)
|
void ESMWriter::addMaster(const std::string& name, uint64_t size)
|
||||||
{
|
{
|
||||||
Header::MasterData d;
|
Header::MasterData d;
|
||||||
|
|
|
@ -26,6 +26,8 @@ public:
|
||||||
void setEncoder(ToUTF8::Utf8Encoder *encoding); // Write strings as UTF-8?
|
void setEncoder(ToUTF8::Utf8Encoder *encoding); // Write strings as UTF-8?
|
||||||
void setAuthor(const std::string& author);
|
void setAuthor(const std::string& author);
|
||||||
void setDescription(const std::string& desc);
|
void setDescription(const std::string& desc);
|
||||||
|
void setRecordCount (int count);
|
||||||
|
void setFormat (int format);
|
||||||
|
|
||||||
void addMaster(const std::string& name, uint64_t size);
|
void addMaster(const std::string& name, uint64_t size);
|
||||||
|
|
||||||
|
|
|
@ -12,12 +12,22 @@ void ESM::Header::blank()
|
||||||
mData.author.assign ("");
|
mData.author.assign ("");
|
||||||
mData.desc.assign ("");
|
mData.desc.assign ("");
|
||||||
mData.records = 0;
|
mData.records = 0;
|
||||||
|
mFormat = CurrentFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESM::Header::load (ESMReader &esm)
|
void ESM::Header::load (ESMReader &esm)
|
||||||
{
|
{
|
||||||
esm.getHNT (mData, "HEDR", 300);
|
esm.getHNT (mData, "HEDR", 300);
|
||||||
|
|
||||||
|
if (esm.isNextSub ("FORM"))
|
||||||
|
{
|
||||||
|
esm.getHT (mFormat);
|
||||||
|
if (mFormat<0)
|
||||||
|
esm.fail ("invalid format code");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mFormat = 0;
|
||||||
|
|
||||||
while (esm.isNextSub ("MAST"))
|
while (esm.isNextSub ("MAST"))
|
||||||
{
|
{
|
||||||
MasterData m;
|
MasterData m;
|
||||||
|
@ -31,6 +41,9 @@ void ESM::Header::save (ESMWriter &esm)
|
||||||
{
|
{
|
||||||
esm.writeHNT ("HEDR", mData, 300);
|
esm.writeHNT ("HEDR", mData, 300);
|
||||||
|
|
||||||
|
if (mFormat>0)
|
||||||
|
esm.writeHNT ("FORM", mFormat);
|
||||||
|
|
||||||
for (std::vector<Header::MasterData>::iterator iter = mMaster.begin();
|
for (std::vector<Header::MasterData>::iterator iter = mMaster.begin();
|
||||||
iter != mMaster.end(); ++iter)
|
iter != mMaster.end(); ++iter)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,6 +16,8 @@ namespace ESM
|
||||||
/// \brief File header record
|
/// \brief File header record
|
||||||
struct Header
|
struct Header
|
||||||
{
|
{
|
||||||
|
static const int CurrentFormat = 0; // most recent known format
|
||||||
|
|
||||||
struct Data
|
struct Data
|
||||||
{
|
{
|
||||||
/* File format version. This is actually a float, the supported
|
/* File format version. This is actually a float, the supported
|
||||||
|
@ -38,6 +40,7 @@ namespace ESM
|
||||||
};
|
};
|
||||||
|
|
||||||
Data mData;
|
Data mData;
|
||||||
|
int mFormat;
|
||||||
std::vector<MasterData> mMaster;
|
std::vector<MasterData> mMaster;
|
||||||
|
|
||||||
void blank();
|
void blank();
|
||||||
|
|
Loading…
Reference in a new issue