diff --git a/Source/engine.cpp b/Source/engine.cpp index 7956095c0..8d792aad4 100644 --- a/Source/engine.cpp +++ b/Source/engine.cpp @@ -611,8 +611,8 @@ void __fastcall CelDecodeLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int */ void __fastcall CelDecodeHdrLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) { - int hdr, nDataSize, v1, v2; - BYTE *pRLEBytes, *pDecodeTo, *v9; + int nDataStart, nDataSize, nDataCap; + BYTE *pRLEBytes, *pDecodeTo; DWORD *pFrameTable; /// ASSERT: assert(gpBuffer); @@ -622,23 +622,24 @@ void __fastcall CelDecodeHdrLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel, if (!pCelBuff) return; - pFrameTable = (DWORD *)&pCelBuff[4 * nCel]; - v9 = &pCelBuff[pFrameTable[0]]; - hdr = *(WORD *)&v9[CelSkip]; - if (!hdr) + pFrameTable = (DWORD *)pCelBuff; + pRLEBytes = &pCelBuff[pFrameTable[nCel]]; + nDataStart = *(WORD *)&pRLEBytes[CelSkip]; + if (!nDataStart) return; - v1 = pFrameTable[1] - pFrameTable[0]; + nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel]; + if (CelCap == 8) - v2 = 0; + nDataCap = 0; else - v2 = *(WORD *)&v9[CelCap]; - if (v2) - nDataSize = v2 - hdr; + nDataCap = *(WORD *)&pRLEBytes[CelCap]; + if (nDataCap) + nDataSize = nDataCap - nDataStart; else - nDataSize = v1 - hdr; + nDataSize -= nDataStart; - pRLEBytes = &v9[hdr]; + pRLEBytes = &pRLEBytes[nDataStart]; pDecodeTo = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]]; if (light_table_index)