We can now use interactive actions to alter decals on walls, so it is possible to simulate taking off an object from the scenery and add it as an item.

For more info, see http://thepit.ja-galaxy-forum.com/index.php?t=msg&goto=363513&#msg_363513

Requires GameDir >= r2601

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9141 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2021-07-13 19:50:49 +00:00
parent 174b870afe
commit 6cad680b02
17 changed files with 244 additions and 69 deletions
+31 -47
View File
@@ -137,6 +137,10 @@ INT8 FromWorldFlagsToSmokeType( UINT16 ubWorldFlags )
{
return(DEBRIS_SMOKE_EFFECT);
}
else if ( ubWorldFlags & MAPELEMENT_EXT_FIRERETARDANT_SMOKE )
{
return FIRERETARDANT_SMOKE_EFFECT;
}
return(NO_SMOKE_EFFECT);
}
@@ -180,6 +184,10 @@ UINT16 FromSmokeTypeToWorldFlags( INT8 bType )
return(MAPELEMENT_EXT_DEBRIS_SMOKE);
break;
case FIRERETARDANT_SMOKE_EFFECT:
return MAPELEMENT_EXT_FIRERETARDANT_SMOKE;
break;
default:
return( 0 );
@@ -288,6 +296,10 @@ INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner,
case EXPLOSV_SMOKE_DEBRIS:
bSmokeEffectType = DEBRIS_SMOKE_EFFECT;
break;
case EXPLOSV_SMOKE_FIRERETARDANT:
bSmokeEffectType = FIRERETARDANT_SMOKE_EFFECT;
break;
}
pSmoke->ubDuration = (UINT8)Explosive[ Item[ usItem ].ubClassIndex ].ubDuration;
@@ -395,6 +407,9 @@ INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner, B
case EXPLOSV_SMOKE_DEBRIS:
bSmokeEffectType = DEBRIS_SMOKE_EFFECT;
break;
case EXPLOSV_SMOKE_FIRERETARDANT:
bSmokeEffectType = FIRERETARDANT_SMOKE_EFFECT;
break;
}
// sevenfm: use custom duration/radius
@@ -607,59 +622,19 @@ void AddSmokeEffectToTile( INT32 iSmokeEffectID, INT8 bType, INT32 sGridNo, INT8
break;
case CREATURE_SMOKE_EFFECT:
if ( !( gGameSettings.fOptions[ TOPTION_ANIMATE_SMOKE ] ) )
{
strcpy( AniParams.zCachedFile, "TILECACHE\\spit_gas.STI" );
}
else
{
if ( fDissipating )
{
strcpy( AniParams.zCachedFile, "TILECACHE\\spit_gas.STI" );
}
else
{
strcpy( AniParams.zCachedFile, "TILECACHE\\spit_gas.STI" );
}
}
strcpy( AniParams.zCachedFile, "TILECACHE\\spit_gas.STI" );
break;
case SIGNAL_SMOKE_EFFECT:
if ( !( gGameSettings.fOptions[ TOPTION_ANIMATE_SMOKE ] ) )
{
strcpy( AniParams.zCachedFile, "TILECACHE\\signal_gas.STI" );
}
else
{
if ( fDissipating )
{
strcpy( AniParams.zCachedFile, "TILECACHE\\signal_gas.STI" );
}
else
{
strcpy( AniParams.zCachedFile, "TILECACHE\\signal_gas.STI" );
}
}
strcpy( AniParams.zCachedFile, "TILECACHE\\signal_gas.STI" );
break;
case DEBRIS_SMOKE_EFFECT:
if ( !(gGameSettings.fOptions[TOPTION_ANIMATE_SMOKE]) )
{
strcpy( AniParams.zCachedFile, "TILECACHE\\debris_smoke.STI" );
}
else
{
if ( fDissipating )
{
strcpy( AniParams.zCachedFile, "TILECACHE\\debris_smoke.STI" );
}
else
{
strcpy( AniParams.zCachedFile, "TILECACHE\\debris_smoke.STI" );
}
}
strcpy( AniParams.zCachedFile, "TILECACHE\\debris_smoke.STI" );
break;
case FIRERETARDANT_SMOKE_EFFECT:
strcpy( AniParams.zCachedFile, "TILECACHE\\white_smoke.STI" );
break;
}
@@ -769,6 +744,15 @@ void DecaySmokeEffects( UINT32 uiTime )
}
}
// Flugente: if tile has a fire retardant effect, don't create new fire
if ( Explosive[Item[pSmoke->usItem].ubClassIndex].ubType == EXPLOSV_BURNABLEGAS )
{
if ( gpWorldLevelData[pSmoke->sGridNo].ubExtFlags[bLevel] & MAPELEMENT_EXT_FIRERETARDANT_SMOKE )
{
pSmoke->bAge = pSmoke->ubDuration + 1;
}
}
if ( fUpdate )
{
pSmoke->uiTimeOfLastUpdate = uiTime;