diff --git a/Source/engine.cpp b/Source/engine.cpp index 646e7c87b..b3d3aa5c2 100644 --- a/Source/engine.cpp +++ b/Source/engine.cpp @@ -1970,34 +1970,62 @@ void __fastcall CelDrawHdrClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nC } // 69CF0C: using guessed type int gpBufEnd; -void __fastcall ENG_set_pixel(int screen_x, int screen_y, UCHAR pixel) +void __fastcall ENG_set_pixel(int sx, int sy, BYTE col) { - UCHAR *v3; // edi + BYTE *dst; + + /// ASSERT: assert(gpBuffer); + + if(sy < 0 || sy >= 640 || sx < 64 || sx >= 704) + return; + + dst = &gpBuffer[sx + screen_y_times_768[sy]]; - if (screen_y >= 0 && screen_y < 640 && screen_x >= 64 && screen_x < 704) { - v3 = (UCHAR *)gpBuffer + screen_y_times_768[screen_y] + screen_x; - if (v3 < gpBufEnd) - *v3 = pixel; +#if (_MSC_VER >= 800) && (_MSC_VER <= 1200) + __asm { + mov edi, dst + cmp edi, gpBufEnd + jnb label1 + mov al, col + mov [edi], al + label1: } +#else + if(dst < gpBufEnd) + *dst = col; +#endif } // 69CF0C: using guessed type int gpBufEnd; -void __fastcall engine_draw_pixel(int x, int y) +void __fastcall engine_draw_pixel(int sx, int sy) { - _BYTE *v2; // eax + BYTE *dst; - if (dword_52B970) { - if (!dword_52B99C || x >= 0 && x < 640 && y >= 64 && y < 704) { - v2 = (unsigned char *)gpBuffer + screen_y_times_768[x] + y; - goto LABEL_14; - } - } else if (!dword_52B99C || y >= 0 && y < 640 && x >= 64 && x < 704) { - v2 = (unsigned char *)gpBuffer + screen_y_times_768[y] + x; - LABEL_14: - if (v2 < gpBufEnd) - *v2 = gbPixelCol; - return; + /// ASSERT: assert(gpBuffer); + + if(dword_52B970) { + if(dword_52B99C && (sx < 0 || sx >= 640 || sy < 64 || sy >= 704)) + return; + dst = &gpBuffer[sy + screen_y_times_768[sx]]; + } else { + if(dword_52B99C && (sy < 0 || sy >= 640 || sx < 64 || sx >= 704)) + return; + dst = &gpBuffer[sx + screen_y_times_768[sy]]; } + +#if (_MSC_VER >= 800) && (_MSC_VER <= 1200) + __asm { + mov edi, dst + cmp edi, gpBufEnd + jnb label1 + mov al, gbPixelCol + mov [edi], al + label1: + } +#else + if(dst < gpBufEnd) + *dst = gbPixelCol; +#endif } // 52B96C: using guessed type char gbPixelCol; // 52B970: using guessed type int dword_52B970; diff --git a/Source/engine.h b/Source/engine.h index 037ce85cf..7c5352b78 100644 --- a/Source/engine.h +++ b/Source/engine.h @@ -33,8 +33,8 @@ void __fastcall Cel2DrawHdrLightRed(int sx, int sy, BYTE *pCelBuff, int nCel, in void __fastcall CelDecodeRect(BYTE *pBuff, int always_0, int hgt, int wdt, BYTE *pCelBuff, int nCel, int nWidth); void __fastcall CelDecodeClr(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir); void __fastcall CelDrawHdrClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir); -void __fastcall ENG_set_pixel(int screen_x, int screen_y, UCHAR pixel); -void __fastcall engine_draw_pixel(int x, int y); +void __fastcall ENG_set_pixel(int sx, int sy, BYTE col); +void __fastcall engine_draw_pixel(int sx, int sy); void __fastcall DrawLine(int x0, int y0, int x1, int y1, UCHAR col); int __fastcall GetDirection(int x1, int y1, int x2, int y2); void __fastcall SetRndSeed(int s);