This commit is contained in:
parent
08d3b3132f
commit
bb895ddd22
5 changed files with 51 additions and 45 deletions
|
@ -306,6 +306,21 @@ CFX *NewFX=CFX::Create(Type);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
void CFX::leftThinkZone(int _frames)
|
||||||
|
{
|
||||||
|
if(Flags & FX_FLAG_NO_THINK_KILL)
|
||||||
|
{
|
||||||
|
killFX();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_soundId != NOT_PLAYING )
|
||||||
|
{
|
||||||
|
CSoundMediator::stopAndUnlockSfx(m_soundId);
|
||||||
|
m_soundId=NOT_PLAYING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void CFX::init()
|
void CFX::init()
|
||||||
{
|
{
|
||||||
|
@ -404,14 +419,15 @@ void CFX::killFX()
|
||||||
{
|
{
|
||||||
CFX::Create((CFX::FX_TYPE)AfterEffect,getPos());
|
CFX::Create((CFX::FX_TYPE)AfterEffect,getPos());
|
||||||
}
|
}
|
||||||
|
if( m_soundId != NOT_PLAYING )
|
||||||
|
{
|
||||||
|
CSoundMediator::stopAndUnlockSfx(m_soundId);
|
||||||
|
m_soundId=NOT_PLAYING;
|
||||||
|
}
|
||||||
if (EndSnd)
|
if (EndSnd)
|
||||||
{
|
{
|
||||||
CSoundMediator::playSfx( (CSoundMediator::SFXID)EndSnd,false);
|
CSoundMediator::playSfx( (CSoundMediator::SFXID)EndSnd,false);
|
||||||
}
|
}
|
||||||
if( m_soundId != NOT_PLAYING )
|
|
||||||
{
|
|
||||||
CSoundMediator::stopAndUnlockSfx(m_soundId );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ static CFX *Create(const FX_TYPE Type,CThing *Parent);
|
||||||
static CFX *Create(const FX_TYPE Type,DVECTOR const &Pos);
|
static CFX *Create(const FX_TYPE Type,DVECTOR const &Pos);
|
||||||
|
|
||||||
bool alwaysThink() {return(Flags & FX_FLAG_SCREEN_FX);}
|
bool alwaysThink() {return(Flags & FX_FLAG_SCREEN_FX);}
|
||||||
void leftThinkZone(int _frames) {if (Flags & FX_FLAG_NO_THINK_KILL) killFX();}
|
void leftThinkZone(int _frames);
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
virtual void init(DVECTOR const &Pos);
|
virtual void init(DVECTOR const &Pos);
|
||||||
|
|
|
@ -31,7 +31,6 @@ void CFXSteam::init(DVECTOR const &_Pos)
|
||||||
DieOut=false;
|
DieOut=false;
|
||||||
SetSize(DefSize);
|
SetSize(DefSize);
|
||||||
IsHorizontal=false;
|
IsHorizontal=false;
|
||||||
m_soundId=CSoundMediator::playSfx( CSoundMediator::SFX_HAZARD__STEAM,true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -112,12 +111,21 @@ int TotalLife=0;
|
||||||
TotalLife+=ThisElem.Shade;
|
TotalLife+=ThisElem.Shade;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_soundId==NOT_PLAYING)
|
||||||
|
{
|
||||||
|
m_soundId=CSoundMediator::playSfx( CSoundMediator::SFX_HAZARD__STEAM,true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(!CSoundMediator::isSfxStillPlaying(m_soundId))
|
||||||
|
{
|
||||||
|
CSoundMediator::stopAndUnlockSfx(m_soundId);
|
||||||
|
m_soundId=NOT_PLAYING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (DieOut && TotalLife==0)
|
if (DieOut && TotalLife==0)
|
||||||
{
|
{
|
||||||
if( m_soundId != NOT_PLAYING )
|
|
||||||
{
|
|
||||||
CSoundMediator::stopAndUnlockSfx(m_soundId );
|
|
||||||
}
|
|
||||||
setToShutdown();
|
setToShutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,6 +440,7 @@ void CGameScene::think(int _frames)
|
||||||
// Song is loaded/dumped by the level, and played from here. This just gives some
|
// Song is loaded/dumped by the level, and played from here. This just gives some
|
||||||
// better timing over when it starts (pkg)
|
// better timing over when it starts (pkg)
|
||||||
CSoundMediator::playSong();
|
CSoundMediator::playSong();
|
||||||
|
CSoundMediator::setCanPlaySfx(true);
|
||||||
m_musicStarted=true;
|
m_musicStarted=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -702,10 +703,12 @@ int CGameScene::getTotalSpatCountForThisLevel()
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void CGameScene::respawnLevel()
|
void CGameScene::respawnLevel()
|
||||||
{
|
{
|
||||||
|
CSoundMediator::setCanPlaySfx(false);
|
||||||
m_player->respawn();
|
m_player->respawn();
|
||||||
Level.respawnLevel();
|
Level.respawnLevel();
|
||||||
m_gamestate=GAMESTATE_SHOWING_LIVES;
|
m_gamestate=GAMESTATE_SHOWING_LIVES;
|
||||||
m_showingLivesTimer=0;
|
m_showingLivesTimer=0;
|
||||||
|
CSoundMediator::setCanPlaySfx(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -733,6 +736,8 @@ void CGameScene::hitBossArenaTrigger()
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void CGameScene::initLevel()
|
void CGameScene::initLevel()
|
||||||
{
|
{
|
||||||
|
CSoundMediator::setCanPlaySfx(false);
|
||||||
|
|
||||||
SYSTEM_DBGMSG("InitLevel\n");
|
SYSTEM_DBGMSG("InitLevel\n");
|
||||||
CThingManager::init();
|
CThingManager::init();
|
||||||
|
|
||||||
|
|
|
@ -191,22 +191,12 @@ void CXMPlaySound::think()
|
||||||
case SILENT:
|
case SILENT:
|
||||||
if(!ch->m_locked)
|
if(!ch->m_locked)
|
||||||
{
|
{
|
||||||
if(XM_GetFeedback(ch->m_internalId,&fb))
|
do
|
||||||
{
|
{
|
||||||
///PAUL_DBGMSG("freeing channels:");
|
ch->m_useType=FREE;
|
||||||
///int j=i;
|
ch++;
|
||||||
do
|
|
||||||
{
|
|
||||||
///PAUL_DBGMSG(" %d (%d)",j++,ch->m_playingId);
|
|
||||||
ch->m_useType=FREE;
|
|
||||||
ch++;
|
|
||||||
}
|
|
||||||
while(ch->m_useType==CONTINUE);
|
|
||||||
}
|
}
|
||||||
/// else
|
while(ch->m_useType==CONTINUE);
|
||||||
///{
|
|
||||||
/// PAUL_DBGMSG("channel %d not stopped",i);
|
|
||||||
///}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -215,13 +205,14 @@ void CXMPlaySound::think()
|
||||||
case SONG:
|
case SONG:
|
||||||
case SFX:
|
case SFX:
|
||||||
if(XM_GetFeedback(ch->m_internalId,&fb))
|
if(XM_GetFeedback(ch->m_internalId,&fb))
|
||||||
|
// XM_GetFeedback(ch->m_internalId,&fb);
|
||||||
|
// if(fb.Status==XM_STOPPED)
|
||||||
{
|
{
|
||||||
// Just mark it as silent, if it's unlocked then it'll die next frame
|
// Just mark it as silent, if it's unlocked then it'll die next frame
|
||||||
ch->m_useType=SILENT;
|
ch->m_useType=SILENT;
|
||||||
|
|
||||||
// And kill it in the player
|
// And kill it in the player
|
||||||
XM_Quit(ch->m_internalId);
|
XM_Quit(ch->m_internalId);
|
||||||
///PAUL_DBGMSG("marked %d (%d) as silent",i,ch->m_internalId);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -706,7 +697,6 @@ xmPlayingId CXMPlaySound::playSong(xmSampleId _sampleId,xmModId _modId,int _star
|
||||||
_startPattern); // Where to start from
|
_startPattern); // Where to start from
|
||||||
markChannelsAsActive(baseChannel,channelCount,SONG,retId,id,255);
|
markChannelsAsActive(baseChannel,channelCount,SONG,retId,id,255);
|
||||||
setVolume(retId,MAX_VOLUME);
|
setVolume(retId,MAX_VOLUME);
|
||||||
//PAUL_DBGMSG("playSong %d/%d ( on %d-%d )",retId,id,baseChannel,baseChannel+channelCount-1);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -751,14 +741,8 @@ void CXMPlaySound::unlockPlayingId(xmPlayingId _playingId)
|
||||||
ch=&m_spuChannelUse[_playingId&0xff];
|
ch=&m_spuChannelUse[_playingId&0xff];
|
||||||
if(ch->m_playingId==_playingId)
|
if(ch->m_playingId==_playingId)
|
||||||
{
|
{
|
||||||
//PAUL_DBGMSG("unlocking %d",_playingId);
|
|
||||||
ASSERT(ch->m_locked!=false); // Can't do this on an unlocked sound!
|
ASSERT(ch->m_locked!=false); // Can't do this on an unlocked sound!
|
||||||
do
|
ch->m_locked=false;
|
||||||
{
|
|
||||||
ch->m_locked=false;
|
|
||||||
ch++;
|
|
||||||
}
|
|
||||||
while(ch->m_useType==CONTINUE);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -785,19 +769,15 @@ void CXMPlaySound::stopPlayingId(xmPlayingId _playingId)
|
||||||
case SONG:
|
case SONG:
|
||||||
case SFX:
|
case SFX:
|
||||||
{
|
{
|
||||||
// XM_Feedback fb;
|
XM_PlayStop(ch->m_internalId);
|
||||||
// do
|
|
||||||
// {
|
|
||||||
XM_PlayStop(ch->m_internalId);
|
|
||||||
// XM_GetFeedback(ch->m_internalId,&fb);
|
|
||||||
// }
|
|
||||||
// while(fb.Status!=XM_STOPPED);
|
|
||||||
XM_Quit(ch->m_internalId);
|
XM_Quit(ch->m_internalId);
|
||||||
|
ch->m_useType=SILENT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LOOPINGSFX:
|
case LOOPINGSFX:
|
||||||
XM_StopSample(ch->m_internalId);
|
XM_StopSample(ch->m_internalId);
|
||||||
|
ch->m_useType=SILENT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SILENT:
|
case SILENT:
|
||||||
|
@ -809,7 +789,6 @@ void CXMPlaySound::stopPlayingId(xmPlayingId _playingId)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ch->m_useType=SILENT;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -853,17 +832,16 @@ xmPlayingId CXMPlaySound::playSfx(xmSampleId _sampleId,xmModId _modId,int _sfxPa
|
||||||
{
|
{
|
||||||
retId=getNextSparePlayingId(baseChannel);
|
retId=getNextSparePlayingId(baseChannel);
|
||||||
vab=&m_xmVabs[_sampleId];
|
vab=&m_xmVabs[_sampleId];
|
||||||
XM_SetSFXRange(baseChannel,channelCount);
|
// XM_SetSFXRange(baseChannel,channelCount);
|
||||||
id=XM_Init(vab->m_vabId, // id from XM_VABInit
|
id=XM_Init(vab->m_vabId, // id from XM_VABInit
|
||||||
_modId, // XM id ( as passed to InitXMData )
|
_modId, // XM id ( as passed to InitXMData )
|
||||||
-1, // Let xmplay give us a song id
|
-1, // Let xmplay give us a song id
|
||||||
-1, // Use SFX range to get first channel
|
baseChannel, // Base cahnnel to play on
|
||||||
XM_NoLoop, // One-shot
|
XM_NoLoop, // One-shot
|
||||||
_playMask, // Play mask
|
_playMask, // Play mask
|
||||||
XM_SFX, // SFX
|
XM_SFX, // SFX
|
||||||
_sfxPattern); // SFX pattern to play
|
_sfxPattern); // SFX pattern to play
|
||||||
XM_ClearSFXRange();
|
XM_ClearSFXRange();
|
||||||
//PAUL_DBGMSG("playSfx %d/%d ( on %d-%d )",retId,id,baseChannel,baseChannel+channelCount-1);
|
|
||||||
markChannelsAsActive(baseChannel,channelCount,SFX,retId,id,_priority);
|
markChannelsAsActive(baseChannel,channelCount,SFX,retId,id,_priority);
|
||||||
setVolume(retId,MAX_VOLUME);
|
setVolume(retId,MAX_VOLUME);
|
||||||
}
|
}
|
||||||
|
@ -891,7 +869,6 @@ xmPlayingId CXMPlaySound::playLoopingSfx(xmSampleId _sampleId,xmModId _modId,int
|
||||||
if(baseChannel!=-1)
|
if(baseChannel!=-1)
|
||||||
{
|
{
|
||||||
retId=getNextSparePlayingId(baseChannel);
|
retId=getNextSparePlayingId(baseChannel);
|
||||||
//PAUL_DBGMSG("playLoopingSfx %d/- ( on %d-%d )",retId,baseChannel,baseChannel);
|
|
||||||
XM_PlaySample(XM_GetSampleAddress(_sampleId,_soundId),baseChannel,0x3fff,0x3fff,_pitch);
|
XM_PlaySample(XM_GetSampleAddress(_sampleId,_soundId),baseChannel,0x3fff,0x3fff,_pitch);
|
||||||
markChannelsAsActive(baseChannel,1,LOOPINGSFX,retId,baseChannel,_priority);
|
markChannelsAsActive(baseChannel,1,LOOPINGSFX,retId,baseChannel,_priority);
|
||||||
setVolume(retId,MAX_VOLUME);
|
setVolume(retId,MAX_VOLUME);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue