Fix GetFrameNumber, SetFrameNumber, GetAnimNumber and SetAnimNumber.

This commit is contained in:
hispidence 2021-08-21 00:25:15 +01:00
parent a75b43b7c5
commit afdec32c1f

View file

@ -417,22 +417,36 @@ void GameScriptItemInfo::SetGoalAnimState(short state)
short GameScriptItemInfo::GetAnimNumber() const
{
return m_item->animNumber;
return m_item->animNumber - Objects[m_item->objectNumber].animIndex;
}
void GameScriptItemInfo::SetAnimNumber(short animNumber)
{
m_item->animNumber = animNumber;
//TODO fixme: we need bounds checking with an error message once it's in the level file format
m_item->animNumber = animNumber + Objects[m_item->objectNumber].animIndex;
}
short GameScriptItemInfo::GetFrameNumber() const
{
return m_item->frameNumber;
return m_item->frameNumber - g_Level.Anims[m_item->animNumber].frameBase;
}
void GameScriptItemInfo::SetFrameNumber(short frameNumber)
{
m_item->frameNumber = frameNumber;
auto const fBase = g_Level.Anims[m_item->animNumber].frameBase;
auto const fEnd = g_Level.Anims[m_item->animNumber].frameEnd;
auto frameCount = fEnd - fBase;
bool cond = (frameNumber < frameCount);
const char* err = "Invalid frame number {}; max frame count for anim {} is {}.";
if (ScriptAssertF(cond, err, frameNumber, m_item->animNumber, frameCount))
{
m_item->frameNumber = frameNumber + fBase;
}
else
{
ScriptWarn("Not setting frame number.");
}
}