diff --git a/source/fx/fx.cpp b/source/fx/fx.cpp index 5e8b34631..4339bb2bf 100644 --- a/source/fx/fx.cpp +++ b/source/fx/fx.cpp @@ -53,35 +53,35 @@ CFXBaseAnim::sFXBaseData FXDropBaseData= { FRM__DRIP,FRM__DRIP,1, FX_FLAG_LOOP | FX_FLAG_COLLIDE_KILL | FX_FLAG_HAS_GRAVITY | FX_FLAG_NO_THINK_KILL, - 0,CSoundMediator::SFX_HAZARD__ACID_DROP, + 0,0,CSoundMediator::SFX_HAZARD__ACID_DROP, }; CFXBaseAnim::sFXBaseData FXSplashBaseData= { FRM__SPLASH001,FRM__SPLASH006,1, FX_FLAG_NO_THINK_KILL, - 0,0, + 0,0,0, }; CFXBaseAnim::sFXBaseData FXExplodeBaseData= { FRM__EXPLOSION0001,FRM__EXPLOSION0008,1, FX_FLAG_NO_THINK_KILL, - CSoundMediator::SFX_HAZARD__FIREBALL_LAND,0, + CSoundMediator::SFX_HAZARD__FIREBALL_LAND,0,0, }; CFXBaseAnim::sFXBaseData FXFireBaseData= { FRM__FIRE01,FRM__FIRE08,1, FX_FLAG_LOOP | FX_FLAG_TRANS, - 0,0, + 0,CSoundMediator::SFX_FIRE_CRACKLING,0, }; CFXBaseAnim::sFXBaseData FXBubbleBaseData= { FRM__BUBBLE_2,FRM__BUBBLE_2,1, FX_FLAG_LOOP | FX_FLAG_COLLIDE_KILL | FX_FLAG_NO_THINK_KILL, - 0,0, + 0,0,0, }; /*****************************************************************************/ diff --git a/source/fx/fxbaseanim.cpp b/source/fx/fxbaseanim.cpp index c44d44b68..811550c89 100644 --- a/source/fx/fxbaseanim.cpp +++ b/source/fx/fxbaseanim.cpp @@ -51,17 +51,23 @@ void CFXBaseAnim::think(int _frames) m_soundId=CSoundMediator::playSfx((CSoundMediator::SFXID)BaseData->StartSnd,true,true); } } - else - { - if(!CSoundMediator::isSfxStillPlaying(m_soundId)) - { - CSoundMediator::stopAndUnlockSfx(m_soundId); - m_soundId=NOT_PLAYING; - } - } + EndSnd=BaseData->EndSnd; HasInit=true; } + else + { + if ( !( Flags & FX_FLAG_HIDDEN ) ) + { + if(m_soundId==NOT_PLAYING) + { + if (BaseData->MainSnd) + { + m_soundId=CSoundMediator::playSfx((CSoundMediator::SFXID)BaseData->MainSnd,true,true); + } + } + } + } CFX::think(_frames); @@ -85,6 +91,14 @@ int ThisFrame=CurrentFrame>>BaseData->FrameShift; renderFrame=BaseData->StartFrame+ThisFrame; } + if ( m_soundId != NOT_PLAYING ) + { + if(!CSoundMediator::isSfxStillPlaying(m_soundId)) + { + CSoundMediator::stopAndUnlockSfx(m_soundId); + m_soundId=NOT_PLAYING; + } + } } /*****************************************************************************/ diff --git a/source/fx/fxbaseanim.h b/source/fx/fxbaseanim.h index ef67abc62..cbd7492a2 100644 --- a/source/fx/fxbaseanim.h +++ b/source/fx/fxbaseanim.h @@ -15,7 +15,7 @@ public: { s16 StartFrame,EndFrame,FrameShift; u16 Flags; - u16 StartSnd,EndSnd; + u16 StartSnd,MainSnd,EndSnd; }; virtual void init(DVECTOR const &Pos);