- 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 ubVolatility; // maximum chance of accidental explosion
UINT8 ubAnimationID; // Animation enum to use UINT8 ubAnimationID; // Animation enum to use
UINT32 uiIndex; UINT32 uiIndex;
int ubDuration; UINT16 ubDuration;
UINT8 ubStartRadius; UINT8 ubStartRadius;
} EXPLOSIVETYPE; } EXPLOSIVETYPE;
+1 -1
View File
@@ -187,7 +187,7 @@ explosiveEndElementHandle(void *userData, const char *name)
else if(strcmp(name, "ubDuration") == 0) else if(strcmp(name, "ubDuration") == 0)
{ {
pData->curElement = ELEMENT; pData->curElement = ELEMENT;
pData->curExplosive.ubDuration = (int) atol(pData->szCharData); pData->curExplosive.ubDuration = (UINT16) atol(pData->szCharData);
} }
pData->maxReadDepth--; 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; LIGHTEFFECT *pLight;
INT32 iLightIndex; 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 ) void DecayLightEffects( UINT32 uiTime )
{ {
@@ -187,6 +208,8 @@ void DecayLightEffects( UINT32 uiTime )
{ {
pLight->bAge++; pLight->bAge++;
if ( pLight->ubDuration <= 0 )
fDelete = TRUE;
// if this cloud remains effective (duration not reached) // if this cloud remains effective (duration not reached)
if ( pLight->bAge < pLight->ubDuration) 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 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 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; BOOLEAN fAllocated;
INT32 iLight; INT32 iLight;
UINT32 uiTimeOfLastUpdate; UINT32 uiTimeOfLastUpdate;
@@ -35,7 +35,7 @@ void AddLightEffectToTile( INT8 bType, INT16 sGridNo );
void RemoveLightEffectFromTile( 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 ); BOOLEAN SaveLightEffectsToSaveGameFile( HWFILE hFile );
@@ -45,4 +45,6 @@ BOOLEAN SaveLightEffectsToMapTempFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
BOOLEAN LoadLightEffectsFromMapTempFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ ); BOOLEAN LoadLightEffectsFromMapTempFile( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
void ResetLightEffects(); void ResetLightEffects();
BOOLEAN IsLightEffectAtTile( INT16 sGridNo );
#endif #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 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 ubRadius; // the current radius of the cloud in map tiles
UINT8 bFlags; // 0 - outdoors (fast spread), 1 - indoors (slow) 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; BOOLEAN fAllocated;
INT8 bType; INT8 bType;
UINT16 usItem; UINT16 usItem;
+16 -4
View File
@@ -138,7 +138,19 @@ ANITILE *CreateAnimationTile( ANITILE_PARAMS *pAniParams )
if ( uiFlags & ANITILE_LIGHT ) 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 ) ) if ( ( uiFlags & ANITILE_CACHEDTILE ) )
@@ -368,7 +380,7 @@ void DeleteAniTile( ANITILE *pAniTile )
break; break;
} }
if ( pAniNode->uiFlags & ANITILE_LIGHT && pAniNode->lightSprite != NULL ) if ( pAniNode->uiFlags & ANITILE_LIGHT && pAniNode->lightSprite > 0 )
{ {
LightSpriteDestroy(pAniNode->lightSprite); LightSpriteDestroy(pAniNode->lightSprite);
} }
@@ -601,9 +613,9 @@ void UpdateAniTiles( )
} }
else 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! // Delete from world!