- updated bullet tracer effect again to resolve a savegame compatibility issue and to fix the lighting effects

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@193 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
MaddMugsy
2006-06-08 04:40:55 +00:00
parent 454a0575d8
commit a38002f606
6 changed files with 50 additions and 13 deletions
+1 -1
View File
@@ -299,7 +299,7 @@ typedef struct
UINT8 ubVolatility; // maximum chance of accidental explosion
UINT8 ubAnimationID; // Animation enum to use
UINT32 uiIndex;
int ubDuration;
UINT16 ubDuration;
UINT8 ubStartRadius;
} EXPLOSIVETYPE;
+1 -1
View File
@@ -187,7 +187,7 @@ explosiveEndElementHandle(void *userData, const char *name)
else if(strcmp(name, "ubDuration") == 0)
{
pData->curElement = ELEMENT;
pData->curExplosive.ubDuration = (int) atol(pData->szCharData);
pData->curExplosive.ubDuration = (UINT16) atol(pData->szCharData);
}
pData->maxReadDepth--;
+25 -2
View File
@@ -96,8 +96,8 @@ void UpdateLightingSprite( LIGHTEFFECT *pLight )
}
INT32 NewLightEffect( INT16 sGridNo, int ubDuration, UINT8 ubStartRadius )
{
INT32 NewLightEffect( INT16 sGridNo, UINT16 ubDuration, UINT8 ubStartRadius )
{
LIGHTEFFECT *pLight;
INT32 iLightIndex;
@@ -159,6 +159,27 @@ void RemoveLightEffectFromTile( INT16 sGridNo )
}
BOOLEAN IsLightEffectAtTile( INT16 sGridNo )
{
LIGHTEFFECT *pLight;
UINT32 cnt;
// Set to unallocated....
for ( cnt = 0; cnt < guiNumLightEffects; cnt++ )
{
pLight = &gLightEffectData[ cnt ];
if ( pLight->fAllocated )
{
if ( pLight->sGridNo == sGridNo )
{
return TRUE;
}
}
}
return FALSE;
}
void DecayLightEffects( UINT32 uiTime )
{
@@ -187,6 +208,8 @@ void DecayLightEffects( UINT32 uiTime )
{
pLight->bAge++;
if ( pLight->ubDuration <= 0 )
fDelete = TRUE;
// if this cloud remains effective (duration not reached)
if ( pLight->bAge < pLight->ubDuration)
{
+5 -3
View File
@@ -15,9 +15,9 @@ typedef struct
{
INT16 sGridNo; // gridno at which the tear gas cloud is centered
int ubDuration; // the number of turns will remain effective
UINT16 ubDuration; // the number of turns will remain effective
UINT8 bRadius; // the current radius
int bAge; // the number of turns light has been around
UINT16 bAge; // the number of turns light has been around
BOOLEAN fAllocated;
INT32 iLight;
UINT32 uiTimeOfLastUpdate;
@@ -35,7 +35,7 @@ void AddLightEffectToTile( INT8 bType, INT16 sGridNo );
void RemoveLightEffectFromTile( INT16 sGridNo );
INT32 NewLightEffect( INT16 sGridNo, int ubDuration, UINT8 ubStartRadius );
INT32 NewLightEffect( INT16 sGridNo, UINT16 ubDuration, UINT8 ubStartRadius );
BOOLEAN SaveLightEffectsToSaveGameFile( HWFILE hFile );
@@ -45,4 +45,6 @@ BOOLEAN SaveLightEffectsToMapTempFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
BOOLEAN LoadLightEffectsFromMapTempFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
void ResetLightEffects();
BOOLEAN IsLightEffectAtTile( INT16 sGridNo );
#endif
+2 -2
View File
@@ -22,10 +22,10 @@ typedef struct TAG_SMOKE_EFFECT
{
INT16 sGridNo; // gridno at which the tear gas cloud is centered
int ubDuration; // the number of turns gas will remain effective
UINT16 ubDuration; // the number of turns gas will remain effective
UINT8 ubRadius; // the current radius of the cloud in map tiles
UINT8 bFlags; // 0 - outdoors (fast spread), 1 - indoors (slow)
int bAge; // the number of turns gas has been around
UINT16 bAge; // the number of turns gas has been around
BOOLEAN fAllocated;
INT8 bType;
UINT16 usItem;
+16 -4
View File
@@ -138,7 +138,19 @@ ANITILE *CreateAnimationTile( ANITILE_PARAMS *pAniParams )
if ( uiFlags & ANITILE_LIGHT )
{
pNewAniNode->lightSprite = NewLightEffect(sGridNo, 1, 0);
if( !IsLightEffectAtTile(sGridNo) && ( pNewAniNode->lightSprite=LightSpriteCreate("L-R03.LHT", 0 ) )!=(-1))
{
LightSpritePower(pNewAniNode->lightSprite, TRUE);
{
INT16 sXPos, sYPos;
ConvertGridNoToCenterCellXY( sGridNo, &sXPos, &sYPos );
LightSpritePosition( pNewAniNode->lightSprite, (INT16)(sXPos/CELL_X_SIZE), (INT16)(sYPos/CELL_Y_SIZE));
AllTeamsLookForAll( FALSE );
}
}
else
pNewAniNode->lightSprite = -1;
}
if ( ( uiFlags & ANITILE_CACHEDTILE ) )
@@ -368,7 +380,7 @@ void DeleteAniTile( ANITILE *pAniTile )
break;
}
if ( pAniNode->uiFlags & ANITILE_LIGHT && pAniNode->lightSprite != NULL )
if ( pAniNode->uiFlags & ANITILE_LIGHT && pAniNode->lightSprite > 0 )
{
LightSpriteDestroy(pAniNode->lightSprite);
}
@@ -601,9 +613,9 @@ void UpdateAniTiles( )
}
else
{
if ( pNode->uiFlags & ANITILE_LIGHT && pNode->lightSprite != NULL )
if ( pNode->uiFlags & ANITILE_LIGHT && pNode->lightSprite > 0 )
{
LightSpriteDestroy(pNode->lightSprite);
LightSpriteDestroy(pAniNode->lightSprite);
}
// Delete from world!