mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
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:
@@ -1041,10 +1041,12 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
INT32 cnt;
|
||||
INT16 sShiftX, sShiftY;
|
||||
INT32 uiCountY;
|
||||
UINT32 uiDestPitchBYTES;
|
||||
|
||||
|
||||
GetCurrentVideoSettings( &usWidth, &usHeight, &ubBitDepth );
|
||||
usHeight=(gsVIEWPORT_WINDOW_END_Y - gsVIEWPORT_WINDOW_START_Y );
|
||||
uiDestPitchBYTES = (usWidth * ubBitDepth) / 8;
|
||||
|
||||
// pSource = gpFrameBuffer;
|
||||
// pDest = gpFrameBuffer;
|
||||
@@ -1093,10 +1095,10 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
// memset z-buffer
|
||||
for(uiCountY = gsVIEWPORT_WINDOW_START_Y; uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
sScrollXIncrement*2);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
StripRegions[ 0 ].right =(INT16)(gsVIEWPORT_START_X+sScrollXIncrement);
|
||||
usMouseXPos += sScrollXIncrement;
|
||||
@@ -1134,7 +1136,7 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
// memset z-buffer
|
||||
for(uiCountY= gsVIEWPORT_WINDOW_START_Y; uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280) + ( ( gsVIEWPORT_END_X - sScrollXIncrement ) * 2 ), 0,
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES) + ( ( gsVIEWPORT_END_X - sScrollXIncrement ) * 2 ), 0,
|
||||
sScrollXIncrement*2);
|
||||
}
|
||||
|
||||
@@ -1176,8 +1178,8 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
|
||||
for(uiCountY=sScrollYIncrement-1+gsVIEWPORT_WINDOW_START_Y; uiCountY >= gsVIEWPORT_WINDOW_START_Y; uiCountY--)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
2280);
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
uiDestPitchBYTES);
|
||||
}
|
||||
|
||||
//for(uiCountY=usHeight-1; uiCountY >= sScrollYIncrement; uiCountY--)
|
||||
@@ -1217,8 +1219,8 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
// Zero out z
|
||||
for(uiCountY=(gsVIEWPORT_WINDOW_END_Y - sScrollYIncrement ); uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
2280);
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
uiDestPitchBYTES);
|
||||
}
|
||||
|
||||
//for(uiCountY=0; uiCountY < (usHeight-sScrollYIncrement); uiCountY++)
|
||||
@@ -1259,14 +1261,14 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
// memset z-buffer
|
||||
for(uiCountY=gsVIEWPORT_WINDOW_START_Y; uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
sScrollXIncrement*2);
|
||||
|
||||
}
|
||||
for(uiCountY=gsVIEWPORT_WINDOW_START_Y + sScrollYIncrement-1; uiCountY >= gsVIEWPORT_WINDOW_START_Y; uiCountY--)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
2280);
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
uiDestPitchBYTES);
|
||||
}
|
||||
|
||||
|
||||
@@ -1304,13 +1306,13 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
// memset z-buffer
|
||||
for(uiCountY=gsVIEWPORT_WINDOW_START_Y; uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280) + ( ( gsVIEWPORT_END_X - sScrollXIncrement ) * 2 ), 0,
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES) + ( ( gsVIEWPORT_END_X - sScrollXIncrement ) * 2 ), 0,
|
||||
sScrollXIncrement*2);
|
||||
}
|
||||
for(uiCountY=gsVIEWPORT_WINDOW_START_Y + sScrollYIncrement-1; uiCountY >= gsVIEWPORT_WINDOW_START_Y; uiCountY--)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
2280);
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
uiDestPitchBYTES);
|
||||
}
|
||||
|
||||
|
||||
@@ -1348,14 +1350,14 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
// memset z-buffer
|
||||
for(uiCountY=gsVIEWPORT_WINDOW_START_Y; uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
sScrollXIncrement*2);
|
||||
|
||||
}
|
||||
for(uiCountY=(gsVIEWPORT_WINDOW_END_Y - sScrollYIncrement); uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
2280);
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
uiDestPitchBYTES);
|
||||
}
|
||||
|
||||
|
||||
@@ -1395,13 +1397,13 @@ void ScrollJA2Background(UINT32 uiDirection, INT16 sScrollXIncrement, INT16 sScr
|
||||
// memset z-buffer
|
||||
for(uiCountY=gsVIEWPORT_WINDOW_START_Y; uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280) + ( ( gsVIEWPORT_END_X - sScrollXIncrement ) * 2 ), 0,
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES) + ( ( gsVIEWPORT_END_X - sScrollXIncrement ) * 2 ), 0,
|
||||
sScrollXIncrement*2);
|
||||
}
|
||||
for(uiCountY=(gsVIEWPORT_WINDOW_END_Y - sScrollYIncrement); uiCountY < gsVIEWPORT_WINDOW_END_Y; uiCountY++)
|
||||
{
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*2280), 0,
|
||||
2280);
|
||||
memset((UINT8 *)gpZBuffer+(uiCountY*uiDestPitchBYTES), 0,
|
||||
uiDestPitchBYTES);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ void WorldHideTrees( );
|
||||
void WorldShowTrees( );
|
||||
|
||||
|
||||
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 );
|
||||
|
||||
//this is found in editscreen.c
|
||||
//Andrew, you had worldman.c checked out at the time, so I stuck it here.
|
||||
|
||||
+6
-1
@@ -153,11 +153,16 @@ extern void InternalLocateGridNo( UINT16 sGridNo, BOOLEAN fForce );
|
||||
UINT32 MainGameScreenInit(void)
|
||||
{
|
||||
VIDEO_OVERLAY_DESC VideoOverlayDesc;
|
||||
UINT32 uiDestPitchBYTES;
|
||||
UINT8 *pDestBuf=NULL;
|
||||
|
||||
/* If any 1 have time please calculate how big this buffer should be
|
||||
* any questions? joker
|
||||
*/
|
||||
gpZBuffer=InitZBuffer( 2048, SCREEN_HEIGHT);
|
||||
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
|
||||
gpZBuffer=InitZBuffer( uiDestPitchBYTES, SCREEN_HEIGHT);
|
||||
UnLockVideoSurface( FRAME_BUFFER);
|
||||
|
||||
InitializeBackgroundRects();
|
||||
|
||||
//EnvSetTimeInHours(ENV_TIME_12);
|
||||
|
||||
Reference in New Issue
Block a user