From c4038f7021040a8483b8752e0e53053e3e0d7f10 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 30 Jan 2015 23:10:39 +0100 Subject: [PATCH] ESSImport: convert camera first/third person state --- apps/essimporter/converter.hpp | 12 +++++++++++- apps/essimporter/convertplayer.cpp | 4 +++- apps/essimporter/convertplayer.hpp | 2 +- apps/essimporter/importplayer.hpp | 8 +++++++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/apps/essimporter/converter.hpp b/apps/essimporter/converter.hpp index bbafd5ba9..80b8e2e3b 100644 --- a/apps/essimporter/converter.hpp +++ b/apps/essimporter/converter.hpp @@ -261,13 +261,23 @@ private: class ConvertPCDT : public Converter { public: + ConvertPCDT() : mFirstPersonCam(true) {} + virtual void read(ESM::ESMReader &esm) { PCDT pcdt; pcdt.load(esm); - convertPCDT(pcdt, mContext->mPlayer, mContext->mDialogueState.mKnownTopics); + convertPCDT(pcdt, mContext->mPlayer, mContext->mDialogueState.mKnownTopics, mFirstPersonCam); } + virtual void write(ESM::ESMWriter &esm) + { + esm.startRecord(ESM::REC_CAM_); + esm.writeHNT("FIRS", mFirstPersonCam); + esm.endRecord(ESM::REC_CAM_); + } +private: + bool mFirstPersonCam; }; class ConvertCNTC : public Converter diff --git a/apps/essimporter/convertplayer.cpp b/apps/essimporter/convertplayer.cpp index fb225284e..19cec2a28 100644 --- a/apps/essimporter/convertplayer.cpp +++ b/apps/essimporter/convertplayer.cpp @@ -3,7 +3,7 @@ namespace ESSImport { - void convertPCDT(const PCDT& pcdt, ESM::Player& out, std::vector& outDialogueTopics) + void convertPCDT(const PCDT& pcdt, ESM::Player& out, std::vector& outDialogueTopics, bool& firstPersonCam) { out.mBirthsign = pcdt.mBirthsign; out.mObject.mNpcStats.mBounty = pcdt.mBounty; @@ -24,6 +24,8 @@ namespace ESSImport if (pcdt.mPNAM.mDrawState & PCDT::DrawState_Spell) out.mObject.mCreatureStats.mDrawState = 2; + firstPersonCam = (pcdt.mPNAM.mCameraState == PCDT::CameraState_FirstPerson); + for (std::vector::const_iterator it = pcdt.mKnownDialogueTopics.begin(); it != pcdt.mKnownDialogueTopics.end(); ++it) { diff --git a/apps/essimporter/convertplayer.hpp b/apps/essimporter/convertplayer.hpp index a4541c7aa..f6731eed7 100644 --- a/apps/essimporter/convertplayer.hpp +++ b/apps/essimporter/convertplayer.hpp @@ -8,7 +8,7 @@ namespace ESSImport { - void convertPCDT(const PCDT& pcdt, ESM::Player& out, std::vector& outDialogueTopics); + void convertPCDT(const PCDT& pcdt, ESM::Player& out, std::vector& outDialogueTopics, bool& firstPersonCam); } diff --git a/apps/essimporter/importplayer.hpp b/apps/essimporter/importplayer.hpp index fb2cb95fd..4e68834cf 100644 --- a/apps/essimporter/importplayer.hpp +++ b/apps/essimporter/importplayer.hpp @@ -43,6 +43,11 @@ struct PCDT DrawState_Weapon = 0x80, DrawState_Spell = 0x100 }; + enum CameraState + { + CameraState_FirstPerson = 0x8, + CameraState_ThirdPerson = 0xa + }; #pragma pack(push) #pragma pack(1) @@ -58,7 +63,8 @@ struct PCDT struct PNAM { - int mDrawState; // DrawState + short mDrawState; // DrawState + short mCameraState; // CameraState unsigned char mLevelProgress; unsigned char mUnknown2[111]; unsigned char mSkillIncreases[8]; // number of skill increases for each attribute