Browse Source

Introduce template form of skip to represent deprecated variables (#2309)

pull/2312/head
Andrew James 5 years ago committed by GitHub
parent
commit
c7e3bb4ae7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 64
      Source/loadsave.cpp

64
Source/loadsave.cpp

@ -70,7 +70,7 @@ T SwapBE(T in)
class LoadHelper {
std::unique_ptr<byte[]> m_buffer_;
uint32_t m_cur_ = 0;
size_t m_cur_ = 0;
size_t m_size_;
template <class T>
@ -93,13 +93,19 @@ public:
m_buffer_ = pfile_read(szFileName, &m_size_);
}
bool IsValid(uint32_t size = 1)
bool IsValid(size_t size = 1)
{
return m_buffer_ != nullptr
&& m_size_ >= (m_cur_ + size);
}
void Skip(uint32_t size)
template<typename T>
constexpr void Skip()
{
Skip(sizeof(T));
}
void Skip(size_t size)
{
m_cur_ += size;
}
@ -139,8 +145,8 @@ public:
class SaveHelper {
const char *m_szFileName_;
std::unique_ptr<byte[]> m_buffer_;
uint32_t m_cur_ = 0;
uint32_t m_capacity_;
size_t m_cur_ = 0;
size_t m_capacity_;
public:
SaveHelper(const char *szFileName, size_t bufferLen)
@ -150,13 +156,19 @@ public:
{
}
bool IsValid(uint32_t len = 1)
bool IsValid(size_t len = 1)
{
return m_buffer_ != nullptr
&& m_capacity_ >= (m_cur_ + len);
}
void Skip(uint32_t len)
template<typename T>
constexpr void Skip()
{
Skip(sizeof(T));
}
void Skip(size_t len)
{
std::memset(&m_buffer_[m_cur_], 0, len);
m_cur_ += len;
@ -360,13 +372,13 @@ static void LoadPlayer(LoadHelper *file, int p)
player._pSplFrom = file->NextLE<int8_t>();
file->Skip(2); // Alignment
player._pTSpell = static_cast<spell_id>(file->NextLE<int32_t>());
file->Skip(sizeof(int8_t)); // Skip _pTSplType
file->Skip<int8_t>(); // Skip _pTSplType
file->Skip(3); // Alignment
player._pRSpell = static_cast<spell_id>(file->NextLE<int32_t>());
player._pRSplType = static_cast<spell_type>(file->NextLE<int8_t>());
file->Skip(3); // Alignment
player._pSBkSpell = static_cast<spell_id>(file->NextLE<int32_t>());
file->Skip(sizeof(int8_t)); // Skip _pSBkSplType
file->Skip<int8_t>(); // Skip _pSBkSplType
for (int8_t &spellLevel : player._pSplLvl)
spellLevel = file->NextLE<int8_t>();
file->Skip(7); // Alignment
@ -1298,7 +1310,7 @@ static void SaveItem(SaveHelper *file, ItemStruct *pItem)
file->WriteLE<int32_t>(ItemAnimWidth);
// write _iAnimWidth2 for vanilla compatibility
file->WriteLE<int32_t>(CalculateWidth2(ItemAnimWidth));
file->Skip(4); // Unused since 1.02
file->Skip<uint32_t>(); // _delFlag, unused since 1.02
file->WriteLE<uint8_t>(pItem->_iSelFlag);
file->Skip(3); // Alignment
file->WriteLE<uint32_t>(pItem->_iPostDraw ? 1 : 0);
@ -1417,7 +1429,7 @@ static void SavePlayer(SaveHelper *file, int p)
file->WriteLE<int32_t>(animWidth);
// write _pAnimWidth2 for vanilla compatibility
file->WriteLE<int32_t>(CalculateWidth2(animWidth));
file->Skip(4); // Skip _peflag
file->Skip<uint32_t>(); // Skip _peflag
file->WriteLE<int32_t>(player._plid);
file->WriteLE<int32_t>(player._pvid);
@ -1426,13 +1438,13 @@ static void SavePlayer(SaveHelper *file, int p)
file->WriteLE<int8_t>(player._pSplFrom);
file->Skip(2); // Alignment
file->WriteLE<int32_t>(player._pTSpell);
file->Skip(sizeof(int8_t)); // Skip _pTSplType
file->Skip(3); // Alignment
file->Skip<int8_t>(); // Skip _pTSplType
file->Skip(3); // Alignment
file->WriteLE<int32_t>(player._pRSpell);
file->WriteLE<int8_t>(player._pRSplType);
file->Skip(3); // Alignment
file->WriteLE<int32_t>(player._pSBkSpell);
file->Skip(sizeof(int8_t)); // Skip _pSBkSplType
file->Skip<int8_t>(); // Skip _pSBkSplType
for (int8_t spellLevel : player._pSplLvl)
file->WriteLE<int8_t>(spellLevel);
file->Skip(7); // Alignment
@ -1471,12 +1483,12 @@ static void SavePlayer(SaveHelper *file, int p)
file->WriteLE<int32_t>(player._pMaxHPBase);
file->WriteLE<int32_t>(player._pHitPoints);
file->WriteLE<int32_t>(player._pMaxHP);
file->Skip(sizeof(int32_t)); // Skip _pHPPer
file->Skip<int32_t>(); // Skip _pHPPer
file->WriteLE<int32_t>(player._pManaBase);
file->WriteLE<int32_t>(player._pMaxManaBase);
file->WriteLE<int32_t>(player._pMana);
file->WriteLE<int32_t>(player._pMaxMana);
file->Skip(sizeof(int32_t)); // Skip _pManaPer
file->Skip<int32_t>(); // Skip _pManaPer
file->WriteLE<int8_t>(player._pLevel);
file->WriteLE<int8_t>(player._pMaxLvl);
file->Skip(2); // Alignment
@ -1497,8 +1509,7 @@ static void SavePlayer(SaveHelper *file, int p)
file->WriteLE<int32_t>(player._pVar5);
file->WriteLE<int32_t>(player.position.offset2.deltaX);
file->WriteLE<int32_t>(player.position.offset2.deltaY);
// Write actionFrame for vanilla compatibility
file->WriteLE<int32_t>(0);
file->Skip<int32_t>(); // Skip _pVar8
for (uint8_t i = 0; i < giNumberOfLevels; i++)
file->WriteLE<uint8_t>(player._pLvlVisited[i] ? 1 : 0);
for (uint8_t i = 0; i < giNumberOfLevels; i++)
@ -1506,8 +1517,7 @@ static void SavePlayer(SaveHelper *file, int p)
file->Skip(2); // Alignment
// Write _pGFXLoad for vanilla compatibility
file->WriteLE<int32_t>(0);
file->Skip<int32_t>(); // Skip _pGFXLoad
file->Skip(4 * 8); // Skip pointers _pNAnim
file->WriteLE<int32_t>(player._pNFrames);
file->Skip(4); // Skip _pNWidth
@ -1556,7 +1566,7 @@ static void SavePlayer(SaveHelper *file, int p)
file->WriteLE<int32_t>(player._pIGetHit);
file->WriteLE<int8_t>(player._pISplLvlAdd);
file->Skip(1); // Unused
file->Skip<uint8_t>(); // Skip _pISplCost
file->Skip(2); // Alignment
file->WriteLE<int32_t>(player._pISplDur);
file->WriteLE<int32_t>(player._pIEnAc);
@ -1630,7 +1640,7 @@ static void SaveMonster(SaveHelper *file, int i)
file->WriteLE<int32_t>(pMonster->AnimInfo.TickCounterOfCurrentFrame);
file->WriteLE<int32_t>(pMonster->AnimInfo.NumberOfFrames);
file->WriteLE<int32_t>(pMonster->AnimInfo.CurrentFrame);
file->Skip(4); // Skip _meflag
file->Skip<uint32_t>(); // Skip _meflag
file->WriteLE<uint32_t>(pMonster->_mDelFlag ? 1 : 0);
file->WriteLE<int32_t>(pMonster->_mVar1);
file->WriteLE<int32_t>(pMonster->_mVar2);
@ -1639,8 +1649,7 @@ static void SaveMonster(SaveHelper *file, int i)
file->WriteLE<int32_t>(pMonster->position.temp.y);
file->WriteLE<int32_t>(pMonster->position.offset2.deltaX);
file->WriteLE<int32_t>(pMonster->position.offset2.deltaY);
// Write actionFrame for vanilla compatibility
file->WriteLE<int32_t>(0);
file->Skip<int32_t>(); // Skip _mVar8
file->WriteLE<int32_t>(pMonster->_mmaxhp);
file->WriteLE<int32_t>(pMonster->_mhitpoints);
@ -1666,10 +1675,10 @@ static void SaveMonster(SaveHelper *file, int i)
file->Skip(1); // Alignment
file->WriteLE<uint16_t>(pMonster->mExp);
file->WriteLE<uint8_t>(pMonster->mHit < UINT8_MAX ? pMonster->mHit : UINT8_MAX); // For backwards compatibility
file->WriteLE<uint8_t>(std::min<uint16_t>(pMonster->mHit, std::numeric_limits<uint8_t>::max())); // For backwards compatibility
file->WriteLE<uint8_t>(pMonster->mMinDamage);
file->WriteLE<uint8_t>(pMonster->mMaxDamage);
file->WriteLE<uint8_t>(pMonster->mHit2 < UINT8_MAX ? pMonster->mHit2 : UINT8_MAX); // For backwards compatibility
file->WriteLE<uint8_t>(std::min<uint16_t>(pMonster->mHit2, std::numeric_limits<uint8_t>::max())); // For backwards compatibility
file->WriteLE<uint8_t>(pMonster->mMinDamage2);
file->WriteLE<uint8_t>(pMonster->mMaxDamage2);
file->WriteLE<uint8_t>(pMonster->mArmorClass);
@ -1754,8 +1763,7 @@ static void SaveObject(SaveHelper *file, int i)
file->WriteLE<uint32_t>(pObject->_oAnimLen);
file->WriteLE<uint32_t>(pObject->_oAnimFrame);
file->WriteLE<int32_t>(pObject->_oAnimWidth);
file->WriteLE<int32_t>(CalculateWidth2(pObject->_oAnimWidth));
// Write _oAnimWidth2 for vanilla compatibility
file->WriteLE<int32_t>(CalculateWidth2(pObject->_oAnimWidth)); // Write _oAnimWidth2 for vanilla compatibility
file->WriteLE<uint32_t>(pObject->_oDelFlag ? 1 : 0);
file->WriteLE<int8_t>(pObject->_oBreak);
file->Skip(3); // Alignment

Loading…
Cancel
Save