mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-16 17:29:55 +00:00
Import teleporting and levitation disabled state from vanilla savegames (Fixes #3420)
This commit is contained in:
parent
f3ce0840be
commit
cd9de94c0c
4 changed files with 20 additions and 5 deletions
|
@ -271,23 +271,34 @@ private:
|
||||||
class ConvertPCDT : public Converter
|
class ConvertPCDT : public Converter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ConvertPCDT() : mFirstPersonCam(true) {}
|
ConvertPCDT()
|
||||||
|
: mFirstPersonCam(true),
|
||||||
|
mTeleportingEnabled(true),
|
||||||
|
mLevitationEnabled(true)
|
||||||
|
{}
|
||||||
|
|
||||||
virtual void read(ESM::ESMReader &esm)
|
virtual void read(ESM::ESMReader &esm)
|
||||||
{
|
{
|
||||||
PCDT pcdt;
|
PCDT pcdt;
|
||||||
pcdt.load(esm);
|
pcdt.load(esm);
|
||||||
|
|
||||||
convertPCDT(pcdt, mContext->mPlayer, mContext->mDialogueState.mKnownTopics, mFirstPersonCam, mContext->mControlsState);
|
convertPCDT(pcdt, mContext->mPlayer, mContext->mDialogueState.mKnownTopics, mFirstPersonCam, mTeleportingEnabled, mLevitationEnabled, mContext->mControlsState);
|
||||||
}
|
}
|
||||||
virtual void write(ESM::ESMWriter &esm)
|
virtual void write(ESM::ESMWriter &esm)
|
||||||
{
|
{
|
||||||
|
esm.startRecord(ESM::REC_ENAB);
|
||||||
|
esm.writeHNT("TELE", mTeleportingEnabled);
|
||||||
|
esm.writeHNT("LEVT", mLevitationEnabled);
|
||||||
|
esm.endRecord(ESM::REC_ENAB);
|
||||||
|
|
||||||
esm.startRecord(ESM::REC_CAM_);
|
esm.startRecord(ESM::REC_CAM_);
|
||||||
esm.writeHNT("FIRS", mFirstPersonCam);
|
esm.writeHNT("FIRS", mFirstPersonCam);
|
||||||
esm.endRecord(ESM::REC_CAM_);
|
esm.endRecord(ESM::REC_CAM_);
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
bool mFirstPersonCam;
|
bool mFirstPersonCam;
|
||||||
|
bool mTeleportingEnabled;
|
||||||
|
bool mLevitationEnabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConvertCNTC : public Converter
|
class ConvertCNTC : public Converter
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
namespace ESSImport
|
namespace ESSImport
|
||||||
{
|
{
|
||||||
|
|
||||||
void convertPCDT(const PCDT& pcdt, ESM::Player& out, std::vector<std::string>& outDialogueTopics, bool& firstPersonCam, ESM::ControlsState& controls)
|
void convertPCDT(const PCDT& pcdt, ESM::Player& out, std::vector<std::string>& outDialogueTopics, bool& firstPersonCam, bool& teleportingEnabled, bool& levitationEnabled, ESM::ControlsState& controls)
|
||||||
{
|
{
|
||||||
out.mBirthsign = pcdt.mBirthsign;
|
out.mBirthsign = pcdt.mBirthsign;
|
||||||
out.mObject.mNpcStats.mBounty = pcdt.mBounty;
|
out.mObject.mNpcStats.mBounty = pcdt.mBounty;
|
||||||
|
@ -31,6 +31,8 @@ namespace ESSImport
|
||||||
out.mObject.mCreatureStats.mDrawState = 2;
|
out.mObject.mCreatureStats.mDrawState = 2;
|
||||||
|
|
||||||
firstPersonCam = !(pcdt.mPNAM.mPlayerFlags & PCDT::PlayerFlags_ThirdPerson);
|
firstPersonCam = !(pcdt.mPNAM.mPlayerFlags & PCDT::PlayerFlags_ThirdPerson);
|
||||||
|
teleportingEnabled = !(pcdt.mPNAM.mPlayerFlags & PCDT::PlayerFlags_TeleportingDisabled);
|
||||||
|
levitationEnabled = !(pcdt.mPNAM.mPlayerFlags & PCDT::PlayerFlags_LevitationDisabled);
|
||||||
|
|
||||||
for (std::vector<std::string>::const_iterator it = pcdt.mKnownDialogueTopics.begin();
|
for (std::vector<std::string>::const_iterator it = pcdt.mKnownDialogueTopics.begin();
|
||||||
it != pcdt.mKnownDialogueTopics.end(); ++it)
|
it != pcdt.mKnownDialogueTopics.end(); ++it)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
namespace ESSImport
|
namespace ESSImport
|
||||||
{
|
{
|
||||||
|
|
||||||
void convertPCDT(const PCDT& pcdt, ESM::Player& out, std::vector<std::string>& outDialogueTopics, bool& firstPersonCam, ESM::ControlsState& controls);
|
void convertPCDT(const PCDT& pcdt, ESM::Player& out, std::vector<std::string>& outDialogueTopics, bool& firstPersonCam, bool& teleportingEnabled, bool& levitationEnabled, ESM::ControlsState& controls);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,9 @@ struct PCDT
|
||||||
PlayerFlags_VanityModeDisabled = 0x4000,
|
PlayerFlags_VanityModeDisabled = 0x4000,
|
||||||
PlayerFlags_WeaponDrawingDisabled = 0x8000,
|
PlayerFlags_WeaponDrawingDisabled = 0x8000,
|
||||||
PlayerFlags_SpellDrawingDisabled = 0x10000,
|
PlayerFlags_SpellDrawingDisabled = 0x10000,
|
||||||
PlayerFlags_ThirdPerson = 0x20000
|
PlayerFlags_ThirdPerson = 0x20000,
|
||||||
|
PlayerFlags_TeleportingDisabled = 0x40000,
|
||||||
|
PlayerFlags_LevitationDisabled = 0x80000
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma pack(push)
|
#pragma pack(push)
|
||||||
|
|
Loading…
Reference in a new issue