Merge remote-tracking branch 'scrawl/master'
commit
b44fc1904b
@ -0,0 +1,32 @@
|
|||||||
|
#include "convertscri.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
template <typename T, ESM::VarType VariantType>
|
||||||
|
void storeVariables(const std::vector<T>& variables, ESM::Locals& locals, const std::string& scriptname)
|
||||||
|
{
|
||||||
|
for (typename std::vector<T>::const_iterator it = variables.begin(); it != variables.end(); ++it)
|
||||||
|
{
|
||||||
|
ESM::Variant val(*it);
|
||||||
|
val.setType(VariantType);
|
||||||
|
locals.mVariables.push_back(std::make_pair(std::string(), val));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
void convertSCRI(const SCRI &scri, ESM::Locals &locals)
|
||||||
|
{
|
||||||
|
// order *is* important, as we do not have variable names available in this format
|
||||||
|
storeVariables<short, ESM::VT_Short> (scri.mShorts, locals, scri.mScript);
|
||||||
|
storeVariables<int, ESM::VT_Int> (scri.mLongs, locals, scri.mScript);
|
||||||
|
storeVariables<float, ESM::VT_Float> (scri.mFloats, locals, scri.mScript);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef OPENMW_ESSIMPORT_CONVERTSCRI_H
|
||||||
|
#define OPENMW_ESSIMPORT_CONVERTSCRI_H
|
||||||
|
|
||||||
|
#include "importscri.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/locals.hpp>
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
/// Convert script variable assignments
|
||||||
|
void convertSCRI (const SCRI& scri, ESM::Locals& locals);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,23 @@
|
|||||||
|
#include "importdial.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/esmreader.hpp>
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
void DIAL::load(ESM::ESMReader &esm)
|
||||||
|
{
|
||||||
|
// See ESM::Dialogue::Type enum, not sure why we would need this here though
|
||||||
|
int type = 0;
|
||||||
|
esm.getHNOT(type, "DATA");
|
||||||
|
|
||||||
|
// Deleted dialogue in a savefile. No clue what this means...
|
||||||
|
int deleted = 0;
|
||||||
|
esm.getHNOT(deleted, "DELE");
|
||||||
|
|
||||||
|
mIndex = 0;
|
||||||
|
// *should* always occur except when the dialogue is deleted, but leaving it optional just in case...
|
||||||
|
esm.getHNOT(mIndex, "XIDX");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef OPENMW_ESSIMPORT_IMPORTDIAL_H
|
||||||
|
#define OPENMW_ESSIMPORT_IMPORTDIAL_H
|
||||||
|
namespace ESM
|
||||||
|
{
|
||||||
|
struct ESMReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
struct DIAL
|
||||||
|
{
|
||||||
|
int mIndex; // Journal index
|
||||||
|
|
||||||
|
void load(ESM::ESMReader& esm);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,13 @@
|
|||||||
|
#include "importgame.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/esmreader.hpp>
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
void GAME::load(ESM::ESMReader &esm)
|
||||||
|
{
|
||||||
|
esm.getHNT(mGMDT, "GMDT");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef OPENMW_ESSIMPORT_GAME_H
|
||||||
|
#define OPENMW_ESSIMPORT_GAME_H
|
||||||
|
|
||||||
|
namespace ESM
|
||||||
|
{
|
||||||
|
class ESMReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
/// Weather data
|
||||||
|
struct GAME
|
||||||
|
{
|
||||||
|
struct GMDT
|
||||||
|
{
|
||||||
|
char mCellName[64];
|
||||||
|
int mFogColour;
|
||||||
|
float mFogDensity;
|
||||||
|
int mCurrentWeather, mNextWeather;
|
||||||
|
int mWeatherTransition; // 0-100 transition between weathers, top 3 bytes may be garbage
|
||||||
|
float mTimeOfNextTransition; // weather changes when gamehour == timeOfNextTransition
|
||||||
|
int masserPhase, secundaPhase; // top 3 bytes may be garbage
|
||||||
|
};
|
||||||
|
|
||||||
|
GMDT mGMDT;
|
||||||
|
|
||||||
|
void load(ESM::ESMReader& esm);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,14 @@
|
|||||||
|
#include "importinfo.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/esmreader.hpp>
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
void INFO::load(ESM::ESMReader &esm)
|
||||||
|
{
|
||||||
|
mInfo = esm.getHNString("INAM");
|
||||||
|
mActorRefId = esm.getHNString("ACDT");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef OPENMW_ESSIMPORT_IMPORTINFO_H
|
||||||
|
#define OPENMW_ESSIMPORT_IMPORTINFO_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace ESM
|
||||||
|
{
|
||||||
|
struct ESMReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
struct INFO
|
||||||
|
{
|
||||||
|
std::string mInfo;
|
||||||
|
std::string mActorRefId;
|
||||||
|
|
||||||
|
void load(ESM::ESMReader& esm);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,13 @@
|
|||||||
|
#include "importjour.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/esmreader.hpp>
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
void JOUR::load(ESM::ESMReader &esm)
|
||||||
|
{
|
||||||
|
mText = esm.getHNString("NAME");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef OPENMW_ESSIMPORT_IMPORTJOUR_H
|
||||||
|
#define OPENMW_ESSIMPORT_IMPORTJOUR_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace ESM
|
||||||
|
{
|
||||||
|
struct ESMReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
/// Journal
|
||||||
|
struct JOUR
|
||||||
|
{
|
||||||
|
// The entire journal, in HTML
|
||||||
|
std::string mText;
|
||||||
|
|
||||||
|
void load(ESM::ESMReader& esm);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,14 @@
|
|||||||
|
#include "importques.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/esmreader.hpp>
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
void QUES::load(ESM::ESMReader &esm)
|
||||||
|
{
|
||||||
|
while (esm.isNextSub("DATA"))
|
||||||
|
mInfo.push_back(esm.getHString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef OPENMW_ESSIMPORT_IMPORTQUES_H
|
||||||
|
#define OPENMW_ESSIMPORT_IMPORTQUES_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace ESM
|
||||||
|
{
|
||||||
|
struct ESMReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
/// State for a quest
|
||||||
|
/// Presumably this record only exists when Tribunal is installed,
|
||||||
|
/// since pre-Tribunal there weren't any quest names in the data files.
|
||||||
|
struct QUES
|
||||||
|
{
|
||||||
|
std::string mName; // NAME, should be assigned from outside as usual
|
||||||
|
std::vector<std::string> mInfo; // list of journal entries for the quest
|
||||||
|
|
||||||
|
void load(ESM::ESMReader& esm);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,20 @@
|
|||||||
|
#include "importscpt.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/esmreader.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
void SCPT::load(ESM::ESMReader &esm)
|
||||||
|
{
|
||||||
|
esm.getHNT(mSCHD, "SCHD");
|
||||||
|
|
||||||
|
mSCRI.load(esm);
|
||||||
|
|
||||||
|
mRNAM = -1;
|
||||||
|
esm.getHNOT(mRNAM, "RNAM");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
#ifndef OPENMW_ESSIMPORT_IMPORTSCPT_H
|
||||||
|
#define OPENMW_ESSIMPORT_IMPORTSCPT_H
|
||||||
|
|
||||||
|
#include "importscri.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/loadscpt.hpp>
|
||||||
|
|
||||||
|
namespace ESM
|
||||||
|
{
|
||||||
|
class ESMReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
// A running global script
|
||||||
|
// TODO: test how targeted scripts are saved
|
||||||
|
struct SCPT
|
||||||
|
{
|
||||||
|
ESM::Script::SCHD mSCHD;
|
||||||
|
|
||||||
|
// values of local variables
|
||||||
|
SCRI mSCRI;
|
||||||
|
|
||||||
|
int mRNAM; // unknown, seems to be -1 for some scripts, some huge integer for others
|
||||||
|
|
||||||
|
void load(ESM::ESMReader& esm);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,55 @@
|
|||||||
|
#include "importscri.hpp"
|
||||||
|
|
||||||
|
#include <components/esm/esmreader.hpp>
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
void SCRI::load(ESM::ESMReader &esm)
|
||||||
|
{
|
||||||
|
mScript = esm.getHNOString("SCRI");
|
||||||
|
|
||||||
|
int numShorts = 0, numLongs = 0, numFloats = 0;
|
||||||
|
if (esm.isNextSub("SLCS"))
|
||||||
|
{
|
||||||
|
esm.getSubHeader();
|
||||||
|
esm.getT(numShorts);
|
||||||
|
esm.getT(numLongs);
|
||||||
|
esm.getT(numFloats);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (esm.isNextSub("SLSD"))
|
||||||
|
{
|
||||||
|
esm.getSubHeader();
|
||||||
|
for (int i=0; i<numShorts; ++i)
|
||||||
|
{
|
||||||
|
short val;
|
||||||
|
esm.getT(val);
|
||||||
|
mShorts.push_back(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// I haven't seen Longs in a save file yet, but SLLD would make sense for the name
|
||||||
|
// TODO: test this
|
||||||
|
if (esm.isNextSub("SLLD"))
|
||||||
|
{
|
||||||
|
esm.getSubHeader();
|
||||||
|
for (int i=0; i<numLongs; ++i)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
esm.getT(val);
|
||||||
|
mLongs.push_back(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (esm.isNextSub("SLFD"))
|
||||||
|
{
|
||||||
|
esm.getSubHeader();
|
||||||
|
for (int i=0; i<numFloats; ++i)
|
||||||
|
{
|
||||||
|
float val;
|
||||||
|
esm.getT(val);
|
||||||
|
mFloats.push_back(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef OPENMW_ESSIMPORT_IMPORTSCRI_H
|
||||||
|
#define OPENMW_ESSIMPORT_IMPORTSCRI_H
|
||||||
|
|
||||||
|
#include <components/esm/variant.hpp>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace ESM
|
||||||
|
{
|
||||||
|
class ESMReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ESSImport
|
||||||
|
{
|
||||||
|
|
||||||
|
/// Local variable assigments for a running script
|
||||||
|
struct SCRI
|
||||||
|
{
|
||||||
|
std::string mScript;
|
||||||
|
|
||||||
|
std::vector<short> mShorts;
|
||||||
|
std::vector<int> mLongs;
|
||||||
|
std::vector<float> mFloats;
|
||||||
|
|
||||||
|
void load(ESM::ESMReader& esm);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue