diff --git a/Source/engine.cpp b/Source/engine.cpp index f795b27fe..eb883845a 100644 --- a/Source/engine.cpp +++ b/Source/engine.cpp @@ -31,6 +31,15 @@ __FINLINE BYTE *CelGetFrame(BYTE *pCelBuff, int nCel, int *nDataSize) return pCelBuff + nCellStart; } +__FINLINE int CelGetFrameSize(BYTE *pCelBuff, int nCel) +{ + DWORD *pFrameTable; + + pFrameTable = (DWORD *)pCelBuff; + + return SwapLE32(pFrameTable[nCel + 1]) - SwapLE32(pFrameTable[nCel]); +} + void CelDrawDatOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth) { int w; @@ -2447,7 +2456,7 @@ void Cl2ApplyTrans(BYTE *p, BYTE *ttbl, int nCel) for (i = 1; i <= nCel; i++) { pFrameTable = (DWORD *)&p[4 * i]; dst = &p[pFrameTable[0] + 10]; - nDataSize = pFrameTable[1] - pFrameTable[0] - 10; + nDataSize = CelGetFrameSize(p, i) - 10; while (nDataSize) { width = *dst++; nDataSize--;