mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
LOBOT code (by Asdow, original code by Bio).
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8755 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+60
-46
@@ -2249,20 +2249,20 @@ BOOLEAN AddZStripInfoToVObject( HVOBJECT hVObject, STRUCTURE_FILE_REF * pStructu
|
||||
sNext = sSTIStartIndex + sSTIStep;
|
||||
fFirstTime = TRUE;
|
||||
|
||||
for (uiLoop = (UINT8)sSTIStartIndex; uiLoop < hVObject->usNumberOfObjects; uiLoop++ )
|
||||
for (uiLoop = (UINT8)sSTIStartIndex; uiLoop < hVObject->usNumberOfObjects; uiLoop++)
|
||||
{
|
||||
// Defualt to true
|
||||
fCopyIntoVo = TRUE;
|
||||
|
||||
// Increment struct index....
|
||||
if ( uiLoop == (UINT32)sNext )
|
||||
if (uiLoop == (UINT32)sNext)
|
||||
{
|
||||
sNext = (UINT16)( uiLoop + sSTIStep );
|
||||
sNext = (UINT16)(uiLoop + sSTIStep);
|
||||
sStructIndex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( fFirstTime )
|
||||
if (fFirstTime)
|
||||
{
|
||||
fFirstTime = FALSE;
|
||||
}
|
||||
@@ -2272,7 +2272,7 @@ BOOLEAN AddZStripInfoToVObject( HVOBJECT hVObject, STRUCTURE_FILE_REF * pStructu
|
||||
}
|
||||
}
|
||||
|
||||
if ( fFromAnimation )
|
||||
if (fFromAnimation)
|
||||
{
|
||||
uiDestVoIndex = sStructIndex;
|
||||
}
|
||||
@@ -2282,17 +2282,17 @@ BOOLEAN AddZStripInfoToVObject( HVOBJECT hVObject, STRUCTURE_FILE_REF * pStructu
|
||||
}
|
||||
|
||||
|
||||
if ( fCopyIntoVo && sStructIndex < pStructureFileRef->usNumberOfStructures )
|
||||
if (fCopyIntoVo && sStructIndex < pStructureFileRef->usNumberOfStructures)
|
||||
{
|
||||
pDBStructure = pStructureFileRef->pDBStructureRef[ sStructIndex ].pDBStructure;
|
||||
if (pDBStructure != NULL && ( pDBStructure->ubNumberOfTiles > 1 || ( pDBStructure->fFlags & STRUCTURE_CORPSE ) ) )
|
||||
//if (pDBStructure != NULL && pDBStructure->ubNumberOfTiles > 1 )
|
||||
pDBStructure = pStructureFileRef->pDBStructureRef[sStructIndex].pDBStructure;
|
||||
if (pDBStructure != NULL && (pDBStructure->ubNumberOfTiles > 1 || (pDBStructure->fFlags & STRUCTURE_CORPSE)))
|
||||
//if (pDBStructure != NULL && pDBStructure->ubNumberOfTiles > 1 )
|
||||
{
|
||||
// ATE: We allow SLIDING DOORS of 2 tile sizes...
|
||||
if ( !(pDBStructure->fFlags & STRUCTURE_ANYDOOR) || ( (pDBStructure->fFlags & ( STRUCTURE_ANYDOOR ) ) && ( pDBStructure->fFlags & STRUCTURE_SLIDINGDOOR ) ) )
|
||||
if (!(pDBStructure->fFlags & STRUCTURE_ANYDOOR) || ((pDBStructure->fFlags & (STRUCTURE_ANYDOOR)) && (pDBStructure->fFlags & STRUCTURE_SLIDINGDOOR)))
|
||||
{
|
||||
hVObject->ppZStripInfo[ uiDestVoIndex ] = (ZStripInfo *) MemAlloc( sizeof( ZStripInfo ) );
|
||||
if (hVObject->ppZStripInfo[ uiDestVoIndex ] == NULL)
|
||||
hVObject->ppZStripInfo[uiDestVoIndex] = (ZStripInfo *)MemAlloc(sizeof(ZStripInfo));
|
||||
if (hVObject->ppZStripInfo[uiDestVoIndex] == NULL)
|
||||
{
|
||||
// augh!! out of memory! free everything allocated and abort
|
||||
for (ubLoop2 = 0; ubLoop2 < uiLoop; ubLoop2++)
|
||||
@@ -2302,13 +2302,13 @@ BOOLEAN AddZStripInfoToVObject( HVOBJECT hVObject, STRUCTURE_FILE_REF * pStructu
|
||||
MemFree(hVObject->ppZStripInfo[uiLoop]);
|
||||
}
|
||||
}
|
||||
MemFree( hVObject->ppZStripInfo );
|
||||
MemFree(hVObject->ppZStripInfo);
|
||||
hVObject->ppZStripInfo = NULL;
|
||||
return( FALSE );
|
||||
return(FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
pCurr = hVObject->ppZStripInfo[ uiDestVoIndex ];
|
||||
pCurr = hVObject->ppZStripInfo[uiDestVoIndex];
|
||||
|
||||
ubNumIncreasing = 0;
|
||||
ubNumStable = 0;
|
||||
@@ -2319,7 +2319,7 @@ BOOLEAN AddZStripInfoToVObject( HVOBJECT hVObject, STRUCTURE_FILE_REF * pStructu
|
||||
sOffsetY = hVObject->pETRLEObject[uiLoop].sOffsetY;
|
||||
usWidth = hVObject->pETRLEObject[uiLoop].usWidth;
|
||||
usHeight = hVObject->pETRLEObject[uiLoop].usHeight;
|
||||
if (pDBStructure->fFlags & (STRUCTURE_MOBILE | STRUCTURE_CORPSE) )
|
||||
if (pDBStructure->fFlags & (STRUCTURE_MOBILE | STRUCTURE_CORPSE))
|
||||
{
|
||||
// adjust for the difference between the animation and structure base tile
|
||||
|
||||
@@ -2427,44 +2427,58 @@ BOOLEAN AddZStripInfoToVObject( HVOBJECT hVObject, STRUCTURE_FILE_REF * pStructu
|
||||
|
||||
// now create the array!
|
||||
pCurr->ubNumberOfZChanges = ubNumIncreasing + ubNumStable + ubNumDecreasing;
|
||||
pCurr->pbZChange = (INT8 *) MemAlloc( pCurr->ubNumberOfZChanges );
|
||||
if ( pCurr->pbZChange == NULL)
|
||||
// BIO (LOBOT): had to add a conditional as otherwise function would report a failure
|
||||
// which then would prompt LOBOT to issue an error when trying to load animation surfaces with
|
||||
// frames with a certain geometry.
|
||||
// Only allocate memory and stuff if ubNumberOfZChanges > 0. Otherwise
|
||||
// MemAlloc returns a NULL pointer which the code would interpret as
|
||||
// allocation failing because of no memory.
|
||||
// I hope this is OK, I don't entirely understand what is done here...
|
||||
if (pCurr->ubNumberOfZChanges > 0)
|
||||
{
|
||||
// augh!
|
||||
for (ubLoop2 = 0; ubLoop2 < uiLoop; ubLoop2++)
|
||||
pCurr->pbZChange = (INT8 *)MemAlloc(pCurr->ubNumberOfZChanges);
|
||||
if (pCurr->pbZChange == NULL)
|
||||
{
|
||||
if (hVObject->ppZStripInfo[ubLoop2] != NULL)
|
||||
// augh!
|
||||
for (ubLoop2 = 0; ubLoop2 < uiLoop; ubLoop2++)
|
||||
{
|
||||
MemFree(hVObject->ppZStripInfo[uiLoop]);
|
||||
if (hVObject->ppZStripInfo[ubLoop2] != NULL)
|
||||
{
|
||||
MemFree(hVObject->ppZStripInfo[uiLoop]);
|
||||
}
|
||||
}
|
||||
MemFree(hVObject->ppZStripInfo);
|
||||
hVObject->ppZStripInfo = NULL;
|
||||
return(FALSE);
|
||||
}
|
||||
for (ubLoop2 = 0; ubLoop2 < ubNumIncreasing; ubLoop2++)
|
||||
{
|
||||
pCurr->pbZChange[ubLoop2] = 1;
|
||||
}
|
||||
for (; ubLoop2 < ubNumIncreasing + ubNumStable; ubLoop2++)
|
||||
{
|
||||
pCurr->pbZChange[ubLoop2] = 0;
|
||||
}
|
||||
for (; ubLoop2 < pCurr->ubNumberOfZChanges; ubLoop2++)
|
||||
{
|
||||
pCurr->pbZChange[ubLoop2] = -1;
|
||||
}
|
||||
if (ubNumIncreasing > 0)
|
||||
{
|
||||
pCurr->bInitialZChange = -(ubNumIncreasing);
|
||||
}
|
||||
else if (ubNumStable > 0)
|
||||
{
|
||||
pCurr->bInitialZChange = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
pCurr->bInitialZChange = -(ubNumDecreasing);
|
||||
}
|
||||
MemFree( hVObject->ppZStripInfo );
|
||||
hVObject->ppZStripInfo = NULL;
|
||||
return( FALSE );
|
||||
}
|
||||
for (ubLoop2 = 0; ubLoop2 < ubNumIncreasing; ubLoop2++)
|
||||
{
|
||||
pCurr->pbZChange[ubLoop2] = 1;
|
||||
}
|
||||
for (; ubLoop2 < ubNumIncreasing + ubNumStable; ubLoop2++)
|
||||
{
|
||||
pCurr->pbZChange[ubLoop2] = 0;
|
||||
}
|
||||
for (; ubLoop2 < pCurr->ubNumberOfZChanges; ubLoop2++)
|
||||
{
|
||||
pCurr->pbZChange[ubLoop2] = -1;
|
||||
}
|
||||
if (ubNumIncreasing > 0)
|
||||
{
|
||||
pCurr->bInitialZChange = -(ubNumIncreasing);
|
||||
}
|
||||
else if (ubNumStable > 0)
|
||||
{
|
||||
pCurr->bInitialZChange = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
pCurr->bInitialZChange = -(ubNumDecreasing);
|
||||
pCurr->pbZChange = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user