Browse Source

Merge pull request #846 from AJenbo/CelDecodeHdrLightOnly

Clean up engine.cpp
pull/88/head
Robin Eklind 7 years ago committed by GitHub
parent
commit
fd5a07ee7e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 295
      Source/engine.cpp

295
Source/engine.cpp

@ -163,7 +163,7 @@ void __fastcall CelDecDatOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth)
*/ */
void __fastcall CelDrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall CelDrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int v1, v2, nDataSize; int nDataStart, nDataCap, nDataSize;
BYTE *pRLEBytes; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
@ -176,25 +176,24 @@ void __fastcall CelDrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWi
pFrameTable = (DWORD *)pCelBuff; pFrameTable = (DWORD *)pCelBuff;
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
v1 = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!nDataStart)
if (!v1)
return; return;
nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel]; nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel];
if (CelCap == 8) if (CelCap == 8)
v2 = 0; nDataCap = 0;
else else
v2 = *(WORD *)&pRLEBytes[CelCap]; nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (v2) if (nDataCap)
nDataSize = v2 - v1; nDataSize = nDataCap - nDataStart;
else else
nDataSize -= v1; nDataSize -= nDataStart;
CelDrawDatOnly( CelDrawDatOnly(
&gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]], &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]],
&pRLEBytes[v1], pRLEBytes + nDataStart,
nDataSize, nDataSize,
nWidth); nWidth);
} }
@ -205,7 +204,7 @@ void __fastcall CelDrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWi
*/ */
void __fastcall CelDecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall CelDecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int v1, v2, nDataSize; int nDataStart, nDataCap, nDataSize;
BYTE *pRLEBytes; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
@ -218,23 +217,22 @@ void __fastcall CelDecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWid
pFrameTable = (DWORD *)pCelBuff; pFrameTable = (DWORD *)pCelBuff;
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
v1 = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!nDataStart)
if (!v1)
return; return;
nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel]; nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel];
if (CelCap == 8) if (CelCap == 8)
v2 = 0; nDataCap = 0;
else else
v2 = *(WORD *)&pRLEBytes[CelCap]; nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (v2) if (nDataCap)
nDataSize = v2 - v1; nDataSize = nDataCap - nDataStart;
else else
nDataSize -= v1; nDataSize -= nDataStart;
CelDrawDatOnly(pBuff, &pRLEBytes[v1], nDataSize, nWidth); CelDrawDatOnly(pBuff, pRLEBytes + nDataStart, nDataSize, nWidth);
} }
void __fastcall CelDecDatLightOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth) void __fastcall CelDecDatLightOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth)
@ -611,8 +609,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) void __fastcall CelDecodeHdrLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int hdr, nDataSize, v1, v2; int nDataStart, nDataCap, nDataSize;
BYTE *pRLEBytes, *pDecodeTo, *v9; BYTE *pRLEBytes, *pDecodeTo;
DWORD *pFrameTable; DWORD *pFrameTable;
/// ASSERT: assert(gpBuffer); /// ASSERT: assert(gpBuffer);
@ -622,23 +620,24 @@ void __fastcall CelDecodeHdrLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel,
if (!pCelBuff) if (!pCelBuff)
return; return;
pFrameTable = (DWORD *)&pCelBuff[4 * nCel]; pFrameTable = (DWORD *)pCelBuff;
v9 = &pCelBuff[pFrameTable[0]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
hdr = *(WORD *)&v9[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
v1 = pFrameTable[1] - pFrameTable[0]; nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel];
if (CelCap == 8) if (CelCap == 8)
v2 = 0; nDataCap = 0;
else else
v2 = *(WORD *)&v9[CelCap]; nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (v2) if (nDataCap)
nDataSize = v2 - hdr; nDataSize = nDataCap - nDataStart;
else else
nDataSize = v1 - hdr; nDataSize -= nDataStart;
pRLEBytes = &v9[hdr]; pRLEBytes += nDataStart;
pDecodeTo = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]]; pDecodeTo = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]];
if (light_table_index) if (light_table_index)
@ -654,8 +653,8 @@ void __fastcall CelDecodeHdrLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel,
*/ */
void __fastcall CelDecodeHdrLightTrans(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall CelDecodeHdrLightTrans(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int hdr, nDataSize, v1, v2; int nDataStart, nDataCap, nDataSize;
BYTE *pRLEBytes, *v9; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
/// ASSERT: assert(pCelBuff != NULL); /// ASSERT: assert(pCelBuff != NULL);
@ -665,23 +664,24 @@ void __fastcall CelDecodeHdrLightTrans(BYTE *pBuff, BYTE *pCelBuff, int nCel, in
if (!pBuff) if (!pBuff)
return; return;
pFrameTable = (DWORD *)&pCelBuff[4 * nCel]; pFrameTable = (DWORD *)pCelBuff;
v9 = &pCelBuff[pFrameTable[0]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
hdr = *(WORD *)&v9[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
v1 = pFrameTable[1] - pFrameTable[0]; nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel];
if (CelCap == 8) if (CelCap == 8)
v2 = 0; nDataCap = 0;
else else
v2 = *(WORD *)&v9[CelCap]; nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (v2) if (nDataCap)
nDataSize = v2 - hdr; nDataSize = nDataCap - nDataStart;
else else
nDataSize = v1 - hdr; nDataSize -= nDataStart;
pRLEBytes = &v9[hdr]; pRLEBytes += nDataStart;
if (cel_transparency_active) if (cel_transparency_active)
CelDecDatLightTrans(pBuff, pRLEBytes, nDataSize, nWidth); CelDecDatLightTrans(pBuff, pRLEBytes, nDataSize, nWidth);
@ -927,7 +927,7 @@ void __fastcall Cel2DecDatOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize,
*/ */
void __fastcall Cel2DrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall Cel2DrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int v1, v2, nDataSize; int nDataStart, nDataCap, nDataSize;
BYTE *pRLEBytes; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
@ -940,25 +940,24 @@ void __fastcall Cel2DrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nW
pFrameTable = (DWORD *)pCelBuff; pFrameTable = (DWORD *)pCelBuff;
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
v1 = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!nDataStart)
if (!v1)
return; return;
nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel]; nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel];
if (CelCap == 8) if (CelCap == 8)
v2 = 0; nDataCap = 0;
else else
v2 = *(WORD *)&pRLEBytes[CelCap]; nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (v2) if (nDataCap)
nDataSize = v2 - v1; nDataSize = nDataCap - nDataStart;
else else
nDataSize -= v1; nDataSize -= nDataStart;
Cel2DecDatOnly( Cel2DecDatOnly(
&gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]], &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]],
&pRLEBytes[v1], pRLEBytes + nDataStart,
nDataSize, nDataSize,
nWidth); nWidth);
} }
@ -969,7 +968,7 @@ void __fastcall Cel2DrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nW
*/ */
void __fastcall Cel2DecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall Cel2DecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int v1, v2, nDataSize; int nDataStart, nDataCap, nDataSize;
BYTE *pRLEBytes; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
@ -982,22 +981,21 @@ void __fastcall Cel2DecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWi
pFrameTable = (DWORD *)pCelBuff; pFrameTable = (DWORD *)pCelBuff;
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
v1 = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!nDataStart)
if (!v1)
return; return;
nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel]; nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel];
nDataCap = *(WORD *)&pRLEBytes[CelCap];
v2 = *(WORD *)&pRLEBytes[CelCap];
if (CelCap == 8) if (CelCap == 8)
v2 = 0; nDataCap = 0;
if (v2)
nDataSize = v2 - v1; if (nDataCap)
nDataSize = nDataCap - nDataStart;
else else
nDataSize -= v1; nDataSize -= nDataStart;
Cel2DecDatOnly(pBuff, &pRLEBytes[v1], nDataSize, nWidth); Cel2DecDatOnly(pBuff, pRLEBytes + nDataStart, nDataSize, nWidth);
} }
void __fastcall Cel2DecDatLightOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth) void __fastcall Cel2DecDatLightOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth)
@ -1379,8 +1377,8 @@ void __fastcall Cel2DecDatLightTrans(BYTE *pDecodeTo, BYTE *pRLEBytes, int nData
*/ */
void __fastcall Cel2DecodeHdrLight(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall Cel2DecodeHdrLight(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int hdr, nDataSize, v1; int nDataStart, nDataCap, nDataSize;
BYTE *pRLEBytes, *pDecodeTo, *v9; BYTE *pRLEBytes, *pDecodeTo;
DWORD *pFrameTable; DWORD *pFrameTable;
/// ASSERT: assert(gpBuffer); /// ASSERT: assert(gpBuffer);
@ -1390,21 +1388,23 @@ void __fastcall Cel2DecodeHdrLight(int sx, int sy, BYTE *pCelBuff, int nCel, int
if (!pCelBuff) if (!pCelBuff)
return; return;
pFrameTable = (DWORD *)&pCelBuff[4 * nCel]; pFrameTable = (DWORD *)pCelBuff;
v9 = &pCelBuff[pFrameTable[0]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
hdr = *(WORD *)&v9[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
v1 = *(WORD *)&v9[CelCap]; nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel];
nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (CelCap == 8) if (CelCap == 8)
v1 = 0; nDataCap = 0;
if (v1)
nDataSize = v1 - hdr; if (nDataCap)
nDataSize = nDataCap - nDataStart;
else else
nDataSize = pFrameTable[1] - pFrameTable[0] - hdr; nDataSize -= nDataStart;
pRLEBytes = &v9[hdr]; pRLEBytes += nDataStart;
pDecodeTo = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]]; pDecodeTo = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]];
if (light_table_index) if (light_table_index)
@ -1420,30 +1420,31 @@ void __fastcall Cel2DecodeHdrLight(int sx, int sy, BYTE *pCelBuff, int nCel, int
*/ */
void __fastcall Cel2DecodeLightTrans(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall Cel2DecodeLightTrans(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int hdr, nDataSize, v1, v2; int nDataStart, nDataCap, nDataSize;
BYTE *pRLEBytes, *v9; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
/// ASSERT: assert(pCelBuff != NULL); /// ASSERT: assert(pCelBuff != NULL);
if (!pCelBuff) if (!pCelBuff)
return; return;
pFrameTable = (DWORD *)&pCelBuff[4 * nCel]; pFrameTable = (DWORD *)pCelBuff;
v9 = &pCelBuff[pFrameTable[0]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
hdr = *(WORD *)&v9[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
v1 = pFrameTable[1] - pFrameTable[0]; nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel];
v2 = *(WORD *)&v9[CelCap]; nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (CelCap == 8) if (CelCap == 8)
v2 = 0; nDataCap = 0;
if (v2)
nDataSize = v2 - hdr; if (nDataCap)
nDataSize = nDataCap - nDataStart;
else else
nDataSize = v1 - hdr; nDataSize -= nDataStart;
pRLEBytes = &v9[hdr]; pRLEBytes += nDataStart;
if (cel_transparency_active) if (cel_transparency_active)
Cel2DecDatLightTrans(pBuff, pRLEBytes, nDataSize, nWidth); Cel2DecDatLightTrans(pBuff, pRLEBytes, nDataSize, nWidth);
@ -1703,7 +1704,7 @@ void __fastcall CelDecodeRect(BYTE *pBuff, int CelSkip, int hgt, int wdt, BYTE *
*/ */
void __fastcall CelDecodeClr(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall CelDecodeClr(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int w, hdr, nDataSize, v1; int w, nDataStart, nDataCap, nDataSize;
BYTE *src, *dst; BYTE *src, *dst;
/// ASSERT: assert(pCelBuff != NULL); /// ASSERT: assert(pCelBuff != NULL);
@ -1728,23 +1729,23 @@ void __fastcall CelDecodeClr(char col, int sx, int sy, BYTE *pCelBuff, int nCel,
add edx, CelSkip add edx, CelSkip
xor eax, eax xor eax, eax
mov ax, [edx] mov ax, [edx]
mov hdr, eax mov nDataStart, eax
mov edx, src mov edx, src
add edx, CelCap add edx, CelCap
mov ax, [edx] mov ax, [edx]
mov v1, eax mov nDataCap, eax
} }
if (!hdr) return; if (!nDataStart) return;
if (CelCap == 8) if (CelCap == 8)
v1 = 0; nDataCap = 0;
if (v1) if (nDataCap)
nDataSize = v1 - hdr; nDataSize = nDataCap - nDataStart;
else else
nDataSize -= hdr; nDataSize -= nDataStart;
src += hdr; src += nDataStart;
dst = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]]; dst = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]];
__asm { __asm {
@ -1796,19 +1797,20 @@ void __fastcall CelDecodeClr(char col, int sx, int sy, BYTE *pCelBuff, int nCel,
pFrameTable = (DWORD *)&pCelBuff[4 * nCel]; pFrameTable = (DWORD *)&pCelBuff[4 * nCel];
pRLEBytes = &pCelBuff[pFrameTable[0]]; pRLEBytes = &pCelBuff[pFrameTable[0]];
hdr = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
v1 = *(WORD *)&pRLEBytes[CelCap]; nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (CelCap == 8) if (CelCap == 8)
v1 = 0; nDataCap = 0;
if (v1)
nDataSize = v1 - hdr; if (nDataCap)
nDataSize = nDataCap - nDataStart;
else else
nDataSize = pFrameTable[1] - pFrameTable[0] - hdr; nDataSize = pFrameTable[1] - pFrameTable[0] - nDataStart;
src = &pRLEBytes[hdr]; src = pRLEBytes + nDataStart;
end = &src[nDataSize]; end = &src[nDataSize];
dst = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]]; dst = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]];
@ -1843,7 +1845,7 @@ void __fastcall CelDecodeClr(char col, int sx, int sy, BYTE *pCelBuff, int nCel,
*/ */
void __fastcall CelDrawHdrClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall CelDrawHdrClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int w, hdr, nDataSize, v1; int w, nDataStart, nDataCap, nDataSize;
BYTE *src, *dst; BYTE *src, *dst;
/// ASSERT: assert(pCelBuff != NULL); /// ASSERT: assert(pCelBuff != NULL);
@ -1868,23 +1870,23 @@ void __fastcall CelDrawHdrClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nC
add edx, CelSkip add edx, CelSkip
xor eax, eax xor eax, eax
mov ax, [edx] mov ax, [edx]
mov hdr, eax mov nDataStart, eax
mov edx, src mov edx, src
add edx, CelCap add edx, CelCap
mov ax, [edx] mov ax, [edx]
mov v1, eax mov nDataCap, eax
} }
if (!hdr) return; if (!nDataStart) return;
if (CelCap == 8) if (CelCap == 8)
v1 = 0; nDataCap = 0;
if (v1) if (nDataCap)
nDataSize = v1 - hdr; nDataSize = nDataCap - nDataStart;
else else
nDataSize -= hdr; nDataSize -= nDataStart;
src += hdr; src += nDataStart;
dst = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]]; dst = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]];
__asm { __asm {
@ -1961,19 +1963,20 @@ void __fastcall CelDrawHdrClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nC
pFrameTable = (DWORD *)&pCelBuff[4 * nCel]; pFrameTable = (DWORD *)&pCelBuff[4 * nCel];
pRLEBytes = &pCelBuff[pFrameTable[0]]; pRLEBytes = &pCelBuff[pFrameTable[0]];
hdr = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
v1 = *(WORD *)&pRLEBytes[CelCap]; nDataCap = *(WORD *)&pRLEBytes[CelCap];
if (CelCap == 8) if (CelCap == 8)
v1 = 0; nDataCap = 0;
if (v1)
nDataSize = v1 - hdr; if (nDataCap)
nDataSize = nDataCap - nDataStart;
else else
nDataSize = pFrameTable[1] - pFrameTable[0] - hdr; nDataSize = pFrameTable[1] - pFrameTable[0] - nDataStart;
src = &pRLEBytes[hdr]; src = pRLEBytes + nDataStart;
end = &src[nDataSize]; end = &src[nDataSize];
dst = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]]; dst = &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]];
@ -2525,7 +2528,7 @@ void __fastcall Cl2ApplyTrans(BYTE *p, BYTE *ttbl, int nCel)
*/ */
void __fastcall Cl2DecodeFrm1(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall Cl2DecodeFrm1(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int hdr, nDataSize; int nDataStart, nDataSize;
BYTE *pRLEBytes; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
@ -2543,8 +2546,8 @@ void __fastcall Cl2DecodeFrm1(int sx, int sy, BYTE *pCelBuff, int nCel, int nWid
/// ASSERT: assert(nCel <= (int) pFrameTable[0]); /// ASSERT: assert(nCel <= (int) pFrameTable[0]);
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
hdr = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
if (CelCap == 8) if (CelCap == 8)
@ -2556,8 +2559,8 @@ void __fastcall Cl2DecodeFrm1(int sx, int sy, BYTE *pCelBuff, int nCel, int nWid
Cl2DecDatFrm1( Cl2DecDatFrm1(
&gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]], &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]],
&pRLEBytes[hdr], pRLEBytes + nDataStart,
nDataSize - hdr, nDataSize - nDataStart,
nWidth); nWidth);
} }
@ -2708,7 +2711,7 @@ void __fastcall Cl2DecDatFrm1(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, i
*/ */
void __fastcall Cl2DecodeFrm2(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall Cl2DecodeFrm2(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int hdr, nDataSize; int nDataStart, nDataSize;
BYTE *pRLEBytes; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
@ -2726,8 +2729,8 @@ void __fastcall Cl2DecodeFrm2(char col, int sx, int sy, BYTE *pCelBuff, int nCel
/// ASSERT: assert(nCel <= (int) pFrameTable[0]); /// ASSERT: assert(nCel <= (int) pFrameTable[0]);
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
hdr = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
if (CelCap == 8) if (CelCap == 8)
@ -2739,8 +2742,8 @@ void __fastcall Cl2DecodeFrm2(char col, int sx, int sy, BYTE *pCelBuff, int nCel
Cl2DecDatFrm2( Cl2DecDatFrm2(
&gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]], &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]],
&pRLEBytes[hdr], pRLEBytes + nDataStart,
nDataSize - hdr, nDataSize - nDataStart,
nWidth, nWidth,
col); col);
} }
@ -3158,7 +3161,7 @@ void __fastcall Cl2DecodeLightTbl(int sx, int sy, BYTE *pCelBuff, int nCel, int
*/ */
void __fastcall Cl2DecodeFrm4(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall Cl2DecodeFrm4(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int hdr, nDataSize; int nDataStart, nDataSize;
BYTE *pRLEBytes; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
@ -3176,8 +3179,8 @@ void __fastcall Cl2DecodeFrm4(int sx, int sy, BYTE *pCelBuff, int nCel, int nWid
/// ASSERT: assert(nCel <= (int) pFrameTable[0]); /// ASSERT: assert(nCel <= (int) pFrameTable[0]);
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
hdr = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
if (CelCap == 8) if (CelCap == 8)
@ -3189,8 +3192,8 @@ void __fastcall Cl2DecodeFrm4(int sx, int sy, BYTE *pCelBuff, int nCel, int nWid
Cl2DecDatFrm4( Cl2DecDatFrm4(
&gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]], &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]],
&pRLEBytes[hdr], pRLEBytes + nDataStart,
nDataSize - hdr, nDataSize - nDataStart,
nWidth); nWidth);
} }
@ -3355,7 +3358,7 @@ void __fastcall Cl2DecDatFrm4(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, i
*/ */
void __fastcall Cl2DecodeClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap) void __fastcall Cl2DecodeClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int CelSkip, int CelCap)
{ {
int hdr, nDataSize; int nDataStart, nDataSize;
BYTE *pRLEBytes; BYTE *pRLEBytes;
DWORD *pFrameTable; DWORD *pFrameTable;
@ -3373,8 +3376,8 @@ void __fastcall Cl2DecodeClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nCe
/// ASSERT: assert(nCel <= (int) pFrameTable[0]); /// ASSERT: assert(nCel <= (int) pFrameTable[0]);
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; pRLEBytes = &pCelBuff[pFrameTable[nCel]];
hdr = *(WORD *)&pRLEBytes[CelSkip]; nDataStart = *(WORD *)&pRLEBytes[CelSkip];
if (!hdr) if (!nDataStart)
return; return;
if (CelCap == 8) if (CelCap == 8)
@ -3387,8 +3390,8 @@ void __fastcall Cl2DecodeClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nCe
gpBufEnd -= 768; gpBufEnd -= 768;
Cl2DecDatClrHL( Cl2DecDatClrHL(
&gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]], &gpBuffer[sx + screen_y_times_768[sy - 16 * CelSkip]],
&pRLEBytes[hdr], pRLEBytes + nDataStart,
nDataSize - hdr, nDataSize - nDataStart,
nWidth, nWidth,
col); col);
gpBufEnd += 768; gpBufEnd += 768;

Loading…
Cancel
Save