This commit is contained in:
parent
590b960cce
commit
cf820d24c9
6 changed files with 101 additions and 28 deletions
|
@ -146,7 +146,7 @@ GFX_DATA_OUT += $(SFX_ALL_OUT)
|
||||||
MUSIC_IN_DIR := data/music
|
MUSIC_IN_DIR := data/music
|
||||||
MUSIC_OUT_DIR := $(DATA_OUT)/music
|
MUSIC_OUT_DIR := $(DATA_OUT)/music
|
||||||
|
|
||||||
MUSIC_LIST := hypermmx droppop
|
MUSIC_LIST := hypermmx droppop music
|
||||||
|
|
||||||
MUSIC_ALL_IN := $(foreach MUSIC,$(MUSIC_LIST),$(MUSIC_IN_DIR)/$(MUSIC)/$(MUSIC).PXM $(MUSIC_IN_DIR)/$(MUSIC)/$(MUSIC).VH $(MUSIC_IN_DIR)/$(MUSIC)/$(MUSIC).VB)
|
MUSIC_ALL_IN := $(foreach MUSIC,$(MUSIC_LIST),$(MUSIC_IN_DIR)/$(MUSIC)/$(MUSIC).PXM $(MUSIC_IN_DIR)/$(MUSIC)/$(MUSIC).VH $(MUSIC_IN_DIR)/$(MUSIC)/$(MUSIC).VB)
|
||||||
MUSIC_ALL_OUT := $(foreach MUSIC,$(MUSIC_LIST),$(MUSIC_OUT_DIR)/$(MUSIC).PXM $(MUSIC_OUT_DIR)/$(MUSIC).VH $(MUSIC_OUT_DIR)/$(MUSIC).VB)
|
MUSIC_ALL_OUT := $(foreach MUSIC,$(MUSIC_LIST),$(MUSIC_OUT_DIR)/$(MUSIC).PXM $(MUSIC_OUT_DIR)/$(MUSIC).VH $(MUSIC_OUT_DIR)/$(MUSIC).VB)
|
||||||
|
|
|
@ -77,13 +77,13 @@ char *s_mem[3];
|
||||||
void CPaulScene::init()
|
void CPaulScene::init()
|
||||||
{
|
{
|
||||||
s_fontBank.initialise(&standardFont);
|
s_fontBank.initialise(&standardFont);
|
||||||
CSoundMediator::initialise();
|
|
||||||
|
|
||||||
CSoundMediator::setSong(CSoundMediator::DROPPOP);
|
|
||||||
// CSoundMediator::playSong();
|
|
||||||
|
|
||||||
CSoundMediator::setSfxBank(CSoundMediator::INGAME);
|
CSoundMediator::setSfxBank(CSoundMediator::INGAME);
|
||||||
|
|
||||||
|
CSoundMediator::setSong(CSoundMediator::MUSIC);
|
||||||
|
CSoundMediator::playSong();
|
||||||
|
|
||||||
|
|
||||||
//CXAStream::Init();
|
//CXAStream::Init();
|
||||||
PAUL_DBGMSG("initialised..");
|
PAUL_DBGMSG("initialised..");
|
||||||
|
@ -140,7 +140,11 @@ void CPaulScene::think()
|
||||||
int setVolumes=false;
|
int setVolumes=false;
|
||||||
|
|
||||||
pad=PadGetDown(0);
|
pad=PadGetDown(0);
|
||||||
if(pad&PAD_CROSS)
|
if(pad&PAD_R1)
|
||||||
|
{
|
||||||
|
PAUL_DBGMSG("-------------------");
|
||||||
|
}
|
||||||
|
else if(pad&PAD_CROSS)
|
||||||
{
|
{
|
||||||
sfxId=psfx;
|
sfxId=psfx;
|
||||||
}
|
}
|
||||||
|
@ -195,7 +199,6 @@ void CPaulScene::think()
|
||||||
CSoundMediator::setVolume(CSoundMediator::SFX,svol);
|
CSoundMediator::setVolume(CSoundMediator::SFX,svol);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSoundMediator::think(GameState::getTimeSinceLast());
|
|
||||||
//CXAStream::ControlXA();
|
//CXAStream::ControlXA();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,13 @@ typedef struct XMFILEDATA
|
||||||
FileEquate m_vh,m_vb,m_pxm;
|
FileEquate m_vh,m_vb,m_pxm;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct SFXDETAILS
|
||||||
|
{
|
||||||
|
int m_channels;
|
||||||
|
int m_pattern;
|
||||||
|
int m_looping;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function Prototypes
|
Function Prototypes
|
||||||
|
@ -54,6 +61,7 @@ static XMFILEDATA s_xmSongData[CSoundMediator::NUM_SONGIDS]=
|
||||||
{
|
{
|
||||||
{ MUSIC_HYPERMMX_VH, MUSIC_HYPERMMX_VB, MUSIC_HYPERMMX_PXM }, // HYPERMMX
|
{ MUSIC_HYPERMMX_VH, MUSIC_HYPERMMX_VB, MUSIC_HYPERMMX_PXM }, // HYPERMMX
|
||||||
{ MUSIC_DROPPOP_VH, MUSIC_DROPPOP_VB, MUSIC_DROPPOP_PXM }, // DROPPOP
|
{ MUSIC_DROPPOP_VH, MUSIC_DROPPOP_VB, MUSIC_DROPPOP_PXM }, // DROPPOP
|
||||||
|
{ MUSIC_MUSIC_VH, MUSIC_MUSIC_VB, MUSIC_MUSIC_PXM }, // MUSIC
|
||||||
};
|
};
|
||||||
|
|
||||||
static XMFILEDATA s_xmSfxData[CSoundMediator::NUM_SFXBANKIDS]=
|
static XMFILEDATA s_xmSfxData[CSoundMediator::NUM_SFXBANKIDS]=
|
||||||
|
@ -61,6 +69,26 @@ static XMFILEDATA s_xmSfxData[CSoundMediator::NUM_SFXBANKIDS]=
|
||||||
{ SFX_INGAME_VH, SFX_INGAME_VB, SFX_INGAME_PXM }, // INGAME
|
{ SFX_INGAME_VH, SFX_INGAME_VB, SFX_INGAME_PXM }, // INGAME
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static SFXDETAILS s_sfxDetails[]=
|
||||||
|
{
|
||||||
|
{ 1, 0, 0 },
|
||||||
|
{ 1, 1, 0 },
|
||||||
|
{ 1, 2, 0 },
|
||||||
|
{ 1, 3, 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int CSoundMediator::s_initialised=false;
|
int CSoundMediator::s_initialised=false;
|
||||||
int /*CSoundMediator::*/s_currentVolume[CSoundMediator::NUM_VOLUMETYPES];
|
int /*CSoundMediator::*/s_currentVolume[CSoundMediator::NUM_VOLUMETYPES];
|
||||||
|
@ -110,6 +138,8 @@ void CSoundMediator::initialise()
|
||||||
// ASSERT(CXAStream::MAX_VOLUME==32767);
|
// ASSERT(CXAStream::MAX_VOLUME==32767);
|
||||||
|
|
||||||
|
|
||||||
|
PAUL_DBGMSG("song: %d-%d (%d)",SONG_BASE_CHANNEL,SONG_MAX_CHANNEL,SONG_CHANNELS);
|
||||||
|
PAUL_DBGMSG("sfx: %d-%d (%d)",SFX_BASE_CHANNEL,SFX_MAX_CHANNEL,SFX_CHANNELS);
|
||||||
|
|
||||||
SOUND_DBGMSG("Sound mediator initialised");
|
SOUND_DBGMSG("Sound mediator initialised");
|
||||||
s_initialised=true;
|
s_initialised=true;
|
||||||
|
@ -162,13 +192,33 @@ void CSoundMediator::think(int _frames)
|
||||||
int id;
|
int id;
|
||||||
|
|
||||||
id=-1;
|
id=-1;
|
||||||
for(i=10;i<24;i++)
|
for(i=SONG_CHANNELS;i<24;i++)
|
||||||
{
|
{
|
||||||
if(id!=s_spuChannelUse[i])
|
if(id!=s_spuChannelUse[i])
|
||||||
{
|
{
|
||||||
id=s_spuChannelUse[i];
|
id=s_spuChannelUse[i];
|
||||||
if(id!=-1)
|
if(id!=-1)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
if(id>=5000)
|
||||||
|
{
|
||||||
|
PAUL_DBGMSG("%d is now free.. ( was on chnl %d )",id-5000,i);
|
||||||
|
while(s_spuChannelUse[i]==id&&i<24)
|
||||||
|
{
|
||||||
|
s_spuChannelUse[i++]=-1;
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
else if(id>=100)
|
||||||
|
{
|
||||||
|
while(s_spuChannelUse[i]==id&&i<24)
|
||||||
|
{
|
||||||
|
s_spuChannelUse[i++]+=100;
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*/
|
||||||
if(!s_xmplaySound->isSfxActive((xmPlayingSongId)id))
|
if(!s_xmplaySound->isSfxActive((xmPlayingSongId)id))
|
||||||
{
|
{
|
||||||
PAUL_DBGMSG("%d end.. ( was on chnl %d )",id,i);
|
PAUL_DBGMSG("%d end.. ( was on chnl %d )",id,i);
|
||||||
|
@ -176,7 +226,12 @@ PAUL_DBGMSG("%d end.. ( was on chnl %d )",id,i);
|
||||||
{
|
{
|
||||||
s_spuChannelUse[i++]=-1;
|
s_spuChannelUse[i++]=-1;
|
||||||
}
|
}
|
||||||
|
i--;
|
||||||
}
|
}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
// PAUL_DBGMSG("channel %d playing",i);
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,18 +403,17 @@ sfxChannelMask=3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find some spare channels to play on
|
// Find some spare channels to play on
|
||||||
valid=true;
|
valid=false;
|
||||||
for(i=SFX_BASE_CHANNEL;i<NUM_SPU_CHANNELS-channelCount+1;i++)
|
for(i=SFX_BASE_CHANNEL;i<NUM_SPU_CHANNELS-channelCount+1&&valid==false;i++)
|
||||||
{
|
{
|
||||||
valid=true;
|
valid=true;
|
||||||
for(j=i;j<i+channelCount&&valid;j++)
|
for(j=i;j<i+channelCount&&valid;j++)
|
||||||
{
|
{
|
||||||
if(s_spuChannelUse[j]!=-1) valid=false;
|
if(s_spuChannelUse[j]!=-1) valid=false; // pkg - tidy up
|
||||||
}
|
}
|
||||||
if(valid==true) break;
|
|
||||||
}
|
}
|
||||||
ASSERT(valid!=false);
|
ASSERT(valid!=false);
|
||||||
baseChannel=i;
|
baseChannel=i-1;
|
||||||
|
|
||||||
// Play!
|
// Play!
|
||||||
playId=s_xmplaySound->playSfx(s_sfxSampleId,s_sfxDataId,baseChannel,_sfxId,sfxChannelMask);
|
playId=s_xmplaySound->playSfx(s_sfxSampleId,s_sfxDataId,baseChannel,_sfxId,sfxChannelMask);
|
||||||
|
|
|
@ -51,6 +51,7 @@ public:
|
||||||
{
|
{
|
||||||
HYPERMMX,
|
HYPERMMX,
|
||||||
DROPPOP,
|
DROPPOP,
|
||||||
|
MUSIC,
|
||||||
NUM_SONGIDS,
|
NUM_SONGIDS,
|
||||||
};
|
};
|
||||||
typedef enum SFXBANKID
|
typedef enum SFXBANKID
|
||||||
|
@ -108,10 +109,15 @@ private:
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
NUM_SPU_CHANNELS=24,
|
NUM_SPU_CHANNELS=24,
|
||||||
SONG_BASE_CHANNEL=0,
|
|
||||||
SONG_CHANNELS=10,
|
SONG_BASE_CHANNEL =0,
|
||||||
SFX_BASE_CHANNEL=SONG_BASE_CHANNEL+SONG_CHANNELS,
|
SONG_CHANNELS =10,
|
||||||
SFX_CHANNELS=NUM_SPU_CHANNELS-SFX_BASE_CHANNEL,
|
SONG_MAX_CHANNEL =SONG_BASE_CHANNEL+SONG_CHANNELS-1,
|
||||||
|
|
||||||
|
SFX_BASE_CHANNEL =SONG_MAX_CHANNEL+1,
|
||||||
|
SFX_CHANNELS =NUM_SPU_CHANNELS-SFX_BASE_CHANNEL,
|
||||||
|
SFX_MAX_CHANNEL =SFX_BASE_CHANNEL+SFX_CHANNELS-1,
|
||||||
|
|
||||||
VOLUME_CHANGE_SPEED=2,
|
VOLUME_CHANGE_SPEED=2,
|
||||||
INITIAL_VOLUME=192,
|
INITIAL_VOLUME=192,
|
||||||
};
|
};
|
||||||
|
|
|
@ -43,7 +43,6 @@ unsigned char *xmPtr;
|
||||||
Tyepdefs && Defines
|
Tyepdefs && Defines
|
||||||
------------------- */
|
------------------- */
|
||||||
|
|
||||||
#define XM_SONGID 0
|
|
||||||
#define MAX_XM_SONGS 5
|
#define MAX_XM_SONGS 5
|
||||||
#define MAX_XM_VABS 5
|
#define MAX_XM_VABS 5
|
||||||
|
|
||||||
|
@ -162,6 +161,8 @@ xmSampleId CXMPlaySound::loadSamples(FileEquate _vhFe,FileEquate _vbFe)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PKG - Can be neatened up a bit..
|
||||||
|
|
||||||
// Find next free vab slot
|
// Find next free vab slot
|
||||||
vabId=0;
|
vabId=0;
|
||||||
vab=s_xmVabs;
|
vab=s_xmVabs;
|
||||||
|
@ -211,6 +212,8 @@ xmSongId CXMPlaySound::loadSongData(FileEquate _songFe)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PKG - Can be neatened up a bit..
|
||||||
|
|
||||||
// Find next free song slot
|
// Find next free song slot
|
||||||
song=s_xmSongs;
|
song=s_xmSongs;
|
||||||
songId=0;
|
songId=0;
|
||||||
|
@ -328,7 +331,7 @@ xmPlayingSongId CXMPlaySound::playSong(xmSampleId _sampleId,xmSongId _songId,int
|
||||||
vab=&s_xmVabs[_sampleId];
|
vab=&s_xmVabs[_sampleId];
|
||||||
id=XM_Init(vab->m_vabId, // id from XM_VABInit
|
id=XM_Init(vab->m_vabId, // id from XM_VABInit
|
||||||
_songId, // XM id ( as passed to InitXMData )
|
_songId, // XM id ( as passed to InitXMData )
|
||||||
-1, // Song id
|
0, // Song id
|
||||||
_baseChannel, // First channel
|
_baseChannel, // First channel
|
||||||
XM_Loop, // Loop
|
XM_Loop, // Loop
|
||||||
-1, // Play mask
|
-1, // Play mask
|
||||||
|
@ -361,6 +364,9 @@ void CXMPlaySound::stopSong(xmPlayingSongId _songId)
|
||||||
int SONGNUM=1;
|
int SONGNUM=1;
|
||||||
xmPlayingSongId CXMPlaySound::playSfx(xmSampleId _sampleId,xmSongId _songId,int _baseChannel,int _sfxPattern,int _playMask=-1)
|
xmPlayingSongId CXMPlaySound::playSfx(xmSampleId _sampleId,xmSongId _songId,int _baseChannel,int _sfxPattern,int _playMask=-1)
|
||||||
{
|
{
|
||||||
|
// XM_PlaySample(XM_GetSampleAddress(_sampleId,_sfxPattern),23,0x3fff,0x3fff,0x800);
|
||||||
|
// return (xmPlayingSongId)0;
|
||||||
|
|
||||||
int i, maskCopy,channelCount=0;
|
int i, maskCopy,channelCount=0;
|
||||||
XMVab *vab;
|
XMVab *vab;
|
||||||
int id;
|
int id;
|
||||||
|
@ -386,11 +392,11 @@ xmPlayingSongId CXMPlaySound::playSfx(xmSampleId _sampleId,xmSongId _songId,int
|
||||||
XM_NoLoop, // Loop
|
XM_NoLoop, // Loop
|
||||||
_playMask, // Play mask
|
_playMask, // Play mask
|
||||||
XM_SFX, // Music
|
XM_SFX, // Music
|
||||||
_sfxPattern); // Pattern to start at
|
_sfxPattern); // Pattern to start at
|
||||||
|
|
||||||
SONGNUM++;
|
SONGNUM++;
|
||||||
if(SONGNUM>=24)SONGNUM=1;
|
if(SONGNUM>=24)SONGNUM=1;
|
||||||
PAUL_DBGMSG("sfx - ret:%d",id);
|
//PAUL_DBGMSG("sfx - ret:%d",id);
|
||||||
return (xmPlayingSongId)id;
|
return (xmPlayingSongId)id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,13 +410,8 @@ PAUL_DBGMSG("sfx - ret:%d",id);
|
||||||
int CXMPlaySound::isSfxActive(xmPlayingSongId _id)
|
int CXMPlaySound::isSfxActive(xmPlayingSongId _id)
|
||||||
{
|
{
|
||||||
XM_Feedback fb;
|
XM_Feedback fb;
|
||||||
int ret;
|
|
||||||
|
|
||||||
XM_GetFeedback(_id,&fb);
|
return XM_GetFeedback(_id,&fb)==0;
|
||||||
|
|
||||||
ret=fb.Status==XM_PLAYING;
|
|
||||||
//PAUL_DBGMSG("check %d ( %d )",_id,fb.Status);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,11 @@
|
||||||
#include "locale\textdbase.h"
|
#include "locale\textdbase.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __SOUND_SOUND_H__
|
||||||
|
#include "sound\sound.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define SCREEN_GRAB
|
#define SCREEN_GRAB
|
||||||
|
|
||||||
|
@ -66,6 +71,8 @@ void InitSystem() // reordered to reduce black screen (hope all is well
|
||||||
|
|
||||||
GameState::initialise();
|
GameState::initialise();
|
||||||
|
|
||||||
|
CSoundMediator::initialise();
|
||||||
|
|
||||||
#ifdef __USER_paul__
|
#ifdef __USER_paul__
|
||||||
s_paulScene.init();
|
s_paulScene.init();
|
||||||
#endif
|
#endif
|
||||||
|
@ -85,6 +92,8 @@ void MainLoop()
|
||||||
GameState::think();
|
GameState::think();
|
||||||
GameState::render();
|
GameState::render();
|
||||||
|
|
||||||
|
CSoundMediator::think(GameState::getTimeSinceLast());
|
||||||
|
|
||||||
#ifdef __USER_paul__
|
#ifdef __USER_paul__
|
||||||
s_paulScene.think();
|
s_paulScene.think();
|
||||||
s_paulScene.render();
|
s_paulScene.render();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue