Fix problems with missing tile effect in places such as Alma and Tixa underground

Also fixes potential problem with buffer overruns


git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1115 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Overhaul
2007-07-25 09:24:27 +00:00
parent b24712f2b6
commit 3b4f77b012
4 changed files with 46 additions and 29 deletions
+18 -8
View File
@@ -957,7 +957,7 @@ void RenderTiles(UINT32 uiFlags, INT32 iStartPointX_M, INT32 iStartPointY_M, INT
//if ( 0 )
if ( uiTileIndex < GRIDSIZE )
{
// OK, we're sreaching through this loop anyway, might as well check for mouse position
// OK, we're searching through this loop anyway, might as well check for mouse position
// over objects...
// Experimental!
if ( uiFlags & TILES_DYNAMIC_CHECKFOR_INT_TILE )
@@ -2892,11 +2892,16 @@ void RenderStaticWorldRect(INT16 sLeft, INT16 sTop, INT16 sRight, INT16 sBottom,
{
UINT32 uiLevelFlags[10];
UINT16 sLevelIDs[10];
UINT32 uiDestPitchBYTES;
UINT8 *pDestBuf=NULL;
// Calculate render starting parameters
CalcRenderParameters( sLeft, sTop, sRight, sBottom );
memset(gpZBuffer, LAND_Z_LEVEL, 2280 * gsVIEWPORT_END_Y );
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
Assert( pDestBuf);
memset(gpZBuffer, LAND_Z_LEVEL, uiDestPitchBYTES * gsVIEWPORT_END_Y );
UnLockVideoSurface( FRAME_BUFFER);
// Reset layer optimizations
@@ -2992,12 +2997,17 @@ void RenderStaticWorld( )
{
UINT32 uiLevelFlags[9];
UINT16 sLevelIDs[9];
UINT32 uiDestPitchBYTES;
UINT8 *pDestBuf=NULL;
// Calculate render starting parameters
CalcRenderParameters( gsVIEWPORT_START_X, gsVIEWPORT_START_Y, gsVIEWPORT_END_X, gsVIEWPORT_END_Y );
// Clear z-buffer
memset(gpZBuffer, LAND_Z_LEVEL, 2280 * gsVIEWPORT_END_Y );
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
Assert( pDestBuf);
memset(gpZBuffer, LAND_Z_LEVEL, uiDestPitchBYTES * gsVIEWPORT_END_Y );
UnLockVideoSurface( FRAME_BUFFER);
FreeBackgroundRectType(BGND_FLAG_ANIMATED);
InvalidateBackgroundRects();
@@ -6876,7 +6886,7 @@ void ExamineZBufferForHiddenTiles( INT16 sStartPointX_M, INT16 sStartPointY_M, I
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
// Get VObject for firt land peice!
// Get VObject for first land peice!
TileElem = &(gTileDatabase[ FIRSTTEXTURE1 ] );
@@ -6934,7 +6944,7 @@ void ExamineZBufferForHiddenTiles( INT16 sStartPointX_M, INT16 sStartPointY_M, I
// Don't let this happen for roads!
pObject = gpWorldLevelData[usTileIndex ].pObjectHead;
if ( IsTileRedundent( gpZBuffer, sZLevel, TileElem->hTileSurface, sX, sY, TileElem->usRegionIndex ) )
if ( IsTileRedundent( uiDestPitchBYTES, gpZBuffer, sZLevel, TileElem->hTileSurface, sX, sY, TileElem->usRegionIndex ) )
{
// Mark in the world!
gpWorldLevelData[ usTileIndex ].uiFlags |= MAPELEMENT_REDUNDENT;
@@ -7351,7 +7361,7 @@ BlitDone:
BOOLEAN IsTileRedundent( UINT16 *pZBuffer, UINT16 usZValue, HVOBJECT hSrcVObject, INT32 iX, INT32 iY, UINT16 usIndex )
BOOLEAN IsTileRedundent( UINT32 uiDestPitchBYTES, UINT16 *pZBuffer, UINT16 usZValue, HVOBJECT hSrcVObject, INT32 iX, INT32 iY, UINT16 usIndex )
{
UINT16 *p16BPPPalette;
UINT32 uiOffset;
@@ -7382,9 +7392,9 @@ BOOLEAN IsTileRedundent( UINT16 *pZBuffer, UINT16 usZValue, HVOBJECT hSrcVObject
SrcPtr= (UINT8 *)hSrcVObject->pPixData + uiOffset;
ZPtr = (UINT8 *)pZBuffer + (2280*iTempY) + (iTempX*2);
ZPtr = (UINT8 *)pZBuffer + (uiDestPitchBYTES*iTempY) + (iTempX*2);
p16BPPPalette = hSrcVObject->pShadeCurrent;
LineSkip=(2280-(usWidth*2));
LineSkip=(uiDestPitchBYTES-(usWidth*2));
__asm {